CM: 如何通过attachment的physical instance id反查到所属的business object ID

97 阅读1分钟

Created by Jerry Wang, last modified on Mar 21, 2014

通过这个wiki,我们很容易能得到一个business object instance,例如product,下面包含的attachment 信息。
那么反过来, 已知一个attachment的physical instance guid,也能找到这个attachment是属于哪个product instance的。
例如我们已知一个physical instance的guid 为FA163E5CA86F1ED3A888F18542E37D7B, 可以通过下面的代码找到是哪一个product 包含了该attachment:

  DATA: ls_ph      TYPE bdsphio22,
           ls_product TYPE comm_product,
           lv_instance_b TYPE skwg_brel-instid_b,
           ls_relation TYPE skwg_brel.

“因为任何一个physical instance一定对应一个logical instance(多对一的关系),所以可以用select single的方式找到对应的logical instance guid:

SELECT SINGLE * INTO ls_ph FROM bdsphio22 WHERE phio_id = 'FA163E5CA86F1ED3A888F18542E37D7B'.
CHECK sy-subrc = 0.

" relationship表里的naming convention:</>
lv_instance_b = 'L/' && ls_ph-lo_class && '/' && ls_ph-loio_id.

" business object和其attachment 的对应关系统一维护在SKWG_BREL这张表里
SELECT SINGLE * INTO ls_relation FROM skwg_brel WHERE instid_b = lv_instance_b AND typeid_a = 'BUS1178'.
CHECK sy-subrc = 0.

" product的guid就包含在ls_relation-instid_a里
SELECT SINGLE * INTO ls_product FROM comm_product WHERE product_guid = ls_relation-instid_a.
CHECK sy-subrc = 0.

"最终输出product ID
WRITE: / ls_product-product_id.
clipboard1
clipboard2

测试结果和UI上观察到的attachment一致:
clipboard3
也可以直接使用function module CRM_KW_DOCUMENT_ROOTS_GET