批量删除指定user和transaction type对应order的report

142 阅读1分钟

Created by Jerry Wang, last modified on Aug 27, 2015 Go to start of metadata

该report可以批量删除由指定user创建的基于指定process type的business document:
执行report:
image

会打印成功删除和失败删除的order id及其description:
image

source code:

REPORT zorder_delete.
  
PARAMETERS: user TYPE sy-uname OBLIGATORY DEFAULT 'WANGJER',
 
            type TYPE crmd_orderadm_h-process_type OBLIGATORY DEFAULT 'OPPT'.
  
DATA: lt_order TYPE STANDARD TABLE OF crmd_orderadm_h,
 
      lt_guid  TYPE crmt_object_guid_tab.
  
START-OF-SELECTION.
 
  SELECT guid object_id description INTO CORRESPONDING FIELDS OF TABLE lt_order FROM crmd_orderadm_h WHERE process_type = type AND created_by = user.
  
  WRITE: 'the following order will be deleted'.
  
  LOOP AT lt_order ASSIGNING FIELD-SYMBOL(<order>).
 
    WRITE: / 'id: ' , <order>-object_id COLOR COL_GROUP, ' description: ' , <order>-description COLOR COL_TOTAL.
 
    CLEAR: lt_guid.
 
    INSERT <order>-guid INTO TABLE lt_guid.
 
    CALL FUNCTION 'CRM_ORDER_DELETE'
 
     EXPORTING
 
       it_objects_to_delete  = lt_guid
 
       iv_update_task_local  = abap_true
 
*     IV_NO_CHECK           = FALSE
 
*     IV_NO_BDOC_SEND       = FALSE
 
*     IV_CHECK_ONLY         = FALSE
 
    EXCEPTIONS
 
       single_deletion_error = 1
 
       deletion_error        = 2
 
       no_authority          = 3
 
       document_not_found    = 4
 
       OTHERS                = 5.
  
    IF sy-subrc <> 0.
 
       WRITE: / 'order: ' , <order>-object_id,  ' deletion failed: ', sy-subrc.
 
    ENDIF.
 
  ENDLOOP.
  
  COMMIT WORK AND WAIT.