1. 标准的物料主数据修改记录表:CDHDR(抬头表)CDPOS(行项目)
目前需要记录操作人员的工号,IP, 主机名
目前有外挂登录程序记录工号,
获取工号:GET PARAMETER ID 'ZLOGIN_USER' FIELD ls_ztsapcdhdr-emplyee_id.
2. 增强点 FM: CHANGEDOCUMENT_CLOSE
3. 增强代码
*&---------------------------------------------------------------------*
*& Form ZEN_MATNR_SAVE_CHANGEDOCUMENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> PV_CDHDR
*&---------------------------------------------------------------------*
FORM zen_matnr_save_changedocument USING pv_cdhdr TYPE cdhdr.
DATA: ls_ztsapcdhdr TYPE ztsap_cdhdr.
DATA: lv_emplyee_id TYPE zjpmf_user-emplyee_id,
lv_srtfd TYPE indx-srtfd.
DATA: lv_zhostaddr TYPE msxxlist-hostadr,
lv_zterminal TYPE mshostname,
lv_zaddrstr TYPE ni_nodeaddr.
SELECT SINGLE COUNT(*)
FROM cdhdr
WHERE objectclas = pv_cdhdr-objectclas
AND objectid = pv_cdhdr-objectid
AND changenr = pv_cdhdr-changenr.
IF sy-subrc EQ 0. "标准的有保存了
SELECT SINGLE COUNT(*)
FROM ztsap_cdhdr
WHERE objectclas = pv_cdhdr-objectclas
AND objectid = pv_cdhdr-objectid
AND changenr = pv_cdhdr-changenr.
IF sy-subrc NE 0. "客制表未保存
lv_srtfd = pv_cdhdr-objectid.
IMPORT lv_emplyee_id FROM DATABASE indx(z1) ID lv_srtfd.
IF sy-subrc EQ 0.
DELETE FROM DATABASE indx(z1) ID lv_srtfd.
ENDIF.
CALL FUNCTION 'TH_USER_INFO'
EXPORTING
client = sy-mandt
user = sy-uname
IMPORTING
hostaddr = lv_zhostaddr
terminal = lv_zterminal
addrstr = lv_zaddrstr.
CLEAR ls_ztsapcdhdr.
ls_ztsapcdhdr-objectclas = pv_cdhdr-objectclas.
ls_ztsapcdhdr-objectid = pv_cdhdr-objectid.
ls_ztsapcdhdr-changenr = pv_cdhdr-changenr.
ls_ztsapcdhdr-hostname = lv_zterminal. " 主机名
ls_ztsapcdhdr-ipaddr = lv_zaddrstr. " IP地址
GET PARAMETER ID 'ZLOGIN_USER' FIELD ls_ztsapcdhdr-emplyee_id.
IF ls_ztsapcdhdr-emplyee_id IS INITIAL.
ls_ztsapcdhdr-emplyee_id = lv_emplyee_id.
ENDIF.
IF ls_ztsapcdhdr-emplyee_id IS NOT INITIAL. .
MODIFY ztsap_cdhdr FROM ls_ztsapcdhdr.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
4. 增强代码种没办法在更新模式下获取到工号,即GET PARAMETER ID 'ZLOGIN_USER' FIELD ls_ztsapcdhdr-emplyee_id.无效。
只能靠
lv_srtfd = pv_cdhdr-objectid.
IMPORT lv_emplyee_id FROM DATABASE indx(z1) ID lv_srtfd.
IF sy-subrc EQ 0.
DELETE FROM DATABASE indx(z1) ID lv_srtfd.
ENDIF.
获取工号,这个就需要在它执行直接写入工号;
5.写入工号增强:
增强一:ZCL_IM_BADI_MATERIAL_CHECK IF_EX_BADI_MATERIAL_CHECK~CHECK_DATA
增强二:ZXMG0U02
目的就是调用之前先写入,其他的增强点也可以的啊