1.全局变量
CONSTANTS: const_callback_form TYPE baluet VALUE ' ', bal_param_lognumber TYPE spar-param VALUE '%LOGNUMBER'. DATA gv_lognumber TYPE balhdr-lognumber.2.函数代码
FUNCTION zfm_create_log. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(IS_LOG) TYPE BAL_S_LOG *" VALUE(IS_MSG) TYPE BAL_S_MSG *" VALUE(I_STRUCTURE_NAME) TYPE DD02L-TABNAME *" TABLES *" ET_RETURN STRUCTURE BAPIRET2 OPTIONAL *" IT_DATA OPTIONAL *"---------------------------------------------------------------------- DATA lv_log_handle TYPE balloghndl. PERFORM log_header_create TABLES et_return USING is_log CHANGING lv_log_handle. IF line_exists( et_return[ type = 'E' ] ) OR line_exists( et_return[ type = 'A' ] ). ELSE. PERFORM log_message_create TABLES et_return USING is_msg lv_log_handle. ENDIF. IF line_exists( et_return[ type = 'E' ] ) OR line_exists( et_return[ type = 'A' ] ). ELSE. PERFORM log_save TABLES et_return it_data USING lv_log_handle i_structure_name. ENDIF. ENDFUNCTION.*&---------------------------------------------------------------------* *& Form log_header_create *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> ET_RETURN *& --> IS_LOG *& <-- LV_LOG_HANDLE *&---------------------------------------------------------------------* FORM log_header_create TABLES et_return STRUCTURE bapiret2 USING is_log TYPE bal_s_log CHANGING lv_log_handle. * define callback routine is_log-params-callback-userexitp = sy-repid. is_log-params-callback-userexitf = 'CALLBACK_LOG_DETAIL'. is_log-params-callback-userexitt = const_callback_form. * create the log header CALL FUNCTION 'BAL_LOG_CREATE' EXPORTING i_s_log = is_log IMPORTING e_log_handle = lv_log_handle EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO et_return-message. et_return-type = sy-msgty. et_return-id = sy-msgid. et_return-number = sy-msgno. APPEND et_return. ENDIF. ENDFORM. FORM callback_log_detail "#EC CALLED TABLES i_params STRUCTURE spar. DATA lv_lognumber TYPE balhdr-lognumber. DATA lv_tabname TYPE tabname. DATA lr_data TYPE REF TO data. FIELD-SYMBOLS <lt_data> TYPE STANDARD TABLE. READ TABLE i_params WITH KEY param = bal_param_lognumber. IF sy-subrc <> 0. RETURN. ENDIF. lv_lognumber = i_params-value. IMPORT tabname = lv_tabname FROM DATABASE bal_indx(al) ID lv_lognumber. IF sy-subrc <> 0 OR lv_tabname IS INITIAL. MESSAGE '该日志没有保存明细数据' TYPE 'S' DISPLAY LIKE 'W'. RETURN. ENDIF. TRY. CREATE DATA lr_data TYPE STANDARD TABLE OF (lv_tabname). CATCH cx_sy_create_data_error. MESSAGE |结构 { lv_tabname } 无法用于显示| TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDTRY. ASSIGN lr_data->* TO <lt_data>. IMPORT it_data = <lt_data> FROM DATABASE bal_indx(al) ID lv_lognumber. IF sy-subrc <> 0. RETURN. ENDIF. * display header data CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_structure_name = lv_tabname i_screen_start_column = 1 i_screen_start_line = 1 i_screen_end_column = 80 i_screen_end_line = 10 TABLES t_outtab = <lt_data>[] EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form log_message_create *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> ET_RETURN *& --> IS_MSG *& --> LV_LOG_HANDLE *&---------------------------------------------------------------------* FORM log_message_create TABLES et_return STRUCTURE bapiret2 USING is_msg TYPE bal_s_msg lv_log_handle TYPE balloghndl. * create the message CALL FUNCTION 'BAL_LOG_MSG_ADD' EXPORTING i_log_handle = lv_log_handle i_s_msg = is_msg EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO et_return-message. et_return-type = sy-msgty. et_return-id = sy-msgid. et_return-number = sy-msgno. APPEND et_return. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form log_save *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> ET_RETURN *& --> LV_LOG_HANDLE *&---------------------------------------------------------------------* FORM log_save TABLES et_return STRUCTURE bapiret2 it_data USING lv_log_handle TYPE balloghndl i_structure_name TYPE dd02l-tabname. DATA lt_log_handle TYPE bal_t_logh. DATA ls_new_lognumber TYPE bal_s_lgnm. DATA lt_new_lognumbers TYPE bal_t_lgnm. INSERT lv_log_handle INTO TABLE lt_log_handle. CALL FUNCTION 'BAL_DB_SAVE' EXPORTING i_t_log_handle = lt_log_handle IMPORTING e_new_lognumbers = lt_new_lognumbers EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO et_return-message. et_return-type = sy-msgty. et_return-id = sy-msgid. et_return-number = sy-msgno. APPEND et_return. ENDIF. * find out the lognumber of this saved log READ TABLE lt_new_lognumbers INTO ls_new_lognumber WITH KEY log_handle = lv_log_handle. CHECK sy-subrc = 0. gv_lognumber = ls_new_lognumber-lognumber. CHECK it_data[] IS NOT INITIAL. * also save our own, complex data: EXPORT tabname = i_structure_name it_data[] TO DATABASE bal_indx(al) ID gv_lognumber. ENDFORM.3.消费例子(调用例子)
DATA is_log TYPE bal_s_log. DATA is_msg TYPE bal_s_msg. DATA lv1 TYPE i. DATA it_log TYPE TABLE OF zss_ewmd004_log. DATA ls_log TYPE zss_ewmd004_log. is_log-object = 'ZBAK'. is_log-subobject = 'ZEWMD004'. is_log-extnumber = ls_header-lgnum && sy-datum && sy-uzeit. is_msg-msgid = 'ZQM001'. is_msg-msgno = '001'. is_msg-msgv1 = |库存类型更改成功|. CLEAR: ls_data. LOOP AT gt_data INTO ls_data WHERE ckbox EQ abap_true AND message IS NOT INITIAL. MOVE-CORRESPONDING ls_data TO ls_log. APPEND ls_log TO it_log. CLEAR:ls_data,ls_log. ENDLOOP. is_msg-msgv2 = lv1. CHECK it_log IS NOT INITIAL. CALL FUNCTION 'ZFM_CREATE_LOG' EXPORTING is_log = is_log is_msg = is_msg i_structure_name = 'ZSS_EWMD004_LOG' TABLES it_data = it_log. COMMIT WORK.