这篇文章介绍IDOC Status的概念和它们的用途,明确IDOC status的类别,看一下完整的状态列表,包括INBOUND和OUTBOUND,还有入站和出站iDoc处理时iDoc状态的顺序。
另外还有监控SAP IDOC status的工具,比如AIF,BD87, WE02,还有如何手工修改IDOC status,最后再深入研究几个最常用的的状态,比如51, 53, 64,1,30等等
https://wiki.scn.sap.com/wiki/display/ABAP/IDoc+Statuses
Note 817939 IDoc: IDocs remain in status 75
IDoc Status的概念
IDoc的整个处理过程会经历一系列的事件Event和步骤,每个处理步骤的结果都用两位数字表示,也就是我们的说IDoc Status。例如,成功创建入站iDoc用状态50表示,即“Doc added”。如果传入的iDoc成功创建了应用程序凭证,iDoc进入状态53,“Application document posted”。这些状态就是IDOC处理的一个个的里程碑,它以IDoc Status Record的形式被记录下来,这样的话IDoc的处理过程就可以被监控,在问题处理时,我们可以根据状态快速定位哪些步骤被成功处理了,哪里出现的Error。
最后一个状态码被认为是Final Status。
入站IDOC状态码示例:
出站IDOC状态码示例
请注意这些idoc的状态。在本例中,Inbound iDoc成功地完成了4个处理步骤。开始时,创建了iDoc(状态50),最后iDoc成功地发布了应用程序文档(状态53)。
样例出站iDoc的记录中有5个状态:从iDoc创建(状态01)到iDoc被传递到应用程序接口框架(状态03)。
IDoc status 类别
根据iDoc状态消息的类型或严重程度,iDoc状态代码可以大致分为以下几类:
- Success成功
- Error错误
- Ready to process待处理
- Warning警告
类别可以表示IDOC处理步骤的总体状态,用红黄绿灯来表示,Success 绿灯,Error 红灯,Ready to process 和Warning黄灯。红绿灯很好理解,黄灯一般表示中间状态或是存在警告,比如入站的64,表示ready to be processed by 应用层和post documents。出站的03表示IDOC ready to be transfer到外部系统。
出站状态
出站IDOC Outbound iDoc就是要发出的IDOC,状态码从01到49。下面是完整列表:
入站状态
入站就是进入到系统的IDOC,入站的状态码从50开始
入站iDoc状态顺序
在系统中创建入站iDoc时,其状态为50。然后,根据合作伙伴概要文件的设置,它将立即被处理或被收集。如果idoc被收集,它们将保持状态64(“准备处理”),直到它们被处理。
接下来,iDoc传递到应用层进行处理。IDoc的应用程序处理通过process code进程代码进行,这是一个专门用于IDoc处理的函数,具体取决于IDoc类型。
无错误处理的入站iDoc的最后一个阶段是状态53。但是,如果出现错误,iDoc将进入状态51。
出站iDoc状态顺序
在系统中创建Outbound iDocs成功,进入状态01。如果没有语法错误,则iDoc进入状态30(“iDoc准备分派”)。但是,如果有语法错误,iDoc将以状态26结束。
如何监控iDoc状态?
在SAP S4 HANA中,有几种方法可以监视iDoc的状态。但是,监视方法取决于SAP系统的配置和实现的iDoc监视功能。
对于S4 HANA,建议使用SAP Application Integration Framework (AIF)进行iDoc监控。但您也可以使用其他标准工具,如bd87、we02等来查看iDoc状态。
AIF,可以参考我之前整理的另一个笔记,简单说一句,这个组件不是免费的。
以下是可以用于监视SAP S4 HANA中的idoc的事务:
- 标准iDoc监视工具:事务
bd87
、we02
、we05
等。 - AIF 应用集成框架:
/n/aif/err
,/n/aif/ifmon
标准iDoc监控工具
WE02/WE05(这俩没有区别,都是程序RSEIDOC2)查看IDOC清单 。
BD87通过状态统计查询IDOC。
如何手工修改IDOC状态?
为了纠正错误的数据,iDoc可以进入编辑状态,当编辑入站iDoc的内容时,它进入状态69(“iDoc已编辑”)。类似地,当编辑出站iDoc时,它会进入状态32或33。注意,系统无法在“iDoc was edited”状态下进一步处理iDoc。因此,需要先将iDoc设置为“ready to process准备处理”状态。也就是说,入站idoc的状态为64,出站idoc的状态为30。
可以使用 SE38执行程序 RC1_IDOC_SET_STATUS 来修改IDOC的状态。
怎么处理有错误状态的IDOC?
- BD87
- /AIF/ERR
- 使用标准程序修改,见下面列表:
program | 功能 |
---|---|
RBDAPP01 | Inbound Processing of IDocs Ready for Passing (处理Inbound 黄灯数据) |
RSEOUT00 | Process All Selected IDocs (EDI) (处理Outbound 黄灯数据) |
RBDMANI2 | Manual Processing of IDocs: Post IDocs Not Yet Posted (重处理那些红灯Inbound) |
RBDAGAIN | Reprocess Outbound iDocs in Error(重处理那些红灯Outbound) |
RSETESTD | Delete IDocs删除IDOC(TCODE :WE11) |
RC1_IDOC_SET_STATUS | 手工修改IDOC状态(通常用于修改状态为 68 no further processing) |
RBDMIDOC | Create iDocs from Change Pointers |
RBDSYNER | Process IDoc Despite Syntax Errors |
RBDAGAIE | Reprocessing of Edited IDocs |
可以参考:https://wiki.scn.sap.com/wiki/display/ABAP/IDoc+Statuses
其中有详细的status和后续处理方式
重新触发队列:RSEINBQUEUE
删除队列:RBDQUEUEDELETE
第一屏幕选择入站还是出站,第二屏幕输入队列号和发送方,此时可以选择删除后IDOC的状态,可以是64或是68。
IDOC状态存在哪张表?
EDIDC 和 EDIDS,前者存的是当前状态,后者是历史状态。