1

我正在使用 SAP .NET 连接器 3.0 接收入站 idocs。大多数时候我可以让它们正常工作,但有时收据会出现问题(磁盘已满/数据库连接断开等),并且似乎没有办法向发件人报告收据失败。

引发异常仍会导致 SAP 中的 idoc 状态为“3”(良好)。

有谁知道如何向呼叫者报告收据不成功?

例子...

[RfcServerFunction(Name = "IDOC_INBOUND_ASYNCHRONOUS")]
public void ReceiveInboundIdocAsync(RfcServerContext context, IRfcFunction function)
{      
     throw new Exception("SM59 still reports status 3 for this idoc");
}
4

1 回答 1

1

您需要区分“tRFC 状态”和“ALE 状态”。

如果您从服务器函数中抛出异常,则 tRFC 状态应设置为“回滚”,您应该能够在事务 SM58 中验证这一点。你能检查一下吗?

但是,这不会影响 ALE 状态... ALE 基本上是异步的,并且不会等待传输 IDoc 的 tRFC 完成。所以ALE状态“03”只表示“IDoc传输到通信层成功”。通信层(在本例中为 tRFC 层)实际上是否已成功交付 IDoc 或仍在尝试,不会报告回 IDoc 监视器...

如果你想这样做,你有两个选择:

  1. SAP 系统中有一个可以定期调度的 ALE 报告:RBDMOIND。此报告扫描 tRFC 监视器并将所有 IDoc(其相应 TID 已成功完成)设置为状态“12”。(tRFC 仍在执行或当前处于“回滚”状态的 IDoc 仍处于“03”状态。)
  2. 您的程序可以定期将 SYSTAT01 IDoc 发送回 SAP 系统。此 IDoc 可用于更新 IDoc 状态监视器。只需用一组 IDoc DOCNUM、“EDI 子系统”的一些信息以及每个 DOCNUM 的所需状态填充它。应使用以下四种状态:“11”(派送时出错)、“12”(派送正常)、“13”(重传成功)、“23”(重传时出错) 为了处理这些 SYSTAT01 IDoc,需要相应地设置 SAP 系统:需要为您的“EDI 子系统”创建逻辑系统和合作伙伴配置文件。该合作伙伴配置文件中的“消息类型”需要为“STATUS”,“流程代码”需要为“STA1”。然后,管理员可以过滤最终状态为 11/23 的 IDoc 的 ALE 监视器 (WE05) 并手动查看它们。(并根据需要重新传输。)
于 2018-03-14T16:47:03.950 回答