通常在创建一些配置表时,需要添加创建者、创建日期、创建时间、变更者等字段,用于记录条目的变更履历,一般希望在SM30用户维护时自动更新这些字段,本文介绍一种标准的方式来实现该功能。
1.创建通用结构,用于复用
2.在需要维护的表中包含该结构
3.SE11创建维护视图
选择需要显示的字段,采用该方式的好处是,可以直接设置屏幕字段的属性(只读或者隐藏)。
4.创建SM30表格维护生成器
这里建议单独创建一个SM30函数组,后续所有的SM30都放在该函数组中,即可复用后续创建的event例程。
5.创建01事件及通用form
创建包含文件,并添加以下代码。
*----------------------------------------------------------------------*
***INCLUDE LZFGP_SM30F01.
*----------------------------------------------------------------------*
FORM frm_change_info_auto_set.
PERFORM frm_before_save USING view_name.
ENDFORM. "frm_change_info_auto_set
**********************************************************************
* Auto set username & datetime defore save records
**********************************************************************
FORM frm_before_save USING uv_view_name TYPE char30.
DATA: ls_change TYPE zschange_info.
FIELD-SYMBOLS: <fs_view> TYPE any.
ASSIGN (uv_view_name) TO <fs_view>.
LOOP AT total.
CASE <action>.
WHEN aendern. "Update
MOVE <vim_total_struc> TO <fs_view>.
MOVE-CORRESPONDING <fs_view> TO ls_change.
ls_change-aedat = sy-datlo.
ls_change-aezet = sy-timlo.
ls_change-aenam = sy-uname.
MOVE-CORRESPONDING ls_change TO <fs_view>.
MOVE <fs_view> TO <vim_total_struc>.
MODIFY total.
READ TABLE extract WITH KEY <vim_xtotal_key>.
IF sy-subrc EQ 0.
MOVE <vim_total_struc> TO <vim_extract_struc>.
MODIFY extract INDEX sy-tabix.
ENDIF.
WHEN neuer_eintrag. "New Entry
MOVE <vim_total_struc> TO <fs_view>.
MOVE-CORRESPONDING <fs_view> TO ls_change.
ls_change-erdat = sy-datlo.
ls_change-erzet = sy-timlo.
ls_change-ernam = sy-uname.
MOVE-CORRESPONDING ls_change TO <fs_view>.
MOVE <fs_view> TO <vim_total_struc>.
MODIFY total.
READ TABLE extract WITH KEY <vim_xtotal_key>.
IF sy-subrc EQ 0.
MOVE <vim_total_struc> TO <vim_extract_struc>.
MODIFY extract INDEX sy-tabix.
ENDIF.
ENDCASE.
ENDLOOP.
sy-subrc = 0.
ENDFORM. "frm_before_save
6.SM30进行测试
7.为SM30添加事务代码
部分项目可能不会为用户开放SM30权限,所以为SM30分配对应事务代码,事务代码SE93:
8.变更信息时重新生成调整SM30
当发生字段变更,或者需要变更字段编辑属性等情况时,不需要删掉重建,点击修改按钮,勾选调整的内容,点击对勾即可,非专家模式的时候全选也可以。
专家模式下不要勾选以下两个按钮,否则之前创建的include会在主程序中取消包含,会引发dump。
如果不慎勾选导致dump,重新在主程序中添加include即可。
总结:
使用该方式的好处是,可复用,后续变更方便调整,无需担心要重写自动赋值代码。