51Testing软件测试论坛

标题: uft调用rfc接口 [打印本页]

作者: Mario洁    时间: 2018-3-12 16:15
标题: uft调用rfc接口
RFC接口函数调用:

以下代码是封装好的,为了提供给UFT工具调用,使用c#写成dll。

类型项目分成两个:

1.baseConfigModel.cs  //sap配置登录信息,属性实体类
  1. using System;
  2. using System.Collections.Generic;
  3. //using System.Linq;
  4. using System.Text;
  5. //using System.Threading.Tasks;
  6. using SAP.Middleware.Connector;
  7. namespace I_RFC_LIB.Model
  8. {
  9.     public class baseConfigModel
  10.     {


  11.         public string Name { get; set; } //系统名字QH5
  12.         public string AppServerHost { get; set; }//系统ip地址
  13.         public string SystemNumber { get; set; } //系统实例
  14.         public string SystemID { get; set; }//系统id
  15.         public string User { get; set; }//用户ATPSUSER
  16.         public string Password { get; set; }//密码
  17.         public string Client { get; set; }//客户端号800
  18.         public string Language { get; set; } //语言zh en
  19.         public string IFUNC { get; set; } //接口函数名
  20.         public RfcDestination sapConfig { get; set; } //sap登录配置
  21.         public RfcRepository rfcRepository { get; set; } //Repository对象
  22.         public string resultConfig { get; set; } //配置结果
  23.     }
  24. }
  25. 复制代码


  26. 2.C_RFC.cs //具体实现

  27. 复制代码
  28. using System;
  29. using System.Collections.Generic;
  30. //using System.Linq;
  31. using System.Text;
  32. using System.Reflection;
  33. //using System.Threading.Tasks;
  34. ///**************************************************************///
  35. using SAP.Middleware.Connector;
  36. ///引用合名空间SAP.Middleware.Connector需要引用sapnco3.0 dll
  37. ///需要framework2.0支持
  38. ///sapnco.dll
  39. ///sapnco_utils
  40. ///**************************************************************///


  41. namespace I_RFC_LIB
  42. {
  43.     public class C_RFC
  44.     {
  45.         Model.baseConfigModel   configModel = new Model.baseConfigModel(); //实例类  登录配置属性

  46.         /// <summary>
  47.         /// 调用rfc接口函数
  48.         /// </summary>
  49.         /// <param name="headstr">包含配置信息的头</param>
  50.         /// <param name="itemstr">接口需要参数</param>
  51.         /// <returns></returns>
  52.         public string invoke(string headstr,string itemstr)
  53.         {
  54.             string[] headArr = headstr.Split(new string[] { "@__@" }, StringSplitOptions.RemoveEmptyEntries);
  55.             string[] itemArr = itemstr.Split(new string[] { "@__@" }, StringSplitOptions.RemoveEmptyEntries);

  56.             #region //head属性赋值
  57.             //rfc config

  58.             var proValue = configModel.GetType(); //获取属性实例

  59.             for (var i = 0; i < headArr.Length; i++)
  60.             {
  61.                 var tmpVal = headArr[i].Split(new string[] { "@_@" }, StringSplitOptions.None);
  62.                 foreach (PropertyInfo py in proValue.GetProperties())
  63.                 {
  64.                     if (py.Name.ToUpper() == tmpVal[0].ToUpper())
  65.                     {
  66.                         proValue.GetProperty(py.Name).SetValue(configModel, tmpVal[1], null);
  67.                     }
  68.                 }
  69.             }

  70.             #endregion

  71.             if (rfc_config()) //执行配置,获取对象
  72.             {
  73.                 IRfcFunction rfc_invoke = configModel.rfcRepository.CreateFunction(configModel.IFUNC); //调用"ZFUC_APWZ_AP_PREVIEW"
  74.                 rfc_invoke.Invoke(configModel.sapConfig); //执行函数

  75.                 #region //item传参
  76.                 for (var i = 0; i < itemArr.Length; i++)
  77.                 {
  78.                     var tmpitVal = itemArr[i].Split(new string[] { "@_@" }, StringSplitOptions.RemoveEmptyEntries);
  79.                     rfc_invoke.SetValue(tmpitVal[0], tmpitVal[1]); //设置参数 (参数名,参数值)
  80.                 }
  81.                 #endregion

  82.                 //rfc_invoke.SetValue("PSPID", ""); //设置参数 项目编号
  83.                 IRfcTable rfcTable = rfc_invoke.GetTable("RETURN"); //获取内表
  84.                 string message = rfcTable.GetValue("MESSAGE").ToString();

  85.                 return message;
  86.             }
  87.             else
  88.             {
  89.                 return "配置登录时出现问题,请查检配置!"+configModel.resultConfig;
  90.             }
  91.         }


  92.         /// <summary>
  93.         /// 登录配置
  94.         /// </summary>
  95.         /// <returns>bool</returns>
  96.         public bool rfc_config()
  97.         {
  98.             try
  99.             {
  100.                 //rfc配置
  101.                 RfcConfigParameters argsP = new RfcConfigParameters();
  102.                 argsP.Add(RfcConfigParameters.Name, configModel.Name);
  103.                 argsP.Add(RfcConfigParameters.AppServerHost, configModel.AppServerHost);
  104.                 argsP.Add(RfcConfigParameters.SystemNumber, configModel.SystemNumber);
  105.                 argsP.Add(RfcConfigParameters.SystemID, configModel.SystemID);
  106.                 argsP.Add(RfcConfigParameters.User, configModel.User);
  107.                 argsP.Add(RfcConfigParameters.Password, configModel.Password);
  108.                 argsP.Add(RfcConfigParameters.Client, configModel.Client);
  109.                 argsP.Add(RfcConfigParameters.Language, configModel.Language);
  110.                 argsP.Add(RfcConfigParameters.PoolSize, "5");
  111.                 argsP.Add(RfcConfigParameters.MaxPoolSize, "10");
  112.                 argsP.Add(RfcConfigParameters.IdleTimeout, "60");

  113.                 //获取rfc配置
  114.                 configModel.sapConfig = RfcDestinationManager.GetDestination(argsP);
  115.                 configModel.rfcRepository = configModel.sapConfig.Repository;
  116.             }
  117.             catch (RfcBaseException ex)
  118.             {
  119.                 configModel.resultConfig = ex.Message;
  120.                 return false;
  121.             }
  122.             return true;
  123.         }

  124.     }
  125. }
  126. 复制代码
  127. 3.uft调用

  128. 需要设置,程序集com可见
复制代码
[attach]111813[/attach]
4、uft调用方法:

set rfc = dotnetfactory.CreateInstance("I_RFC_LIB.C_RFC","d:\\rfc.dll")



5、c#类库调用结果。接口返回“ATPSUSER不是该步骤允许的审批人”
[attach]111814[/attach]



作者: 梦想家    时间: 2018-5-14 08:48
学习




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2