Как создавать и отправлять Idoc в SAP с помощью SAP .Net Connector 3
Я хочу создать и отправить idoc в SAP с помощью SAP. Сетевой соединитель 3.x.
И у меня есть настроенный RFC-адресат в моем приложении:
_rfcDestination = RfcDestinationManager.GetDestination(_destinationName);
Но я не могу найти примеров того, как создавать и отправлять idoc.
Кто-нибудь может дать пример кода о том, как создать и отправить idoc?
2 ответа
Функциональным модулем является один из способов передачи IDOC в систему SAP с использованием NCo. IDOC_INBOUND_ASYNCHRONOUS
, Функциональный модуль имеет несколько параметров таблицы, содержащих ваши данные idoc. Таблица IDOC_CONTROL_REC_40
содержит контрольную запись, IDOC_DATA_REC_40
содержит сегменты данных idoc.
IDOC_DATA_REC_40
содержит поле с именем SDATA
, Это поле содержит данные сегмента idoc в виде единой объединенной строки с фиксированной длиной поля.
var fnc = destination.Repository.CreateFunction("IDOC_INBOUND_ASYNCHRONOUS");
var controlTable = fnc.GetTable("IDOC_CONTROL_REC_40");
var dataTable = fnc.GetTable("IDOC_DATA_REC_40");
// control segment
controlTable.Append();
controlTable.CurrentRow.SetValue("TABNAM", "EDI_DC40 ");
...
// here you add the data segments
dataTable.Append();
dataTable.CurrentRow.SetValue(...);
fnc.Invoke(destination);
построение данных idoc для IDOC_DATA_REC_40-SDATA
должно быть сделано вручную в вашем коде - вам нужно знать длину полей, включая цифры для числовых полей. Может быть способ получить эту информацию из системы SAP и использовать ее в своем коде, но я никогда не пробовал этого.
Есть выход. SAP предоставляет еще один функциональный модуль RFC «IDOCTYPE_READ_COMPLETE», который согласно документу «Чтение типа IDoc с сегментами (RFC-совместимо)»
Из этого функционального модуля вы получите все определения сегментов/полей.
Важно отметить параметр «PI_RELEASE», который, если вы оставите его пустым, по умолчанию будет использовать версию приложения SAP.
IDOC может иметь несколько «версий», созданных для разных PI_RELEASES... Надеюсь, это поможет.