Created by Jerry Wang on Apr 05, 2014
执行report,report会自动找出系统里指定数量的状态处于open的service order,将其description设置成report指定的新的内容。
REPORT ZORDER_MODIFY_LAUNCHER.
PARAMETERS: num type i OBLIGATORY DEFAULT 1,
txt type char20 OBLIGATORY DEFAULT 'new text'.
DATA: lt_rspar TYPE TABLE OF rsparams,
ls_rspar LIKE LINE OF lt_rspar,
lt_order_index TYPE STANDARD TABLE OF crmd_order_index-header,
lt_order_tab TYPE STANDARD TABLE OF crmd_orderadm_h-object_id,
lv_order_id LIKE LINE OF lt_order_tab.
AT SELECTION-SCREEN.
CHECK num > 0.
PERFORM fill_order_tab.
START-OF-SELECTION.
LOOP AT lt_order_tab INTO lv_order_id.
ls_rspar = VALUE #( selname = 'ORDERID'
kind = 'S'
sign = 'I'
option = 'EQ'
low = lv_order_id ).
APPEND ls_rspar TO lt_rspar.
ls_rspar = VALUE #( selname = 'TXT'
kind = 'P'
low = txt ).
APPEND ls_rspar TO lt_rspar.
ENDLOOP.
submit zorder_modify WITH SELECTION-TABLE lt_rspar.
FORM fill_order_tab.
CLEAR: lt_order_index.
SELECT DISTINCT crmd_order_index~HEADER INTO TABLE @lt_order_index
up to @num rows FROM CRMD_ORDER_INDEX INNER JOIN CRM_JEST ON CRM_JEST~OBJNR = CRMD_ORDER_INDEX~HEADER
WHERE CRMD_ORDER_INDEX~PROCESS_TYPE_IX = 'SRVO' AND
CRMD_ORDER_INDEX~STAT_OPEN = 'X' AND
CRM_JEST~INACT = @abap_false AND CRM_JEST~STAT IN ('E0001', 'I1002') AND
CRMD_ORDER_INDEX~OBJECT_TYPE = 'BUS2000116'.
CHECK lt_order_index IS NOT INITIAL.
SELECT object_id INTO TABLE lt_order_tab FROM CRMD_ORDERADM_H FOR ALL ENTRIES IN lt_order_index
WHERE guid = lt_order_index-table_line.
ENDFORM.
REPORT zorder_modify.
DATA: lt_exception TYPE crmt_exception_t,
ls_exception LIKE LINE OF lt_exception,
lt_header TYPE crmt_orderadm_h_comt,
lt_saved_object TYPE crmt_return_objects,
lt_save_failed TYPE crmt_object_guid_tab,
lt_to_be_save TYPE crmt_object_guid_tab,
lt_changed_input TYPE crmt_input_field_tab,
ls_changed_input LIKE LINE OF lt_changed_input,
ls_header LIKE LINE OF lt_header,
lv_start TYPE i,
lv_end TYPE i,
lv_object_id TYPE crmd_orderadm_h-object_id.
SELECTION-SCREEN BEGIN OF BLOCK b1
WITH FRAME TITLE txt1.
SELECT-OPTIONS: orderid FOR lv_object_id OBLIGATORY. "DEFAULT '8000000110' OBLIGATORY.
PARAMETERS: txt TYPE char20 OBLIGATORY."DEFAULT 'new description'.
SELECTION-SCREEN END OF BLOCK b1.
INITIALIZATION.
txt1 = 'Specify Service order ID and new description to be changed.'.
START-OF-SELECTION.
PERFORM get_guid_by_id.
PERFORM fill_header_tab.
GET RUN TIME FIELD lv_start.
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
IMPORTING
et_exception = lt_exception
CHANGING
ct_orderadm_h = lt_header
ct_input_fields = lt_changed_input
EXCEPTIONS
error_occurred = 1
document_locked = 2
no_change_allowed = 3
no_authority = 4
OTHERS = 5.
IF sy-subrc <> 0 OR lt_exception IS NOT INITIAL.
WRITE: / 'Modify API call failed.' COLOR COL_NEGATIVE.
LOOP AT lt_exception INTO ls_exception.
WRITE: / ls_exception-code COLOR COL_GROUP.
ENDLOOP.
RETURN.
ENDIF.
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = lt_to_be_save
IMPORTING
et_saved_objects = lt_saved_object
et_exception = lt_exception
et_objects_not_saved = lt_save_failed
EXCEPTIONS
document_not_saved = 1.
IF sy-subrc <> 0 OR lt_exception IS NOT INITIAL OR lt_save_failed IS NOT INITIAL.
WRITE: / 'Save API call failed.' COLOR COL_NEGATIVE.
RETURN.
ENDIF.
COMMIT WORK AND WAIT.
GET RUN TIME FIELD lv_end.
lv_end = lv_end - lv_start.
FIELD-SYMBOLS: <line> LIKE LINE OF orderid.
LOOP AT orderid ASSIGNING <line>.
WRITE: / 'Order saved successfully: ' , <line>-low COLOR COL_TOTAL.
ENDLOOP.
WRITE:/ 'Time spent(microsecond): ', lv_end COLOR COL_POSITIVE.
FORM get_guid_by_id.
DATA: lt_temp TYPE STANDARD TABLE OF crmd_orderadm_h.
FIELD-SYMBOLS:<line> TYPE crmd_orderadm_h.
SELECT guid INTO CORRESPONDING FIELDS OF TABLE lt_temp FROM crmd_orderadm_h WHERE object_id IN orderid AND
process_type = 'SRVO'.
LOOP AT lt_temp ASSIGNING <line>.
INSERT <line>-guid INTO TABLE lt_to_be_save.
ENDLOOP.
ENDFORM.
FORM fill_header_tab.
FIELD-SYMBOLS: <guid_line> LIKE LINE OF lt_to_be_save.
LOOP AT lt_to_be_save ASSIGNING <guid_line>.
ls_header-guid = <guid_line>.
ls_header-description = txt.
APPEND ls_header TO lt_header.
clear: ls_changed_input.
ls_changed_input-ref_guid = <guid_line>.
ls_changed_input-objectname = 'ORDERADM_H'.
APPEND 'DESCRIPTION' TO ls_changed_input-field_names.
APPEND ls_changed_input TO lt_changed_input.
ENDLOOP.
ENDFORM.