http://scnblogs.techweb.com.cn/hellohainiao/archives/33.html
现在项目上自开发的dialog程序越来越多,有很多敏感数据需要像SAP标准的业务一样,能看到所有的修改日志,要想实现日志的功能,方法很多。在此介绍一下,添加系统日志的方法。为了让其可以共用,在此建立一个FM: ZBAPI_CREATE_SYSLOG
将要显示的内容,以此表传过来
********************************变量定义区******************************
DATA: l_extnum TYPE bal_s_log-extnumber, “应用程日志:外部标示符
l_log_handle TYPE balloghndl. “应用日志:日志处理句柄
DATA: l_s_log TYPE bal_s_log, “定义日志所用结构,变量
l_s_mdef TYPE bal_s_mdef, “系统消息
l_s_msg TYPE bal_s_msg, “message变量
f(200).
****定义内容结构
DATA:l_wa_content TYPE zxsyslog,
l_wa_log TYPE zxsyslog,
l_dummy TYPE c.
********************************程序逻辑区******************************
*** 1 创建日志
l_extnum = sy-datum.
l_s_log-object = p_object. “日志对象
IF p_subobject IS NOT INITIAL.
l_s_log-subobject = p_subobject. “日志子对象
ENDIF.
l_s_log-extnumber = l_extnum. “外部标识符
CALL FUNCTION ‘BAL_LOG_CREATE’ “创建日志
EXPORTING
i_s_log = l_s_log
IMPORTING
e_log_handle = l_log_handle “获得句柄
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
EXIT.
ENDIF.
*** 2 设置信息
SORT p_itab_log BY zno.
LOOP AT p_itab_log INTO l_wa_log.
MOVE-CORRESPONDING l_wa_log TO l_wa_content.
l_s_mdef-log_handle = l_log_handle.
l_s_mdef-context-tabname = ‘ZXSYSLOG’.
l_s_mdef-context-value = l_wa_content.
CALL FUNCTION ‘BAL_GLB_MSG_DEFAULTS_SET’
EXPORTING
i_s_msg_defaults = l_s_mdef
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF l_wa_log-ztype IS INITIAL.
MESSAGE s001(bl) WITH l_wa_log-zdesc(50)
l_wa_log-zdesc+50(50)
l_wa_log-zdesc+100(50)
l_wa_log-zdesc+150(50).
ELSE.
CASE l_wa_log-ztype.
WHEN ‘S’ OR ’s’ OR ‘I’ OR ‘i’.
MESSAGE s001(bl) WITH l_wa_log-zdesc(50)
l_wa_log-zdesc+50(50)
l_wa_log-zdesc+100(50)
l_wa_log-zdesc+150(50)
INTO f.
WHEN ‘W’ OR ‘w’.
MESSAGE w001(bl) WITH l_wa_log-zdesc(50)
l_wa_log-zdesc+50(50)
l_wa_log-zdesc+100(50)
l_wa_log-zdesc+150(50)
INTO f.
WHEN ‘A’ OR ‘a’ OR ‘E’ OR ‘e’ OR ‘X’ OR ‘x’.
MESSAGE e001(bl) WITH l_wa_log-zdesc(50)
l_wa_log-zdesc+50(50)
l_wa_log-zdesc+100(50)
l_wa_log-zdesc+150(50)
INTO f.
ENDCASE.
ENDIF.
l_s_msg-msgty = sy-msgty .
l_s_msg-msgid = sy-msgid.
l_s_msg-msgno = sy-msgno.
l_s_msg-msgv1 = sy-msgv1.
l_s_msg-msgv2 = sy-msgv2.
l_s_msg-msgv3 = sy-msgv3.
l_s_msg-msgv4 = sy-msgv4.
CALL FUNCTION ‘BAL_LOG_MSG_ADD’
EXPORTING
i_s_msg = l_s_msg
EXCEPTIONS
log_not_found = 0
OTHERS = 1.
ENDLOOP.
*** 3 保存日志完毕
CALL FUNCTION ‘BAL_DB_SAVE’
EXPORTING
i_save_all = ‘X’
EXCEPTIONS
OTHERS = 1.
说明:
1 ZXSYSLOG是自建结构,根据自己需求可以有所改变。
2 日志对象是必须的,但是子对象是非必须的。一般外部标示为日期。
3 查看日志slg1
4 创建日志对象和子对象slg0