检测Product 被其他business transaction 引用的小程序

82 阅读1分钟

Created by Jerry Wang, last modified on May 08, 2014

如果想知道一个product 被其他business transaction 引用的详细情况,可以执行下面的report:
clipboard1
输出所有使用该product的Order ID和order type:
clipboard2
可以到UI上验证引用情况:
clipboard3
clipboard4

REPORT ZPROD_REFERENCE_CHECK.
 
PARAMETERS: id type comm_product-product_id OBLIGATORY DEFAULT 'AS-PROD-ID-002'.
 
DATA: lv_prod_guid TYPE comm_product-product_guid,
 
      lt_item_guid TYPE STANDARD TABLE OF crmd_orderadm_i-guid,
 
      lt_header TYPE STANDARD TABLE OF crmd_orderadm_h,
 
      lt_header_guid LIKE lt_item_guid.
 
 
 
START-OF-SELECTION.
 
 
   SELECT SINGLE product_guid INTO lv_prod_guid FROM comm_product WHERE product_id = id.
 
   IF sy-subrc <> 0.
 
      WRITE: / 'Product: ', id, ' does not exist!' COLOR COL_NEGATIVE.
 
      RETURN.
 
   ENDIF.
 
 
   SELECT guid INTO TABLE lt_item_guid FROM crmd_orderadm_i WHERE product = lv_prod_guid.
 
 
   SELECT guid APPENDING TABLE lt_item_guid FROM CRMD_SRV_REFOBJ WHERE product_guid = lv_prod_guid.
 
 
   SELECT guid APPENDING TABLE lt_item_guid FROM crmd_service_i WHERE warranty = lv_prod_guid.
 
 
   IF lt_item_guid IS INITIAL.
 
      WRITE: / 'Product is not included in any business transaction' COLOR COL_NEGATIVE.
 
      RETURN.
 
   ENDIF.
 
 
   SORT lt_item_guid.
 
   DELETE ADJACENT DUPLICATES FROM lt_item_guid.
 
 
   SELECT header FROM crmd_orderadm_i INTO TABLE lt_header_guid FOR ALL ENTRIES IN lt_item_guid
 
      WHERE guid = lt_item_guid-table_line.
 
 
   ASSERT lt_header_guid IS NOT INITIAL.
 
 
   SELECT object_id process_type FROM crmd_orderadm_h INTO CORRESPONDING FIELDS OF TABLE lt_header
      FOR ALL ENTRIES IN lt_header_guid WHERE guid = lt_header_guid-table_line.
   LOOP AT lt_header ASSIGNING FIELD-SYMBOL(<header>).
 
      WRITE: / 'Object ID: ' , <header>-object_id, ' Type: ', <header>-process_type COLOR COL_TOTAL.
 
   ENDLOOP.