SAP 配置表记录创建人/创建日期/创建时间/更改人/更改日期/更改时间

   在实际开发需求中,为了使客制功能具有灵活的可配置性,通常采用开发功能+配置表的形式处理。有些客制的配置功能需要追溯到谁在什么时候增加了什么配置,或者谁在什么时候更改了什么位置,配置表的Log功能就显得很有必要了。以下过程说明SAP在配置表中如何实现配置表的Log功能。

  说明:本文中的截图皆为作者本人编写和制作,如果转载或引用请务必通知作者本人!!!

  (1)建立配置表

  建立配置表,在配置表中增加建立者、建立日期、建立时间、更改者、更改日期、更改时间:

   (2)维护表维护生成器:

  在菜单栏:实用程序->表维护生成器:

   进入表维护生成器:

   (3)维护表生成器维护界面

  双击画面编号,进入画面的程序代码页面:

   在PBO中用代码实现将Log的字段隐藏(这里的隐藏是指,在对配置表做配置时会看不到这些字段):

    PBO模块:MODULE   MODIFY_ELEMENT_14 .

  实现代码:

 1 MODULE MODIFY_ELEMENT_14 OUTPUT.
 2   LOOP AT <VIM_TCTRL>-COLS INTO VIM_TC_COLS.
 3     IF VIM_TC_COLS-SCREEN-NAME = 'YFG_C_PM_AUTOSMS-ERNAM' OR
 4        VIM_TC_COLS-SCREEN-NAME = 'YFG_C_PM_AUTOSMS-ERDAT' OR
 5        VIM_TC_COLS-SCREEN-NAME = 'YFG_C_PM_AUTOSMS-ERZET' OR
 6        VIM_TC_COLS-SCREEN-NAME = 'YFG_C_PM_AUTOSMS-AENAM' OR
 7        VIM_TC_COLS-SCREEN-NAME = 'YFG_C_PM_AUTOSMS-AEDAT' OR
 8        VIM_TC_COLS-SCREEN-NAME = 'YFG_C_PM_AUTOSMS-AEZET' .
 9       VIM_TC_COLS-INVISIBLE = 1 .
10       MODIFY <VIM_TCTRL>-COLS FROM VIM_TC_COLS .
11     ENDIF.
12   ENDLOOP.
13 ENDMODULE.

  (4)实现在配置时新增或更改时自动更新记录

  回到表维护生成器界面,增加表维护事件,在菜单:环境->修改->事件:

   点击“新输入项”,建立维护事项。注意,维护事项的类型选择,这里选择01-在存储资料前和05-建立新输入项,如:

   示例05-在新建输入项时保存记录:YFG_PM_AUTOSMS_NEW_ENTRY

1 *&---------------------------------------------------------------
2 *&  FORM  YFG_PM_AUTOSMS_NEW_ENTRY
3 *&   自動更新YFG_C_PM_AUTOSMS 的建立日期
4 *&---------------------------------------------------------------
5 FORM  YFG_PM_AUTOSMS_NEW_ENTRY.
6   YFG_C_PM_AUTOSMS-ERNAM = SY-UNAME .
7   YFG_C_PM_AUTOSMS-ERDAT = SY-DATUM .
8   YFG_C_PM_AUTOSMS-ERZET = SY-UZEIT .
9 ENDFORM.

  示例01-在更改时保存记录:YFG_PM_AUTOSMS_MODIFY_SAVE

 1 *&---------------------------------------------------------------
 2 *&  FORM  YFG_PM_AUTOSMS_MODIFY_SAVE
 3 *&   自動更新YFG_C_PM_AUTOSMS的更新日期
 4 *&---------------------------------------------------------------
 5 FORM  YFG_PM_AUTOSMS_MODIFY_SAVE.
 6   FIELD-SYMBOLS : <FS_FIELD> TYPE ANY .
 7   LOOP AT TOTAL .
 8     CHECK <ACTION> EQ AENDERN.
 9     ASSIGN COMPONENT 'AENAM' OF STRUCTURE <VIM_TOTAL_STRUC> TO <FS_FIELD> .
