【问题标题】:SAP .NET Connector BAPI RfcCommunicationExceptionSAP .NET 连接器 BAPI RfcCommunicationException
【发布时间】:2014-09-11 15:27:37
【问题描述】:

我在尝试调用 IRfcFunction 时遇到了 RfcCommunicationException 问题。我可以像这样处理 BAPI_MATERIAL_GETLIST 并得到结果:

    SAPSystemConnect cfg = new SAPSystemConnect();
    RfcDestinationManager.RegisterDestinationConfiguration(cfg);
    RfcDestination dest = RfcDestinationManager.GetDestination("mySAPdestination");
    RfcRepository repo = dest.Repository;
    IRfcFunction func = repo.CreateFunction("BAPI_MATERIAL_GETLIST");

    IRfcTable tbl = func.GetTable("MATNRSELECTION");            

    tbl.Append();
    tbl.SetValue("SIGN", "I");
    tbl.SetValue("OPTION", "BT");
    tbl.SetValue("MATNR_LOW", "10");
    tbl.SetValue("MATNR_HIGH", "20");

    func.SetValue("MATNRSELECTION", tbl);
    IRfcTable tbl2 = func.GetTable("MATNRLIST");

    func.Invoke(dest);

    DataTable dt = tbl2.ToDataTable("table1");

    foreach (DataRow row in dt.Rows)
    {
        Console.WriteLine("{0}", row.Field<string>(0));
    }

但是当我尝试处理 BAPI_FUNCLOC_GETLIST 时,我收到了带有此代码的 RfcCommunicationException:

    SAPSystemConnect cfg = new SAPSystemConnect();
    RfcDestinationManager.RegisterDestinationConfiguration(cfg);
    RfcDestination dest = RfcDestinationManager.GetDestination("mySAPdestination");
    RfcRepository repo = dest.Repository;
    IRfcFunction func = repo.CreateFunction("BAPI_FUNCLOC_GETLIST");

    IRfcTable tbl = func.GetTable("FUNCLOC_RA");

    tbl.Append();
    tbl.SetValue("SIGN", "I");
    tbl.SetValue("OPTION", "CP");
    tbl.SetValue("LOW", "MY-FL*");            

    func.SetValue("FUNCLOC_RA", tbl);
    IRfcTable tbl2 = func.GetTable("FUNCLOC_LIST");

    func.Invoke(dest); // I get an RfcCommunicationException here that says
                       // "Syntax or generation error in a screen."

    DataTable dt = tbl2.ToDataTable("table1");

    foreach (DataRow row in dt.Rows)
    {
        Console.WriteLine("{0}", row.Field<string>(0));
    }

我按照here 的说明进行操作,但似乎无法让 BAPI_FUNCLOC_GETLIST 进行处理。

【问题讨论】:

  • 检查 ABAP 系统中的事务 ST22 - 那里有任何短转储吗?
  • 我没有 ST22 的授权。
  • 尝试联系您的管理员。简短的转储应该让您了解出了什么问题。您可以去掉“func.SetValue("FUNCLOC_RA", tbl);”这一行。表已经是功能模块对象的一部分,不需要重新设置。顺便说一句,我在我们的一个 ECC 6.0 系统中测试了 FM,您的参数似乎有效,至少它没有对我产生影响。
  • 您不需要将带有 setValue 的表设置回函数。不试一试

标签: .net sap bapi sap-dotnet-connector


【解决方案1】:

这真的很旧,但我想我会分享我的发现。无论您的配置参数是如何设置的,一些 BAPI 似乎都可以工作。这是一个例子:

public RfcConfigParameters GetParameters(string destinationName)
    {

        RfcConfigParameters parms = new RfcConfigParameters();

        if (destinationName.Equals("mySAPdestination"))
        {
            parms.Add(RfcConfigParameters.AppServerHost, "sapnode.mycompany.net");
            parms.Add(RfcConfigParameters.SystemNumber, "21");
            parms.Add(RfcConfigParameters.SystemID, "CF1");
            parms.Add(RfcConfigParameters.User, "mySAPuser");
            parms.Add(RfcConfigParameters.Password, "mySAPpassword");
            parms.Add(RfcConfigParameters.Client, "100");
            parms.Add(RfcConfigParameters.Language, "EN"); 
            parms.Add(RfcConfigParameters.PoolSize, "5");
        }
        return parms;

    }

我发现我需要让任何可用的 BAPI 工作,以确保我使用“RfcConfigParameters.LogonGroup”参数进行连接...

parms.Add(RfcConfigParameters.LogonGroup, "GRPX")

【讨论】:

    【解决方案2】:

    “屏幕中的语法或生成错误。”

    看起来 BAPI_FUNCLOC_GETLIST(或它在内部调用的某些子程序)有语法错误。由于这是 SAP 提供的标准 BAPI,这很不寻常... :-)

    当您尝试调用有语法错误的功能模块时,SAP 系统会转储并中止连接。 (虽然我希望在这种情况下出现 RfcSystemException,而不是 RfcCommunicationException!?)

    可能是某些补丁或热包导入到您的 SAP 系统中失败并损坏了该功能模块(或内部使用的组件)的 ABAP 代码或使其处于不一致状态?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2023-04-03
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多