当使用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也是如此。或者我错了吗?
答案 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 事件,以便做出相应的反应。