51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1630|回复: 1
打印 上一主题 下一主题

uft调用rfc接口

[复制链接]
  • TA的每日心情
    奋斗
    2021-8-16 14:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-3-12 16:15:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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可见
    复制代码

    4、uft调用方法:

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



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



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 02:21 , Processed in 0.064276 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表