2010-12-06 105 views
4

使用JCo(3.x)读取SAP服务器发送的IDOC时,应该采取什么操作来指示消息已被正确接收(即提交) ?如何在读取IDOC时控制事务(提交/回滚)

在Java中我想是这样的:

public class MyHandler implements JCoIDocHandler { 
    public void handleRequest(JCoServerContext serverCtx, IDocDocumentList documentList) { 
    IDocDocumentIterator iterator = documentList.iterator(); 
    while (iterator.hasNext()) { 
      IDocDocument doc = iterator.next(); 
      // some processing 
    } 
    // here I would like to say COMMIT 
    // i.e., I confirm all the documents have been read 
    // and our side takes ownership 
    } 
} 

这种类型的承诺似乎有必要,如果我们要确保没有消息(IDOC)丢失,即使子弹击中一些.hasNext()在通话过程中CPU。或者我错了?

回答

3

在这种情况下,SAP会假定您发送的IDOC类型为'ALEAUD'。在这种情况下,发件人系统可以将IDOC状态更改为“在接收系统中创建的文档”(41)。 欲了解更多详情,请参阅“实施SAP R/3的应用程序链接启用(ALE)”高级指南文档

0

从技术角度(而不是从具有IDoc状态记录的业务数据工作流的角度)并确认交易RFC(tRfc)的TID是RFC客户端的任务。在接收IDoc时,您的JCo程序就是这种情况下的RFC服务器,您应该对那些RFC客户端发送给您的提交,回滚和确认事件做出响应。这是通过实现接口JCoServerTIDHandler完成的。

你会得到一个提交后来也confirmTID情况下,如果你没有一个例外,从的handleRequest调用返回,否则你将得到一个回滚也是一个confirmTID事件反应因此。