2016-10-21 9 views
0

Я работаю над приложением 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, который он получил?

ответ

0

Если вы используете стандартные методы ввода IDOC (http и function), это возвращает номер сохранения IDOC. Поэтому вам не нужно ждать другой IDOC. Просто проверяйте номер IDOC в ответ.

+0

IDOCs отправляются из ECC через ALE, из приложения Java мы используем библиотеку JCO IDOC, проверяем код в моем обновленном вопросе –

+0

, что мы хотим, чтобы ECC отправил подтверждение ALE нашему приложению или узнать, если библиотека JCO IDOC может проверять статус IDOC, отправленных в ECC. –

+0

. Вы можете успешно проверить ваш IDOC, успешно сохраненный ECC командой destination.confirmTID (tid). Я понимаю, что вам необходимо обработать IDOC или нет. Есть много причин, по которым ваш IDOC терпит неудачу, пока он будет обрабатывать. Я думаю, вам нужно вызвать функцию RFC GET_STATUS_FROM_IDOCNR с помощью Java-библиотеки SAP или веб-службы. – mkysoft

0

Я полагаю, проверка TID - это единственный способ на стороне Java, чтобы убедиться, что ваш IDoc был успешно принят. SAP best practice не дает нам никаких способов:

tid = destination.createTID();
...
JCoIDoc.send (iDocList, IDocFactory.IDOC_VERSION_DEFAULT, destination, tid);
destination.confirmTID (tid);
return true;

Эта строка throws errors если что-то не так на стороне ERP.

+0

Из того, что я прочитал по спецификации метода confirmTID, исключение брошенное что-то не удалось при выполнении подтверждения, если статус idoc является ошибкой, исключение не будет выбрано, если я не ошибаюсь. –

+0

Да, вы правы. Он может проверять, только если он был получен. Ошибочный статус обработки IDoc (поле «STATUS» в «EDIDC») технически не означает, что с доставкой IDoc что-то пошло не так. Он сообщает нам, что в IDO входящем FM произошла некоторая логическая ошибка. – Suncatcher

+0

И вот о чем мой вопрос, я хочу, чтобы какой-то способ узнать о статусе любых IDoc, отправляемых приложением в ERP, кажется, что создание пользовательского RFC является одним из способов, но мы хотим избежать этого, чтобы вместо этого в ERP чтобы отправить некоторое подтверждение о статусе полученного IDoc. –

 Смежные вопросы

  • Нет связанных вопросов^_^