繁体   English   中英

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

[英]How to control transaction (commit/rollback) when reading an 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。 还是我错了?

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

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

如果您从handleRequest调用中无异常返回,您将收到一个提交,稍后还会收到一个confirmTID事件,否则您将收到一个回滚以及一个用于相应反应的confirmTID事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM