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即可。
注意完成后激活。