1.问题:用户对长文本每一次的操作怎么查看呢,要做个长文本修改记录增强
从STXH中只能获取创建人和时间,最后更改人和时间。
我这篇文章选择做个增强:在存储长文本(SAVE_TEXT函数)的时候把具体信息存储到自建表。
2.首先,先做两个自建表
一个用来配置,哪些长文本需要做记录。
一个是用来记录长文本每一次更改。每一次更改版本增加1.
3.给SAVE_TEXT做增强
按照我的操作来
创建隐式增强
选择代码/声明都可以了。
填好自定义名称就可以。
4.增强代码
"查验哪些长文本需要存储修改记录DATA:LS_49 TYPE ZTSD0049.SELECT SINGLE *FROM ZTSD0049INTO LS_49WHERE TDOBJECT = HEADER-TDOBJECT "比如VBBKAND TDID = HEADER-TDID "Z00AND TDSPRAS = HEADER-TDSPRAS. "语言IF SY-subrc = 0."查询此个文本在记录表的最大版本,版本+1 ,查不到就是1DATA:LV_ZVERSION TYPE ZTSD0050-ZVERSION.SELECT MAX( ZVERSION )FROM ZTSD0050INTO LV_ZVERSIONWHERE TDOBJECT = HEADER-TDOBJECTAND TDNAME = HEADER-TDNAME "单号号码AND TDID = HEADER-TDIDAND TDSPRAS = HEADER-TDSPRAS. "语言IF SY-subrc = 0.LV_ZVERSION = LV_ZVERSION + 1.ELSE.LV_ZVERSION = 1.ENDIF."把文本拼接起来存到自建表DATA:LS_50 TYPE ZTSD0050.LOOP AT LINES INTO DATA(LS_LINE).LS_50-ztext = LS_50-ztext && LS_LINE-tdline.CLEAR:LS_LINE.ENDLOOP.LS_50-TDOBJECT = HEADER-TDOBJECT. "比如VBBKLS_50-TDNAME = HEADER-TDNAME. "单号号码LS_50-TDID = HEADER-TDID. "Z00LS_50-TDSPRAS = HEADER-TDSPRAS. "LS_50-ZVERSION = LV_ZVERSION.LS_50-ZTCODE = SY-TCODE. "使用什么事务代码LS_50-ZUSER = SY-UNAME. "用户名LS_50-ZDATE = SY-DATUM. "日期LS_50-ZTIME = SY-UZEIT. "时间MODIFY ZTSD0050 FROM LS_50."存储到自建表。ENDIF.CLEAR:LS_49,LV_ZVERSION,LS_50.
测试
看结果成功储存到自建表-完成长文本日志增强开发
注意点
如果长文本超过了255,那么在SE16N中查看记录,也显示不出来,但是文本是储存完全了。
我要查看完全的信息
那么把长文本转成一个表,然后输出表就可以查看所有的信息了。
SELECT SINGLE * FROM ZTSD0050 WHERE ZVERSION = 2 INTO @DATA(ls_text).DATA : STR TYPE STRING.
DATA : LENGTH TYPE I.
STR = ls_text-ztext.
DATA: ITAB TYPE TABLE OF CHAR_50."长文本转化为每行为50字的内表,然后输出内表。
CALL FUNCTION 'SCMS_STRING_TO_FTEXT'EXPORTINGTEXT = STRIMPORTINGLENGTH = LENGTHTABLESFTEXT_TAB = ITAB.cl_demo_output=>display( ITAB ).
代码结果
另外
在这个地方也可以做个最新存储表,在报表中取值长文本的时候,就直接取值长文本了,不用循环用函数取值了。
长文本的日志可以通过配置来实现:https://blogs.sap.com/2020/04/28/long-text-change-log-audit-trail/
不过我没有研究过实现过,如果给你些有用的信息也不错了。
参考链接
增强中的声明与代码的区别
上一篇:vue3常用的API
下一篇:category排序专辑