添加系统日志

来源:互联网 发布:安卓网游源码 编辑:程序博客网 时间:2024/06/05 19:44

http://scnblogs.techweb.com.cn/hellohainiao/archives/33.html

现在项目上自开发的dialog程序越来越多,有很多敏感数据需要像SAP标准的业务一样,能看到所有的修改日志,要想实现日志的功能,方法很多。在此介绍一下,添加系统日志的方法。为了让其可以共用,在此建立一个FM: ZBAPI_CREATE_SYSLOG

e688aae59bbe003

e688aae59bbe011

将要显示的内容,以此表传过来

********************************变量定义区******************************

 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.

 

说明:

ZXSYSLOG是自建结构,根据自己需求可以有所改变。

日志对象是必须的,但是子对象是非必须的。一般外部标示为日期。

查看日志slg1

创建日志对象和子对象slg0

 
实现在ALV展现以后,通过布局格式控制隐藏一些列以后导出的EXCEL中不显示这些列,不是自带的EXCEL导出,是自己写的,可是不知道列隐藏的属性放在哪里,