You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

首次使用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的开发习惯,需要先定义表行对应的实体类,再用集合类型接收表数据。

  1. 定义表行实体类
    根据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; }

    // 添加其他需要的字段
}
  1. 修改结果接收类
    将SapFunctionResult中的object类型替换为List<T_ZSDS_IH08ARow>:
public class SapFunctionResult
{
    [SapName("T_ZSDS_IH08A")]
    public List<T_ZSDS_IH08ARow> Table { get; set; }
}
  1. 保持原有调用代码不变
    此时执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:00:10