Как отправить / проверить статус IDOC, отправленного в SAP ECC посредством аудита ALE?
Я работаю над приложением Java, которое получает iDocs от ECC и передает iDocs в ECC.
Наше приложение работает как мост между ECC и другими системами, оно получает iDocs от ECC, которые хранятся на диске нашим приложением, затем фоновый процесс отвечает за проверку местоположения файловой системы, где файлы с iDocs сохраняются и позже отправляются. в другие пункты назначения через HTTP-запросы. Приложение также взаимодействует с этими другими системами для извлечения информации, которая также сохраняется в файлах, а затем в фоновом процессе, для их чтения и создания iDocs для отправки в ECC.
Когда приложение получает iDoc от ECC, оно отправляет подтверждение iDoc в ECC, то же самое необходимо сделать при отправке в ECC, то есть когда приложение Java отправляет в него iDocs, мы хотим, чтобы ECC отправило подтверждение ALE нашему приложению. если iDocs были отправлены правильно, поэтому наше приложение знает, что отправленный пакет можно безопасно переместить в нашу папку истории, и в случае, если подтверждение указывает, что возникла проблема, следует предпринять еще одну попытку отправить iDocs.
Как мы можем настроить ECC для отправки подтверждения нашему приложению Java?
Код, который мы используем для отправки из Java в ECC:
try {
destination= JCoDestinationManager.getDestination(PROGID);
iDocRepository = JCoIDoc.getIDocRepository(destination);
tid = destination.createTID();
iDocFactory = JCoIDoc.getIDocFactory();
} catch (JCoException e) {
e.printStackTrace();
}
List<Invoic02> invoic02s = new ArrayList<>();
EDI_DC40 edi_dc40 = IdocUtil.generateIdocControlRecordObject(IdocUtil.invoiceIdocType, IdocUtil.invoiceMsgType);
for(InvoiceIdoc invoicIdoc : invoices){
Invoic02 invoic02 = new Invoic02();
invoicIdoc.setBEGIN("1");
invoicIdoc.setEDI_DC40(edi_dc40);
invoic02.getInvoiceIdoc().add(invoicIdoc);
}
String invoicesIdocString = XmlParser.objectToXmlString(invoices, Invoic02.class);
try {
IDocXMLProcessor processor= iDocFactory.getIDocXMLProcessor();
IDocDocumentList iDocList=processor.parse(iDocRepository, invoicesIdocString.toString());
JCoIDoc.send(iDocList, IDocFactory.IDOC_VERSION_DEFAULT, destination, tid);
} catch (JCoException e) {
e.printStackTrace();
} catch (IDocParseException e) {
e.printStackTrace();
}
Для прослушивания входящих IDOC мы используем частную библиотеку, но она также использует библиотеку JCO IDOC.
Можно ли использовать библиотеку JCO IDOC для проверки статуса отправленного IDOC? Или есть способ настроить ECC для отправки подтверждений каждого IDOC, который он получил?
2 ответа
Если вы используете стандартные методы ввода IDOC (http и function), возвращается номер сохранения IDOC. Так что вам не нужно ждать другого IDOC. Просто проверьте IDOC сохранить номер в ответ.
Я полагаю, что проверка TID - это единственный способ на стороне Java убедиться, что ваш IDoc был успешно получен. Передовой опыт SAP не дает нам ни одного из способов:
tid = destination.createTID ();
...
JCoIDoc.send (iDocList, IDocFactory.IDOC_VERSION_DEFAULT, пункт назначения, тид);
destination.confirmTID (TID);
вернуть истину;
Эта строка выдает ошибки, если что-то не так на стороне ERP.
Как я вижу в вашем комментарии под ответом Suncatcher, вы хотите запросить статус IDoc после того, как он был обработан на стороне ECC.
Во-первых, вы используете транзакционный RFC, поэтому обработка на стороне ECC является асинхронной, поэтому вам нужно ждать неопределенное время, пока IDoc не будет обработан SAP.
Следовательно, у вас есть две возможности:
- Либо ваше приложение регулярно запрашивает статус IDoc на стороне ECC.
- Или вы планируете программу
RBDSTATE
на стороне ECC в качестве фонового задания, запускаемого через регулярные промежутки времени, которое отправляет подтверждения для обработанных IDoc, и вы разрабатываете дополнительное приложение Java, которое прослушивает эти подтверждения. Я предлагаю вам выбрать протокол RFC для отправки подтверждений.RBDSTATE
сканирует обработанные IDoc и отправляет подтверждающий IDoc типаALEAUD01
в систему отправителя, которая содержит номера обработанных IDoc, их статус обработки (успех, ошибка), сообщения, созданные или измененные бизнес-объекты...- Вам необходимо настроить партнерские профили, порт, данные подключения (коды транзакций
WE20
,WE21
,BD97
,SM59
) - Вам необходимо разработать новое Java-приложение, работающее как RFC-сервер, которое слушает все, что приходит, и которое обрабатывает входящие
ALEAUD01
IDocs. - Вы можете получить дополнительную информацию об ALE Audit в библиотеке SAP.
- Что касается разработки серверного приложения RFC на java, вы можете получить дополнительную информацию в библиотеке SAP о программировании сервера SAP JCO.