进入 BUPT 事物代码
选择 业务伙伴->控制->屏幕布局
新增字段组
新条目,然后填入 610,填入下面的内容:
增加下面的功能模块:
BUA_BUPA_EVENT_FMOD2
添加成功后的界面如下:
然后选中 610,双击 字段组->字段:
新增视图
双击视图,单击 新条目:
添加完 ZKNA01 视图,然后双击它进入,编辑如下内容:
双击 视图->字段组:
新增部分
新条目:
- 部分:ZKNA1
- 描述:Field Territory
- 标题:Territory
双击 部分->视图:
新增屏幕
新条目:
- 屏幕:ZKNA1
- 描述:KNA1 Addtional Field Territory
- 屏幕标题:Territory
双击 ZKNA1:
双击 屏幕 -> 部分:
选中 **BUA130,**双击 屏幕->部分:
新增保存事件
选择 DSAVB
双击 事件 -> 功能模块,新条目:
新增函数组 SAPLZSD_BUA110
*******************************************************************
* System-defined Include-files. *
*******************************************************************
INCLUDE LZSD_BUA110TOP. " Global Declarations
INCLUDE LZSD_BUA110UXX. " Function Modules
*******************************************************************
* User-defined Include-files (if necessary). *
*******************************************************************
* INCLUDE LZSD_BUA110F... " Subroutines
* INCLUDE LZSD_BUA110O... " PBO-Modules
* INCLUDE LZSD_BUA110I... " PAI-Modules
* INCLUDE LZSD_BUA110E... " Events
* INCLUDE LZSD_BUA110P... " Local class implement.
* INCLUDE LZSD_BUA110T99. " ABAP Unit tests
INCLUDE lzsd_bua110o01.
INCLUDE lzsd_bua110f01.
LZSD_BUA110O01
*----------------------------------------------------------------------*
***INCLUDE LZSD_BUA110O01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module PBO OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pbo OUTPUT.
PERFORM pbo.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module PAI INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pai INPUT.
PERFORM pai.
ENDMODULE.
LZSD_BUA110F01
*----------------------------------------------------------------------*
***INCLUDE LZSD_BUA110F01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form PBO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pbo .
CALL FUNCTION 'BUS_PBO'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PAI
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pai .
CALL FUNCTION 'BUS_PAI'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module F4_HELP_FOR_ZTERRITORY INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE f4_help_for_zterritory INPUT.
PERFORM get_screen_country.
PERFORM frm_zterritory.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CHECK_ZTERRITORY INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE check_zterritory INPUT.
PERFORM get_screen_country.
PERFORM frm_check_zterritory.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_ZTERRITORY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_zterritory .
DATA: t_ddshretval TYPE TABLE OF ddshretval.
DATA: l_ddshretval TYPE ddshretval.
DATA:ls_dynpread TYPE dynpread,
lt_dynpread TYPE TABLE OF dynpread.
SELECT country zterritory FROM zsdt049 INTO CORRESPONDING FIELDS OF TABLE gt_zterritory
WHERE country = gv_country.
SORT gt_zterritory BY country zterritory.
DELETE ADJACENT DUPLICATES FROM gt_zterritory COMPARING country zterritory.
CLEAR: l_ddshretval,t_ddshretval.
REFRESH t_ddshretval.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "调用函数
EXPORTING
retfield = 'ZTERRITORY' "搜索帮助内表要输出的的帮助字段名,注:要大写
dynpprog = sy-repid
dynpnr = sy-dynnr
value_org = 'S'
dynprofield = 'ZTERRITORY' "指定屏幕参数的名称
callback_program = sy-repid
TABLES
return_tab = t_ddshretval
value_tab = gt_zterritory "存储搜索帮助内容的内表
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0 .
READ TABLE t_ddshretval INTO l_ddshretval INDEX 1.
IF l_ddshretval-fieldval IS NOT INITIAL.
kna1-zterritory = l_ddshretval-fieldval.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_ZTERRITORY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_check_zterritory .
DATA: lv_zterritory TYPE zsdt049-zterritory.
* SELECT SINGLE zterritory INTO lv_zterritory FROM zsdt049
* WHERE country = gv_country
* AND zterritory = gs_kna1-zterritory.
SELECT COUNT( * ) FROM zsdt049 WHERE country = gv_country
AND zterritory = gs_kna1-zterritory.
IF sy-subrc <> 0.
IF sy-langu = '1'.
MESSAGE 'Territory 不存在!' TYPE 'E' DISPLAY LIKE 'E'.
ELSE.
MESSAGE 'Territory incorrect!' TYPE 'E' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_SCREEN_COUNTRY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_screen_country .
CLEAR: gt_dynpfields1, gt_dynpfields1[].
gt_dynpfields1-fieldname = 'ADDR1_DATA-COUNTRY'.
APPEND gt_dynpfields1.
CLEAR: gt_dynpfields2, gt_dynpfields2[].
gt_dynpfields2-fieldname = 'ADDR2_DATA-COUNTRY'.
APPEND gt_dynpfields2.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = gv_program_name
dynumb = gv_screen_no
translate_to_upper = 'X'
TABLES
dynpfields = gt_dynpfields1
EXCEPTIONS
OTHERS = 9.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = 'SAPLSZA7'
dynumb = '0601'
translate_to_upper = 'X'
TABLES
dynpfields = gt_dynpfields2
EXCEPTIONS
OTHERS = 9.
READ TABLE gt_dynpfields1 WITH KEY fieldname = 'ADDR1_DATA-COUNTRY'.
IF sy-subrc = 0.
gv_country = gt_dynpfields1-fieldvalue.
ENDIF.
IF gv_country IS INITIAL.
READ TABLE gt_dynpfields2 WITH KEY fieldname = 'ADDR2_DATA-COUNTRY'.
IF sy-subrc = 0.
gv_country = gt_dynpfields2-fieldvalue.
ENDIF.
ENDIF.
ENDFORM.
附加结构增加自定义字段
最终呈现
本文介绍了如何在BP屏幕上定制和增加一个自定义字段的步骤,并完善了相关的控制与取值逻辑,希望能够对实际开发中遇到相同问题的 ABAPe r有所帮助~
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情
参考链接: