Поиск клиентов SAP с помощью 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 имеет странную структуру:

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

Как я могу получить список клиентов? Я вызываю неправильный BAPI?


person TeoVr81    schedule 21.12.2017    source источник


Ответы (1)


Вероятно, вы не получили никаких результатов, в этом случае таблица RESULT_TAB содержит только одну строку с вашими исходными параметрами поиска и предупреждающим сообщением. Вам нужно установить параметр PL_HOLD на 'X', чтобы разрешить использование заполнителей.

Когда есть результаты, вы увидите несколько строк в таблице RESULT_TAB, где поле FIELDVALUE содержит фактическое имя клиента (поскольку вы искали в поле NAME1 — измените поле поиска, и результат тоже изменится), а CUSTOMERNUMBER содержит номер клиента.

Если результатов больше, чем указано в MAX_CNT,, вы увидите сообщение типа I, идентификатор FN, номер 063´ в последней строке вашего набора результатов (с сообщением на вашем языке входа в систему о том, что есть более Х результатов).

Если ваш поиск вообще не дал никаких результатов, структура RETURN будет содержать предупреждающее сообщение (тип сообщения W, ID FN, номер 802), а единственная строка в таблице RESULT_TAB должна содержать другое предупреждающее сообщение типа W, ID FN, номер 065 и текст пояснительного сообщения на вашем языке входа в систему о том, что по вашему запросу не найдено ни одной учетной записи.

Если вам интересно, как вообще читать IRfcTable, вы можете просто перебрать его содержимое. По сути, это список элементов IRfcStructure.

foreach(IRfcStructure row in returnTable) 
{
     var customerNumber = row.GetString("CUSTOMERNUMBER");
}
person Dirk Trilsbeek    schedule 21.12.2017
comment
Можно ли вызвать BAPI со списком CUSTOMERNUMBER и получить обратно все детали клиентов (список клиентов)? - person TeoVr81; 21.12.2017
comment
Это вряд ли. Обычно SAP BAPI предоставляют либо базовый список, основанный на некоторых параметрах поиска, либо подробную информацию об одном объекте. - person Dirk Trilsbeek; 22.12.2017