
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.