Я работаю над приложением Java, которое получает iDocs из ECC и передает iDocs в ECC.Как отправить/проверить статус IDOC, отправленного в SAP ECC через ALE Audit?
Наше приложение работает как бридж между 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();
}
Для прослушивания входящих IDOCs мы используем частную библиотеку, но он также использует библиотеку IDoc JCO.
Можно ли использовать библиотеку JCO IDOC для проверки статуса отправленного IDOC? Или есть способ настроить ECC на отправку подтверждений каждого IDOC, который он получил?
IDOCs отправляются из ECC через ALE, из приложения Java мы используем библиотеку JCO IDOC, проверяем код в моем обновленном вопросе –
, что мы хотим, чтобы ECC отправил подтверждение ALE нашему приложению или узнать, если библиотека JCO IDOC может проверять статус IDOC, отправленных в ECC. –
. Вы можете успешно проверить ваш IDOC, успешно сохраненный ECC командой destination.confirmTID (tid). Я понимаю, что вам необходимо обработать IDOC или нет. Есть много причин, по которым ваш IDOC терпит неудачу, пока он будет обрабатывать. Я думаю, вам нужно вызвать функцию RFC GET_STATUS_FROM_IDOCNR с помощью Java-библиотеки SAP или веб-службы. – mkysoft