如何在读取IDOC时控制事务(提交/回滚)

时间:2010-12-06 14:27:43

标签: java sap bapi jco idoc

当使用JCo(3.x)读取从SAP服务器发送的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也是如此。或者我错了吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

从技术角度(而不是从具有IDoc状态记录的业务数据工作流的角度来看)提交和确认事务性RFC(tRfc)的TID是RFC客户端的任务。通过接收IDoc,您的JCo程序是此方案中的RFC服务器,您应该对RFC客户端发送给您的那些提交,回滚和确认事件做出反应。这是通过实现接口JCoServerTIDHandler完成的。

如果您从 handleRequest 调用返回而没有例外,您将获得提交以及稍后的 confirmTID 事件,否则您将获取回滚以及 confirmTID 事件,以便做出相应的反应。

相关问题