IDOC 基础篇 ( 一 )

一、前言

江正军的博客对idoc就详细的说明介绍,有兴趣的可以看一下。

https://www.cnblogs.com/jiangzhengjun/p/4292135.html#_Toc411677436

二、idoc的集中数据存储:(表)

EDIDC   : 控制记录,记录IDOC的一些控制字段:(消息类型,idoc类型,入站,出站伙伴,最终状态等)

EDID4   :    idoc的数据记录,记录IDOC的数据内容,具体记录在EDID4-SDATA,通过 EDID4-SEGNAM段名查找对应的段结构,通过EDID4-SDATA内容整体赋值到段的结构,可以解析具体的业务数据。

EDIDS  :  状态记录,每次IDOC的处理都会把内部调用的BAPI或者BDC的返回信息写入EDIDS表中,确保每次IDOC的处理结果都被详细记录下来,但也造成无用信息太多,标准功能不太方便快速定位关键错误信息。

三、IDOC和单据的关系

IDOC最终生成的单据和IDOC的关系最后也会被系统记录下来,存储在两个表 idocrel , srrelroles中,

可以通过显示链接,查看并跳转到最终生成的单据,显示IDOC内容的 Tcode:  WE02,

也可以在单据中通过附件中关系找到对应的IDOC

 这个前端通过的 Relationships可以找到对应的关系凭证。 

 后台逻辑如下图:

edidc~docnum INNER JOIN srrelroles~ebjkey

 => srrelroles~roleid INNER JOIN idocrel~role_a

=> idocrel~role_b INNER JOIN srrelroles~relationid

 

 

 注:这个结果和前台显示的Relationships有差异,但是应该还是可以满足需求的。

下面是零售业 CAR 到 Retail生成的Billing , 清账凭证,物料凭证的一个CDS view。

@AbapCatalog.sqlViewName: 'ZSDVDIDOC'
@EndUserText.label: '销售小票IDOC视图'
@AccessControl.authorizationCheck: #CHECK
define view ZSD_POS_IDOC
  as select distinct from edidc       as A
    inner join            srrelroles  as b  on  b.objkey  = A.docnum
                                            and b.objtype = 'IDOC'
    inner join            idocrel     as c  on c.role_a = b.roleid
    inner join            srrelroles  as b2 on b2.roleid = c.role_b
    left outer join       cepct       as d  on  d.prctr = A.sndprn
                                            and d.kokrs = 'TQ00'
                                            and d.spras = $session.system_language
    left outer join       vbrk        as e  on e.sfakn = left(
      b2.objkey, 10
    )
    left outer join       nsdm_e_mseg as f  on  f.smbln = left(
      b2.objkey, 10
    )
                                            and f.sjahr = substring(
      b2.objkey, 11, 4
    )

{
  ''                             as Light,
  A.docnum                       as IDocNumber,
  A.sndprn                       as StoreId,
  d.ktext                        as StoreName,
  A.idoctp                       as IDocType,
  A.mestyp                       as MessageType,
  A.credat                       as CreateAt,
  A.cretim                       as CreateOn,
  //    b2.objkey                      as ObjectKey,
  b2.objtype                     as ObjectType,
  case when b2.objtype = 'VBRK'
  then
  left (b2.objkey, 10)
  else '' end                    as BillNumber,
  case when b2.objtype = 'BUS2017'
  then
  left (b2.objkey, 10)
  else '' end                    as MatMovNumber,
  case when b2.objtype = 'BUS2017'
  then
  substring (b2.objkey, 11,4)
  else '' end                    as MatDocYear,
  case when b2.objtype = 'VBRK' then e.vbeln
  when b2.objtype = 'BUS2017' then f.mblnr
  else '' end                    as ReversalDoc,
  cast( '' as abap.char( 100 ) ) as Meg
}
where
     b2.objtype = 'VBRK'
  or b2.objtype = 'BUS2017'

 四、集中监控

1、WE02 显示Idoc

可以按照树状结构及清单结构显示特定信息,特定状态的统计及明细内容

2、BD87  ALE消息状态监视器

按树状结构显示特定状态/消息的IDOC数量, 并针对节点发起重处理

 

五、集中处理

1、BD20发送到应用程序 的 IDOC

可以并发处理64的IDOC

2、BD87                 ALE 消息的状态监视器

    监控器也可以处理IDOC

六、常用事务代码

 区域菜单 WEDI 整合了所有IDOC相关事务代码,下面列举一些常用的事务代码或程序:

BD19 对失败的IDOC进行测试

BD20 对状态64的IDOC的后续处理

BD87 部分单据错误的IDOC的后续处理

BD73 IDOC ( ALE ) 的重过账

BD83 ALE出现错误后发送 idocs,

如果外向IDOC报错( 如合作伙伴没有维护 ),解决问题后不能用BD87处理,如果直接用BD87处理,状态会变成01,无法再处理,

需要用BD83处理,此时状态是30,然后再用BD87处理,成功后状态时03.

WPER 零售相关的IDOC的监控及重处理

程序:RC1_IDOC_SET_STATUS 修改IDOC状态

WLF_IDOC 新的标准IDOC监控程序. 有些版本执行会报错 取代 WE02

BD52配置自定义的字段的变化指针

BD73    IDocs (ALE) 的重过帐

程序: RBDMANI2  并发处理失败51状态的IDOC

程序: RWPOS_PARA_ENQUEUE 并发按地点队列处理64或51状态的IDOC

七、总结

   IDOC整合了几乎所有的主数据,单据的处理到一个统一的逻辑中. 集成了异步接口的重要功能: 

  • 数据存储

  • 数据集中处理

  • 报错数据的重处理

在接口开发中,尤其是ECC入站异步接口, 使用IDOC会给接口的开发及管理带来大量的便利.

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值