且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用CRM_ORDER_MAINTAIN修改SAP CRM订单抬头的描述信息

更新时间:2022-08-22 13:24:08

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_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 DEFAULT '8000000110' OBLIGATORY.

PARAMETERS: txt    TYPE char20 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.

 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.

 WRITE: / 'order saved'.

FORM get_guid_by_id.

 DATA: lt_temp TYPE STANDARD TABLE OF crmd_orderadm_h.

 FIELD-SYMBOLS: TYPE crmd_orderadm_h.

 SELECT guid INTO CORRESPONDING FIELDS OF TABLE lt_temp FROM crmd_orderadm_h WHERE object_id IN orderid.

 LOOP AT lt_temp ASSIGNING .

   APPEND -guid TO lt_to_be_save.

 ENDLOOP.

ENDFORM.

FORM fill_header_tab.

 FIELD-SYMBOLS: LIKE LINE OF lt_to_be_save.

 LOOP AT lt_to_be_save ASSIGNING .

   ls_header-guid = .

   ls_header-description = txt.

   APPEND ls_header TO lt_header.

   ls_changed_input-ref_guid = .

   ls_changed_input-objectname = 'ORDERADM_H'.

   APPEND 'DESCRIPTION' TO ls_changed_input-field_names.

   APPEND ls_changed_input TO lt_changed_input.

 ENDLOOP.

ENDFORM.