簡體   English   中英

如何發送/檢查通過ALE審核發送到SAP ECC的IDOC的狀態?

[英]How to send/check the status of an IDOC sent to SAP ECC through ALE Audit?

我正在研究一個Java應用程序,該應用程序從ECC接收中間文檔(IDoc),並將iDocs傳遞給ECC。

我們的應用程序就像ECC與其他系統之間的橋梁一樣,它從ECC接收IDoc,這些IDoc由我們的應用程序存儲在磁盤中,然后由后台進程負責檢查保存有IDoc的文件並隨后發送的文件系統位置。通過HTTP請求到達其他目的地。 該應用程序還與其他系統通信,以檢索也保存到文件中的信息,然后在后台進程中讀取它們並構造要發送給ECC的IDoc。

當應用程序從ECC接收到IDoc時,它會向ECC發送一個確認IDoc,在發送給ECC時也需要做類似的事情,也就是說,當Java應用程序向其發送IDoc時,我們希望ECC將ALE確認發送給我們。如果正確發送了IDoc,則我們的應用程序知道可以安全地將已發送的批次移動到我們的歷史記錄文件夾中,並且如果確認指示存在問題,則應再次嘗試發送IDoc。

我們如何配置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的確認?

如果使用標准IDOC輸入法(http和函數),則返回IDOC保存號。 因此,您無需等待另一個IDOC。 只需檢查IDOC保存號碼即可。

我想,在Java端檢查TID是確保成功收到IDoc的唯一方法。 SAP 最佳實踐無法為我們提供任何一種方式:

tid = destination.createTID();
...
JCoIDoc.send(iDocList,IDocFactory.IDOC_VERSION_DEFAULT,目的地,tid);
destination.confirmTID(tid);
返回true;

如果ERP端出現問題,此行將引發錯誤

正如我在Suncatcher答案下的評論中所見,您想在IDoc在ECC端處理后查詢IDoc的狀態。

首先,您正在使用事務性RFC,因此ECC端的處理是異步的,因此必須等待不確定的時間,直到IDoc被SAP處理。

因此,您有兩種可能性:

  • 您的應用程序會定期在ECC端查詢IDoc的狀態
  • 或者,您將程序RBDSTATE安排在ECC端,作為以固定間隔觸發的后台作業,該作業發送對已處理IDoc的確認,然后開發一個偵聽這些確認的附加Java應用程序。 我建議您選擇RFC協議發送確認。
    • RBDSTATE掃描已處理的IDoc,並將ALEAUD01類型的確認IDoc發送到發送方系統,其中包含已處理IDoc的編號,其處理狀態(成功,錯誤),消息,已創建或已更改的業務對象...
    • 您必須配置伙伴配置文件,端口,連接數據(事務代碼WE20WE21BD97SM59
    • 您必須開發一個新的Java應用程序,它可以作為RFC服務器運行,它偵聽到達的所有內容,並處理入站ALEAUD01 IDoc。
    • 您可以在SAP庫中獲取有關ALE Audit的更多信息。
    • 關於Java中RFC服務器應用程序的開發,您可以在SAP Library中獲得有關SAP JCO Server Programming的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM