调用SAP需要引入的dll档

Nuget中下载NwRfcNet包,NwRfcNet底层也是调用的sapnwrfc文件。要将以下几个dll档加入项目中,在属性中设置“复制到输出目录”

最后bin下要有下面几个dll文档,缺少一个都可能会报错,可以参考https://blog.csdn.net/tracymcgradymd/article/details/127123165

连接SAP接口

调用方法

try
{
    using (var conn = new RfcConnection(builder => builder
                                               .UseConnectionHost(ConfigurationManager.AppSettings["AppServerHost"])
                                               .UseSystemNumber(ConfigurationManager.AppSettings["SystemNumber"])
                                               .UseLogonUserName(ConfigurationManager.AppSettings["User"])
                                               .UseLogonPassword(ConfigurationManager.AppSettings["Password"])
                                               .UseLogonClient(ConfigurationManager.AppSettings["Client"])
                                               .UseLogonLanguage(ConfigurationManager.AppSettings["Language"])))
    {
        conn.Open();
// xxxxx:函数模块
        using (var func = conn.CallRfcFunction("xxxxx"))
        {
            conn.Mapper = SapData.StructureRfcMapper();
            var request = new SAP_Requst<SAP_IT_DATA>()
            {
// IT_DATA:传递给SAP的参数
                IT_DATA = new List<SAP_IT_DATA>() { new SAP_IT_DATA() {
                     字段1= "xx",
                     字段2= "xxx",
                 } }
            };
            // 请求接口
            func.Invoke(request);
            // 获取响应数据
            var response = func.GetOutputParameters<SAP_Response<SAP_ET_DATA[]>>();
// ET_DATA:SAP返回的值
            if (response != null && response.ET_DATA.Length > 0)
            {
                // 其他逻辑处理
            }

        }
    }
}
catch (Exception ex)
{
    logger.Error($"抛出异常: {ex.Message}");
}

Mapper对照关系:IT_DATA是我们传递给SAP的;ET_DATA是SAP返回给我们的值,需要什么字段就定义什么字段内容

大部分情况下RfcFieldType可以直接使用Char类型,如果是时间使用Date类型,如果是数字也可以使用Char类型

 public class SapData
 {
     public static RfcMapper StructureRfcMapper()
     {
         RfcMapper mapper = new RfcMapper();
         // 请求参数
         mapper.Parameter<SAP_Requst<SAP_IT_DATA>>().Property(x => x.IT_DATA)
               .HasParameterName("IT_DATA")
               .HasParameterType(RfcFieldType.Table);
         mapper.Parameter<SAP_IT_DATA>().Property(x => x.字段1)
              .HasParameterName("字段1")
              .MaxLength(4)
              .HasParameterType(RfcFieldType.Char);
         mapper.Parameter<SAP_IT_DATA>().Property(x => x.字段2)
            .HasParameterName("字段2")
            .MaxLength(4)
            .HasParameterType(RfcFieldType.Char);

         // 响应参数
         mapper.Parameter<SAP_Response<SAP_ET_DATA[]>>().Property(x => x.ET_DATA)
               .HasParameterName("ET_DATA")
               .HasParameterType(RfcFieldType.Table);
         mapper.Parameter<SAP_ET_DATA>().Property(x => x.字段3)
            .HasParameterName("字段3")
            .MaxLength(10)
            .HasParameterType(RfcFieldType.Char);
         mapper.Parameter<SAP_ET_DATA>().Property(x => x.字段4)
            .HasParameterName("字段4")
            .MaxLength(4)
            .HasParameterType(RfcFieldType.Char);
        
         return mapper;
     }
 }

 public class SAP_IT_DATA
 {
     public string 字段1{ get; set; }
  
     public string 字段2{ get; set; }
 }
 public class SAP_Requst<T>
 {
     public List<T> IT_DATA { get; set; }
 }

 public class SAP_Response<T>
 {
     public T ET_DATA { get; set; }
 }

 public class SAP_ET_DATA
 {
     public string 字段3{ get; set; }
     public string 字段4{ get; set; }
 }

运行时报错:Unable to load DLL 'sapnwrfc' or one of its dependencies: 找不到指定的模块。 (0x8007007E) 

系统运行时,sapnwrfc.dll 依赖Visual C++ 运行库,可能是依赖缺失导致的。

在官网下载Visual C++ 2013 运行库,安装完成就可以了,如果还有问题将X86的也一并安装,然后重启。https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2013-vc-120-no-longer-supported

更多推荐