0

我正在开发一个从 ECC 接收中间文档 (IDocs) 并将 iDocs 传递给 ECC 的 Java 应用程序。

我们的应用程序就像 ECC 和其他系统之间的桥梁,它从 ECC 接收 IDocs,这些 IDocs 由我们的应用程序存储在磁盘中,然后后台进程负责检查文件系统位置,其中包含 IDocs 的文件被保存并稍后发送通过 HTTP 请求到其他目的地。该应用程序还与这些其他系统通信以检索也保存到文件中的信息,然后在后台进程中读取它们并构建要发送到 ECC 的 IDoc。

当应用程序从 ECC 收到 IDoc 时,它会向 ECC 发送确认 IDoc,发送给 ECC 时需要做类似的事情,即当 Java 应用程序向它发送 IDoc 时,我们希望 ECC 向我们的如果 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 的确认?

4

3 回答 3

0

如果您使用的是标准 IDOC 输入法(http 和函数),则返回 IDOC 保存编号。因此,您无需等待另一个 IDOC。只需检查 IDOC 保存编号作为响应。

于 2016-10-23T17:49:08.033 回答
0

正如我在 Suncatcher 答案下的评论中看到的那样,您想在 ECC 端处理 IDoc 后查询 IDoc 的状态。

首先,您使用的是事务性 RFC,因此 ECC 端的处理是异步的,因此您必须等待一段未定义的时间,直到 SAP 处理 IDoc。

因此,您有两种可能性:

  • 要么您的应用程序定期在 ECC 端查询 IDocs 的状态
  • 或者您将程序安排RBDSTATE在 ECC 端,作为定期触发的后台作业,发送已处理 IDoc 的确认,然后您开发一个额外的 Java 应用程序来监听这些确认。我建议您选择 RFC 协议来发送确认。
    • RBDSTATE扫描已处理的 IDoc 并向发送ALEAUD01方系统发送确认 IDoc 类型,其中包含已处理 IDoc 的编号、其处理状态(成功、错误)、消息、创建或更改的业务对象......
    • 您必须配置合作伙伴配置文件、端口、连接数据(事务代码WE20、、、、WE21BD97SM59
    • 您必须开发一个新的 Java 应用程序,该应用程序作为 RFC 服务器运行,它侦听到达的任何内容,并处理入站ALEAUD01IDoc。
    • 您可以在SAP 库中获得有关 ALE 审计的更多信息。
    • 关于在 java 中开发 RFC 服务器应用程序,您可以在SAP 库中获得有关 SAP JCO 服务器编程的更多信息。
于 2019-09-29T09:30:58.063 回答
0

我想,检查TID是 Java 端确保成功接收 IDoc 的唯一方法。SAP最佳实践没有给我们任何一种方法:

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

如果 ERP 端出现问题,此行将引发错误

于 2016-11-01T19:01:21.457 回答