ME2N屏幕字段增强
发布日期:2024/08/24
案例:事务码ME2N执行展示画面追加创建人(EKKO-ERNAM)、交货日期(EKET-EINDT)、采购订单抬头文本。对应多个项目交货日期时取最早的交货日期。
-
确认ME2N展示时参考的结构为MEREP_OUTTAB_PURCHDOC,并附加需要的字段。
-
EKKO和EKPO的同名字段添加到结构后会自动赋值并展示内容,所以此处ERNAM不需要再写赋值逻辑,需要添加ZEINDT和ZSGTXT的取赋值逻辑。
-
确定增强点。程序LMEREPI02的 CALL FUNCTION 'MEPOBADI_CHANGE_OUTTAB’后取到了输出数据outtab,my_struct_name是输出结构 MEREP_OUTTAB_PURCHDOC。我们可以在其后做增强。
-
增强详细代码如下,此处读取到的长文本存于内表lt_tline中。后面拼接长文本,为了避免双重循环,用了concat_lines_of()(拼接内表的所有字段)。
ENHANCEMENT 1 ZEH_MM_PMZDZQ. "active version
IF my_struct_name = 'MEREP_OUTTAB_PURCHDOC' AND SY-TCODE = 'ME2N'.
TYPES:BEGIN OF ts_line,
tdline TYPE tdline,
END OF ts_line.
DATA:lt_merep TYPE STANDARD TABLE OF MEREP_OUTTAB_PURCHDOC,
lt_tline TYPE STANDARD TABLE OF tline,
lt_line TYPE STANDARD TABLE OF ts_line,
lv_tdname TYPE thead-tdname.
FIELD-SYMBOLS:<lfs_outtab> TYPE MEREP_OUTTAB_PURCHDOC.
MOVE-CORRESPONDING <outtab> TO lt_merep.
IF lt_merep IS NOT INITIAL.
*交货日期:EKET-EINDT,若存在多个,则展示最早交货日期
SELECT ebeln,ebelp,eindt
FROM eket
FOR ALL ENTRIES IN @lt_merep
WHERE ebeln = @lt_merep-ebeln
AND ebelp = @lt_merep-ebelp
INTO TABLE @DATA(lt_eindt).
SORT lt_eindt by ebeln ebelp eindt.
DELETE ADJACENT DUPLICATES FROM lt_eindt COMPARING ebeln ebelp.
LOOP AT <outtab> ASSIGNING <lfs_outtab>.
*读取交货日期
READ TABLE lt_eindt ASSIGNING FIELD-SYMBOL(<lfs_eindt>)
WITH KEY ebeln = <lfs_outtab>-ebeln ebelp = <lfs_outtab>-ebelp BINARY SEARCH.
IF sy-subrc = 0.
<lfs_outtab>-zeindt = <lfs_eindt>-eindt.
ENDIF.
*读取长文本
CLEAR:lt_tline[].
lv_tdname = <lfs_outtab>-ebeln.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'F01'
language = sy-langu
name = lv_tdname
object = 'EKKO'
TABLES
lines = lt_tline
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
MOVE-CORRESPONDING lt_tline TO lt_line.
<lfs_outtab>-zsgtxt = concat_lines_of( table = lt_line sep = '').
ENDLOOP.
ENDIF.
ENDIF.
ENDENHANCEMENT.
- 最后来看一下实现效果吧。
ME2N输入条件执行后,展示画面中更改布局,显示新增的字段。
我们想要增强的字段就展示出来啦!