如何从RfcServerFunction方法报告失败?

时间:2016-11-04 14:34:48

标签: sap sap-connector

我正在使用SAP .NET Connector 3.0来接收入站idoc。我可以在大多数情况下将它们弄好,但有时收到时会出现问题(磁盘已满/数据库连接断开等),并且似乎没有办法向收件人报告收据失败。< / p>

抛出异常仍会导致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");
}

1 个答案:

答案 0 :(得分:1)

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

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

然而,这不会影响ALE状态...... ALE基本上是异步的,并且不会等待传输IDoc的tRFC完成。因此,ALE状态“03”仅表示“IDoc成功转移到通信层”。通信层(在这种情况下是tRFC层)是否实际上已成功交付IDoc或仍在尝试,不会报告回IDoc监视器......

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

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