SAP .NET连接器RFCMUNICATIONSAPPRESS

问题描述 投票:0回答:2

当我尝试调用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进行处理。

.net sap bapi sap-connector
2个回答
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")

0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.