业务需求:
在SAP项目中,会经常碰到如下需求:
在业务处理过程中,需要手工对透明表(数据库表)进行批量的数据维护,如下图所示:
可以新增条目、删除条目、修改条目内容。
自动记录条目的创建日期与修改日期等信息。
实现步骤:
一、运行SE11(创建维护视图),打开透明表ZHYT_XYKQ;执行:应用程序->表格维护生成器。
按照说明填写如图参数:
点击查找屏幕号->建议屏幕号->对号:
概述屏幕产生后,点击创建。
选择包:
选择传输请求:
双击{概述屏幕}进入屏幕绘制器:
点击{布局},进入屏幕制作器;
双击{列标题}进行数据列描述的设置,如班级:
双击{数据列},修改数据列的长度、可修改等属性,如(创建日期->不可输入):
二、添加功能,维护视图自动按照实际情况保存{创建日期、创建时间等字段}.
如下PAI位置,添加自定义MODULE{MOD_CHANGE_XYKQ }
MODULE{MOD_CHANGE_XYKQ }实现如下:
代码如下:
*----------------------------------------------------------------------*
***INCLUDE LZHYFG_202308I01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module MOD_CHANGE_XYKQ INPUT
*&---------------------------------------------------------------------*
* 自动更新创建、记录字段
*----------------------------------------------------------------------*
MODULE MOD_CHANGE_XYKQ INPUT.
**判断当前记录是否存在
SELECT COUNT(*)
FROM ZHYT_XYKQ
WHERE ZXH = ZHYT_XYKQ-ZXH
AND ZBJ = ZHYT_XYKQ-ZBJ.
IF SY-SUBRC = 0.
****记录修改
CALL FUNCTION 'Z_HYFM_GET_DINFO'
EXPORTING
I_ZCZLX = 'CHANGE'
CHANGING
C_S_STRU = ZHYT_XYKQ.
ELSE.
****记录新增
CALL FUNCTION 'Z_HYFM_GET_DINFO'
EXPORTING
I_ZCZLX = 'CREATE'
CHANGING
C_S_STRU = ZHYT_XYKQ.
ENDIF.
ENDMODULE.
其中函数{Z_HYFM_GET_DINFO}实现如下:
代码如下:
FUNCTION Z_HYFM_GET_DINFO .
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_ZCZLX) TYPE STRING
*" CHANGING
*" REFERENCE(C_S_STRU) TYPE ANY
*"----------------------------------------------------------------------
FIELD-SYMBOLS: <FS_DATA> TYPE ANY.
**宏定义
DEFINE MAC_FIELDS.
UNASSIGN <FS_DATA>.
ASSIGN COMPONENT &1 OF STRUCTURE C_S_STRU TO <FS_DATA>.
IF SY-SUBRC = 0.
CASE &1.
WHEN 'ERDAT' OR 'AEDAT'.
<FS_DATA> = SY-DATUM.
WHEN 'ERTIM' OR 'AETIM'.
<FS_DATA> = SY-UZEIT.
WHEN 'ERNAM' OR 'AENAM'.
<FS_DATA> = SY-UNAME.
ENDCASE.
ENDIF.
END-OF-DEFINITION.
**宏调用
CASE I_ZCZLX.
WHEN 'CREATE'."创建
MAC_FIELDS: 'ERDAT', "创建日期
'ERTIM', "创建时间
'ERNAM'. "创建人
WHEN 'CHANGE'."修改
MAC_FIELDS: 'AEDAT', "修改日期
'AETIM', "修改时间
'AENAM'. "修改人
WHEN OTHERS.
ENDCASE.
ENDFUNCTION.