我需要从C#应用程序中搜索SAP系统中的客户。 我正在使用C#.NET连接器。 我试图调用BAPI“BAPI_CUSTOMER_FIND”来获取名称以“C”字符开头的所有客户,这是我的代码:
SAPConnectionConfigurator cfg = new SAPConnectionConfigurator();
RfcDestinationManager.RegisterDestinationConfiguration(cfg);
RfcDestination dest = RfcDestinationManager.GetDestination("mySAPdestination");
RfcRepository repo = dest.Repository;
IRfcFunction customerList = repo.CreateFunction("BAPI_CUSTOMER_FIND");
customerList.SetValue("MAX_CNT", "100");
IRfcTable searchFields = customerList.GetTable("SELOPT_TAB");
searchFields.Insert();
searchFields.CurrentRow.SetValue("COMP_CODE", "");
searchFields.CurrentRow.SetValue("TABNAME", "KNA1");
searchFields.CurrentRow.SetValue("FIELDNAME", "NAME1");
searchFields.CurrentRow.SetValue("FIELDVALUE", "C*");
customerList.Invoke(dest);
IRfcTable results = customerList.GetTable("RESULT_TAB");
呼叫正常,但我不知道如何阅读结果。我需要一个客户列表,但RESULT_TAB表有这种奇怪的结构:
https://www.sapdatasheet.org/abap/tabl/bapikna111.html
如何获得客户名单?我打电话给错误的BAPI吗?
答案 0 :(得分:1)
您可能没有获得任何结果,在这种情况下,表RESULT_TAB
只包含一行,其中包含原始搜索参数和警告消息。您需要将参数PL_HOLD
设置为'X'
以允许使用占位符。
如果有结果,您会在表格RESULT_TAB
中看到几行,其中字段FIELDVALUE
包含实际的客户名称(因为您在字段NAME1
中搜索了) - 更改了搜索字段和结果也会发生变化)和CUSTOMERNUMBER
包含客户编号。
如果结果多于MAX_CNT,
中设置的结果,则您会在中查看消息类型I
,ID FN
,号码063´
结果集的行(使用登录语言中的消息告诉您结果超过X)。
如果您的搜索根本没有产生任何结果,则结构RETURN
将包含警告消息(消息类型W
,ID FN
,编号{{1}表格802
中的单行应包含另一个警告消息类型RESULT_TAB
,ID W
,编号FN
以及您登录语言中的解释性消息文本,告诉您在您的搜索中找不到帐户。
如果您想知道如何阅读065
,您可以迭代其内容。它本质上是IRfcStructure项目的列表。
IRfcTable