问题的显示:

第一次输入的日期,保存之后在修改记录里却显示的是当前用户查看的时间。这很离谱。。。
找了一下底表,确实就是没有,所以最后默认了当前时间。。。

CDPOS里虽然有记录,但是FNAME竟然是KEY,而且VALUE_NEW和VALUE_OLD都是空。。。
为了修复这个问题,找了一下SCDO,找到对应的修改记录函数和类型:

因为这个函数CRM_ORDER_WRITE_DOCUMENT是自动生成的,所以安全起见不在这里修改。找到下一层的修改函数:CHANGEDOCUMENT_MULTIPLE_CASE
测试了在第一次输入Z类型的日期时,NEW是多一条记录的。
所以,最简单的办法就是给OLD也加一条,这样后面在对比的时候会认为是修改记录,会记录新值和旧值。(默认第一次修改是不记录新旧值得)
IF TABLENAME = 'CRMA_DATES'."限制日期类型才走逻辑 DATA:LINE_NEW TYPE I, LINE_OLD TYPE I, LV_INDEX TYPE I, GW_NEW TYPE VCRMA_DATES, GW_OLD TYPE VCRMA_DATES. FIELD-SYMBOLS:<NEW_LINE> TYPE ANY, <OLD_LINE> TYPE ANY, <VALU> TYPE ANY. DESCRIBE TABLE TABLE_NEW LINES LINE_NEW. DESCRIBE TABLE TABLE_OLD LINES LINE_OLD. IF LINE_NEW > LINE_OLD."比较新值表和旧值表是不是不一致 LOOP AT TABLE_NEW INTO GW_NEW. LV_INDEX = SY-TABIX. ASSIGN COMPONENT 'APPT_TYPE' OF STRUCTURE GW_NEW TO <NEW_LINE>. READ TABLE TABLE_OLD INTO GW_OLD INDEX LV_INDEX. IF SY-SUBRC = 0. ASSIGN COMPONENT 'APPT_TYPE' OF STRUCTURE GW_OLD TO <OLD_LINE>. IF <NEW_LINE> <> <OLD_LINE>.”判断新旧两表相同位序的日期类型是不是不同 ASSIGN COMPONENT 'TIMESTAMP_FROM' OF STRUCTURE GW_NEW TO <VALU>. IF <VALU> IS NOT INITIAL."把日期置空,默认从空改到新值 <VALU> = '00000000000000'. ENDIF. INSERT GW_NEW INTO TABLE_OLD INDEX LV_INDEX. ENDIF. ELSE.”防止新值在最后一行 ASSIGN COMPONENT 'TIMESTAMP_FROM' OF STRUCTURE GW_NEW TO <VALU>. IF <VALU> IS NOT INITIAL. <VALU> = '00000000000000'. ENDIF. INSERT GW_NEW INTO TABLE_OLD INDEX LV_INDEX. ENDIF. ENDLOOP. ENDIF. ENDIF.
增强之后效果:

第一次的记录已经有了,完工
^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
浙公网安备 33010602011771号