news 2026/11/5 6:51:32

封装的比较通用的写入SLG1日志的函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
封装的比较通用的写入SLG1日志的函数

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.
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 6:45:56

监理基础知识

监理内容&#xff1a;规划阶段&#xff0c;招标阶段&#xff0c;设计阶段&#xff0c;实施阶段&#xff0c;验收阶段 监理服务能力&#xff1a;在人员、技术、资源、流程知识转移是由知识传输和知识吸收两个过程所共同组成的统一过程&#xff0c;只有当转移的知识保留下来&…

作者头像 李华
网站建设 2026/11/5 6:42:54

为什么一份破甲提示词能把 Codex 的通过率从 55% 顶到 100%?

为什么一份破甲提示词能把 Codex 的通过率从 55% 顶到 100%&#xff1f; 【免费下载链接】gpt-instruct A Codex jailbreak prompt and test pack for gpt. 针对 gpt 系列的 Codex 破甲提示词与测试包。 项目地址: https://gitcode.com/gh_mirrors/gp/gpt-instruct 同一…

作者头像 李华
网站建设 2026/11/5 6:38:20

私有部署 Geo 优化源码:从编译到上线完整技术流程分享

1. 引言在私有化部署场景中&#xff0c;Geo 服务的性能与稳定性往往直接决定业务可用性。很多团队拿到源码后&#xff0c;习惯直接使用官方预编译包&#xff0c;但遇到定制需求、安全加固或性能调优时&#xff0c;就必须走「源码编译 → 优化 → 上线」这条完整链路。本文基于实…

作者头像 李华
网站建设 2026/11/5 6:29:06

【VS2022引用其他项目的.cs文件】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华