打印出系统所有即未被assign到business transaction和IBASE component的product ID列表

73 阅读1分钟

Created by Jerry Wang on May 09, 2014

下面这个report可以打印出系统所有满足下列条件的product:

  1. product未被assign到任何的business transaction
  2. product未被assign到任何的IBASE component
    image
REPORT zprod_not_used_anymore.
PARAMETERS: num TYPE i OBLIGATORY DEFAULT 100.
DATA: lv_prod_guid TYPE comm_product-product_guid,
      lt_item_tab  TYPE STANDARD TABLE OF comm_product-product_guid,
      lt_ibase_tab LIKE lt_item_tab,
      lt_product   TYPE STANDARD TABLE OF comm_product.
START-OF-SELECTION.
  SELECT product_guid product_id object_family FROM comm_product INTO CORRESPONDING FIELDS OF TABLE lt_product.
  ASSERT lt_product IS NOT INITIAL.
  SELECT product INTO TABLE lt_item_tab FROM crmd_orderadm_i
     FOR ALL ENTRIES IN lt_product WHERE product = lt_product-product_guid.
  SELECT product_guid APPENDING TABLE lt_item_tab FROM crmd_srv_refobj
     FOR ALL ENTRIES IN lt_product WHERE product_guid = lt_product-product_guid.
  SELECT warranty APPENDING TABLE lt_item_tab FROM crmd_service_i
     FOR ALL ENTRIES IN lt_product WHERE warranty = lt_product-product_guid.
  SORT lt_item_tab.
  DELETE ADJACENT DUPLICATES FROM lt_item_tab.
  LOOP AT lt_product ASSIGNING FIELD-SYMBOL(<product>).
    READ TABLE lt_item_tab WITH KEY table_line = <product>-product_guid TRANSPORTING NO FIELDS.
    IF sy-subrc = 0.
      DELETE TABLE lt_product FROM <product>.
    ENDIF.
  ENDLOOP.
  DATA:
    lv_handle     TYPE ibxx_ref-handle,
    ls_sel        TYPE ibxx_sel_rec,
    lt_obj        TYPE ibco1_obj_tab,
    lo_product     TYPE REF TO CL_IBASE_CRM_PRODUCT,
    lo_object     TYPE REF TO CL_IBASE_CRM_object,
    lr_objnr      TYPE RANGE OF ibxx_ref-objnr, "Guid 22 of the object
    lr_objnr_line LIKE LINE OF lr_objnr,
    ls_product TYPE comm_product.
  lr_objnr_line-sign    = 'I'.
  lr_objnr_line-option  = 'EQ'.
  LOOP AT lt_product ASSIGNING FIELD-SYMBOL(<in_ibase>).
    lr_objnr_line-low = cl_ibase_service=>cl_convert_guid_16_22( <in_ibase>-product_guid ).
    INSERT lr_objnr_line INTO TABLE ls_sel-s_objnr.
  ENDLOOP.
  CALL FUNCTION 'IB_COM_NEW'
    IMPORTING
      e_ibco_handle = lv_handle.
  CALL FUNCTION 'IB_COM1_READ_INSTANCES_OBJ_TAB'
    EXPORTING
      i_ibco_handle          = lv_handle
      i_sel_rec              = ls_sel
    CHANGING
      e_obj_tab              = lt_obj
    EXCEPTIONS
      ib_handle_not_defined  = 1
      ib_not_successful      = 2
      ib_criteria_incomplete = 3
      OTHERS                 = 4.
  ASSERT sy-subrc = 0.
  LOOP AT lt_obj ASSIGNING FIELD-SYMBOL(<obj>).
    TRY.
      lo_object = CAST cl_ibase_crm_object( <obj>-object ).
      ls_product = lo_object->get_product( ).
    CATCH cx_root.
      lo_product = CAST cl_ibase_crm_product( <obj>-object ).
      ls_product = lo_product->get_product( ).
    ENDTRY.
    APPEND ls_product-product_guid TO lt_ibase_tab.
  ENDLOOP.
  LOOP AT lt_product ASSIGNING FIELD-SYMBOL(<ibase>).
    READ TABLE lt_ibase_tab WITH KEY table_line = <ibase>-product_guid TRANSPORTING NO FIELDS.
    IF sy-subrc = 0.
      DELETE TABLE lt_product FROM <ibase>.
    ENDIF.
  ENDLOOP.
  DO num TIMES.
    READ TABLE lt_product ASSIGNING FIELD-SYMBOL(<result>) INDEX sy-index.
    IF sy-subrc = 0.
      IF <result>-object_family IS INITIAL.
        WRITE: / 'Product ID: ' , <result>-product_id COLOR COL_NEGATIVE.
      ELSE.
        WRITE: / 'Object  ID: ' , <result>-product_id COLOR COL_NEGATIVE.
      ENDIF.
    ELSE.
      RETURN.
    ENDIF.
  ENDDO.