BP 屏幕增加自定义字段定制步骤

1,285 阅读2分钟

进入 BUPT 事物代码

img

选择 业务伙伴->控制->屏幕布局

新增字段组

新条目,然后填入 610,填入下面的内容:

img

增加下面的功能模块:

BUA_BUPA_EVENT_FMOD2

添加成功后的界面如下:

img

然后选中 610,双击 字段组->字段:

img

新增视图

双击视图,单击 新条目:

img

添加完 ZKNA01 视图,然后双击它进入,编辑如下内容:

img

双击 视图->字段组:

img

新增部分

新条目:

  • 部分:ZKNA1
  • 描述:Field Territory
  • 标题:Territory

img

双击 部分->视图:

img

新增屏幕

新条目:

  • 屏幕:ZKNA1
  • 描述:KNA1 Addtional Field Territory
  • 屏幕标题:Territory

img

双击 ZKNA1:

img

双击 屏幕 -> 部分

img

选中 **BUA130,**双击 屏幕->部分:

img

新增保存事件

选择 DSAVB

img

双击 事件 -> 功能模块,新条目:

img

新增函数组 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.

附加结构增加自定义字段

图片.png

图片.png

最终呈现

图片.png

本文介绍了如何在BP屏幕上定制和增加一个自定义字段的步骤,并完善了相关的控制与取值逻辑,希望能够对实际开发中遇到相同问题的 ABAPe r有所帮助~

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情

参考链接:

  1. blogs.sap.com/2019/11/07/…
  2. blogs.sap.com/2020/06/23/…