前言
上一篇进行了unmanaged场景下基本的数据更新,但只有单层级的,本篇继续完善剩下的数据更新部分:
rba_:read by association
cba_:create by association
lock:编辑锁的实现
check:创建更新删除的check,以及check_before_save
exception class:创建消息包装类以统一的结构传输异常消息
正文
截止目前为止仍然需要实现以下方法才能完整的进行抬头和明细行的创建、更新和删除,所以按照一般操作需求的顺序来依次实现,完整源码在文末提供。
实现抬头层级的cba_item方法
和上一篇方式一样,创建对应的参数类型和方法:
实现cba_head_item的具体逻辑:
逻辑说明:
-
• 首先仍然是先预加载抬头和明细数据至缓冲区,并判断抬头数据是否存在 -
• 如果存在则继续判断抬头数据是否有更新标识,如果没有任何标记,则说明订单已经有了,本次仅仅是新增明细,打上更新标记整体视为更新,这是为了后续调用BAPI_PO_CHANGE修改采购订单做准备,这一步可以不用完全按照这个方式,跳过或者后续采用其他方式都可以。 -
• 然后继续判断明细行的主键是否存在,且没有打删除标记(新增后又删除又再次新增的场景)。 -
• 如果满足条件则将数据插入到缓冲区。
实现明细层级的update方法
创建对应的结构和实现方法:
实现update_item方法的具体逻辑:
逻辑说明:和update_head方法同理,更新缓冲区时按照merge的方式合并更新,同样给抬头数据打上更新标记这个动作是为了后续调用BAPI准备,这一点不用完全一样。
实现明细层级的delete方法
创建对应结构和方法:
实现delete_item方法的具体逻辑:
逻辑说明:删除逻辑比较简单,只是判断数据如果存在时,打上删除标记即可。

