c# 调用SAP接口,运行时报错Unable to load DLL ‘sapnwrfc‘ or one of its dependencies: 找不到指定的模块。 (0x8007007E)
·
调用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


![]()
更多推荐
所有评论(0)