当我尝试调用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。
答案 0 :(得分: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")
答案 1 :(得分:0)
“屏幕中出现语法或生成错误。”
BAPI_FUNCLOC_GETLIST(或其内部正在调用的某些子例程)看起来有语法错误。由于这是SAP提供的标准BAPI,因此非常不寻常...:-)
当您尝试使用语法错误调用功能模块时,SAP系统将转储并中止连接。 (尽管我希望在这种情况下出现RfcSystemException,而不是RfcCommunicationException!?)
是否可能是某些补丁程序或热包导入SAP系统失败并损坏了该功能模块(或内部使用的组件)的ABAP代码,或者处于不一致状态?