使用 C# sap-connector 搜索 SAP 客户

Search SAP customers with C# sap-connector

我需要通过 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 table 有这个奇怪的结构:

https://www.sapdatasheet.org/abap/tabl/bapikna111.html

如何获取客户名单?我是否调用了错误的 BAPI?

您可能没有得到任何结果,在这种情况下 table RESULT_TAB 仅包含一行您的原始搜索参数和一条警告消息。您需要将参数 PL_HOLD 设置为 'X' 以允许使用占位符。

当有结果时,您会在 table RESULT_TAB 中看到几行,字段 FIELDVALUE 包含实际客户名称(因为您在字段 NAME1 - 更改搜索字段,结果也会更改)和包含客户编号的 CUSTOMERNUMBER

如果结果多于 MAX_CNT, 中设置的结果,您将在 中看到消息类型 I、ID FN、编号 063´ ]结果集的最后一行(用您的登录语言显示的消息告诉您有超过 X 个结果)。

如果您的搜索根本没有产生任何结果,结构 RETURN 将包含一条警告消息(消息类型 W、ID FN、数字 802) 并且 table RESULT_TAB 中的单行应包含另一个警告消息类型 W、ID FN、数字 065 和您的登录中的解释性消息文本告诉您在您的搜索中找不到帐户的语言。

如果您想知道如何阅读 IRfcTable,您可以遍历其内容。它本质上是 IRfcStructure 项的列表。

foreach(IRfcStructure row in returnTable) 
{
     var customerNumber = row.GetString("CUSTOMERNUMBER");
}