首次使用SAPNWRFC在.NET Core中调用SAP RFC遇类型转换错误求助
解决SAPNWRFC .NET Core中RFC_CONVERSION_FAILURE错误
错误原因
你遇到的RFC_CONVERSION_FAILURE错误,是因为在SapFunctionResult中用object类型接收SAP表T_ZSDS_IH08A,导致框架无法正确将RFCTYPE_TABLE类型的SAP表映射到目标类型,误将其当作结构体处理。
解决方案
有两种可行的解决方式,根据你的需求选择:
方式1:使用强类型集合接收表数据(推荐)
这种方式类型安全,符合.NET Core的开发习惯,需要先定义表行对应的实体类,再用集合类型接收表数据。
- 定义表行实体类
根据SAP表T_ZSDS_IH08A的实际字段,创建对应的C#类,每个字段用[SapName]属性映射SAP字段名:
public class T_ZSDS_IH08ARow { // 替换为你表中的实际字段,示例如下: [SapName("EQUNR")] public string EquipmentNumber { get; set; } [SapName("TPLNR")] public string FunctionalLocation { get; set; } // 添加其他需要的字段 }
- 修改结果接收类
将SapFunctionResult中的object类型替换为List<T_ZSDS_IH08ARow>:
public class SapFunctionResult { [SapName("T_ZSDS_IH08A")] public List<T_ZSDS_IH08ARow> Table { get; set; } }
- 保持原有调用代码不变
此时执行someFunction.Invoke<SapFunctionResult>(...)后,result.Table就会包含表的所有数据,直接遍历即可使用。
方式2:手动获取表数据(兼容原NCO写法)
如果你希望沿用.NET Framework中NCO的写法,可以放弃泛型Invoke,手动设置参数并获取表:
SapConfig sapConfig = new SapConfig(); string connectionString = sapConfig.SapconnectionString(ConfigurationManager.AppSettings["Ambiente"].ToString()); using var connection = new SapConnection(connectionString); try { connection.Connect(); using var someFunction = connection.CreateFunction("ZRFC_IH08"); // 手动设置输入参数 someFunction.SetValue("EquipmentNumber", ""); someFunction.SetValue("FunctionalLocation", ""); // 执行RFC someFunction.Invoke(); // 获取表数据 var table = someFunction.GetTable("T_ZSDS_IH08A"); // 遍历表处理数据 foreach (var row in table) { string equnr = row.GetString("EQUNR"); string tplnr = row.GetString("TPLNR"); // 处理其他字段 } } catch (Exception ex) { throw ex; }
内容的提问来源于stack exchange,提问作者Gustavo Damasceno
相关产品推荐
相关产品推荐