10     IF SY-SUBRC = 0 .
11       <FS_FIELD> = SY-UNAME .
12     ENDIF.
13     ASSIGN COMPONENT 'AEDAT' OF STRUCTURE <VIM_TOTAL_STRUC> TO <FS_FIELD> .
14     IF SY-SUBRC = 0 .
15       <FS_FIELD> = SY-DATUM .
16     ENDIF.
17     ASSIGN COMPONENT 'AEZET' OF STRUCTURE <VIM_TOTAL_STRUC> TO <FS_FIELD> .
18     IF SY-SUBRC = 0 .
19       <FS_FIELD> = SY-UZEIT .
20     ENDIF.
21     READ TABLE EXTRACT WITH KEY <VIM_XTOTAL_KEY>.
22     IF SY-SUBRC = 0.
23       EXTRACT = TOTAL .
24       MODIFY EXTRACT INDEX SY-TABIX.
25     ENDIF.
26     MODIFY TOTAL.
27   ENDLOOP.
28 ENDFORM.

   实现效果:

  配置界面:

 

   表内容显示:

 除此之外,还可以给配置表设定其他功能,比如根据选定的某行值自动带出描述,以及给某个字段增加搜索帮助,或者设定字段必输等。以下分别介绍。

1.根据选定的值自动带出描述

进入表维护生成器,双击屏幕编号进入屏幕编辑界面。

在PAI中增加CHAIN MODULE逻辑,比如:

 

 双击要建立的module生成,注意此时如果提示正在编辑,则是因为在se11表界面是更改模式,要对表改为显示模式。

实现代码示例:

 1 MODULE GET_NAME_NACHN INPUT.
 2   IF   YFG_C_PM_CCEMP-NACHN_I  IS  NOT  INITIAL.
 3     SELECT SINGLE  NAME
 4       FROM  YFG_D_HR_EMP
 5       INTO  YFG_C_PM_CCEMP-VORNA_I
 6       WHERE  EMPLOYEENO = YFG_C_PM_CCEMP-NACHN_I.
 7   ELSE.
 8     CLEAR  YFG_C_PM_CCEMP-VORNA_I.
 9   ENDIF.
10 
11   IF   YFG_C_PM_CCEMP-NACHN_O  IS  NOT  INITIAL.
12     SELECT SINGLE  NAME
13       FROM  YFG_D_HR_EMP
14       INTO  YFG_C_PM_CCEMP-VORNA_O
15       WHERE  EMPLOYEENO = YFG_C_PM_CCEMP-NACHN_O.
16   ELSE.
17     CLEAR  YFG_C_PM_CCEMP-VORNA_O.
18   ENDIF.
19 ENDMODULE.

2.给字段增加F4搜索帮助

同样在表编辑器屏幕编辑界面,增加PROCESS ON VALUE-REQUEST.并在下面增加F4 帮助代码。

 代码示例:

MODULE FRM_F4_EMPNO INPUT.
  DATA:BEGIN OF   LT_EMP   OCCURS  0,
         EMPLOYEENO  TYPE    YFG_D_HR_EMP-EMPLOYEENO,
         NAME        TYPE    YFG_D_HR_EMP-NAME,
         COMPANYCODE TYPE    YFG_D_HR_EMP-COMPANYCODE,
         GROUPNAME   TYPE    YFG_D_HR_EMP-GROUPNAME,
       END OF  LT_EMP.

  REFRESH  LT_EMP.
*  取部門所屬公司下的所有人
*  1. 取部門公司代碼
  SELECT    EMPLOYEENO    NAME    COMPANYCODE   GROUPNAME
    INTO  TABLE  LT_EMP
    FROM   YFG_D_HR_EMP
    WHERE    LEAVEDATE  =  '00000000'
    AND  ( COMPANYCODE  =  'PD01'  OR  COMPANYCODE  =  'PC01'  OR  COMPANYCODE  =  'PC02'  OR  COMPANYCODE  =  'PR01').
*        AND  GROUPCODE   LIKE  LV_GROUPCODE.
  IF  SY-SUBRC  =  0.
    SORT  LT_EMP  BY  COMPANYCODE  GROUPNAME .
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        RETFIELD        = 'EMPLOYEENO'
        DYNPPROG        = SY-REPID
        DYNPNR          = SY-DYNNR
        DYNPROFIELD     = 'YFG_D_NOTI_TASK-NACHN'         "  返回程序中的輸入框
        STEPL           = L_ROW
        VALUE_ORG       = 'S'
      TABLES
        VALUE_TAB       = LT_EMP
*       FIELD_TAB       =
*       RETURN_TAB      = LT_RETURN_TAB
*       DYNPFLD_MAPPING =
      EXCEPTIONS
        PARAMETER_ERROR = 1
        NO_VALUES_FOUND = 2
        OTHERS          = 3.

    IF  SY-SUBRC  =  0.

    ENDIF.
  ELSE.
    MESSAGE  '無人員可選'   TYPE   'S'   DISPLAY LIKE   'E'.
  ENDIF.
ENDMODULE.

3.设置某字段必输

同样在界面编辑界面,点击打开屏幕编辑器:

 

 将Input输入改为required即可。

注意完成后激活。

 

posted @ 2020-02-23 17:42  SAP蛋妞  阅读(376)  评论(0)    收藏  举报