整个增强的实现其实就三个步骤:
一、增强数据库表
二、创建函数组
三、配置BUPT
第一次进BP,先执行: EVENT ISDAT >,PBO函数

每次回车,屏幕跳转,都执行EVENT DSAVB  函数-数据保存

1: 在CI_EEW_BUT000中加入需要增强的字段,

vfp追加字段 vfp增加字段的命令_vfp追加字段

 

1:新建函数组:ZFG_MM0770_N,新建屏幕号9001,在屏幕上新增字段出生地和出生日期,PBO和PAI分别逻辑实现  (子屏幕,   屏幕字段用LFA1的字段)

* TOP 
FUNCTION-POOL yfgtest_mm0770.               "MESSAGE-ID ..
 TABLES:  lfa1, but000.
 CONSTANTS:
   table_name_lfa1 TYPE fsbp_table_name    VALUE 'LFA1',
   false           TYPE boole-boole        VALUE ' '.

 DATA:gs_lfa1 TYPE lfa1.*--------------------------------------------------------------------------
 PROCESS BEFORE OUTPUT.
 MODULE STATUS_9001.

 PROCESS AFTER INPUT.
 MODULE USER_COMMAND_9001.MODULE status_9001 OUTPUT.
   CALL FUNCTION 'BUS_PBO'.
 ENDMODULE.
 *&---------------------------------------------------------------------*
 *&      Module  USER_COMMAND_9001  INPUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 MODULE user_command_9001 INPUT.
   CALL FUNCTION 'BUS_PAI'.
 ENDMODULE.

2 创建了5个函数,逻辑分别如下:

PBO函数:

FUNCTION zfun1291_n.
 *"----------------------------------------------------------------------
 *"*"本地接口: PBO函数
 *"----------------------------------------------------------------------

   DATA: tab_lfa1 TYPE TABLE OF lfa1.
   DATA: tab_but000   TYPE TABLE OF but000.
 * step 1: request data from xo for dynpro structure
   CALL METHOD cvi_bdt_adapter=>data_pbo(
     EXPORTING
       i_table_name = table_name_LFA1
     IMPORTING
       e_data_table = tab_lfa1[]
   ).

   IF tab_lfa1[] IS INITIAL.
     CLEAR lfa1.
   ELSE.
     READ TABLE tab_lfa1 INTO lfa1 INDEX 1.
   ENDIF.
   cvi_bdt_adapter=>data_pbo(
       EXPORTING
         i_table_name = 'BUT000'
       IMPORTING
         e_data_table = tab_but000
     ).
   but000 = VALUE #( tab_but000[ 1 ] OPTIONAL ).

 ENDFUNCTION.PAI  函数
 FUNCTION zfun1292_n.
 *"----------------------------------------------------------------------
 *"*"本地接口: PAI函数
 *"----------------------------------------------------------------------

   DATA: tab_lfa1 TYPE TABLE OF lfa1.
   FIELD-SYMBOLS: <fs_lfa1>   LIKE LINE OF  tab_lfa1.

   CHECK cvi_bdt_adapter=>is_direct_input_active( ) = false.
 * step 1: update xo memory from dypro structure
   cvi_bdt_adapter=>get_current_bp_data(
     EXPORTING
       i_table_name = table_name_lfa1
     IMPORTING
       e_data_table = tab_lfa1[]
   ).

   IF tab_lfa1[] IS INITIAL.
     IF lfa1 IS NOT INITIAL.
       lfa1-lifnr = cvi_bdt_adapter=>get_current_vendor( ).
       APPEND lfa1 TO  tab_lfa1.
     ENDIF.
   ELSE.
     READ TABLE tab_lfa1 ASSIGNING <fs_lfa1> INDEX 1.
     <fs_lfa1>-gbort = lfa1-gbort.
     <fs_lfa1>-gbdat = lfa1-gbdat.
   ENDIF.

   cvi_bdt_adapter=>data_pai(
     i_table_name = table_name_lfa1
     i_data_new   = tab_lfa1[]
     i_validate   = false
   ).
 ENDFUNCTION.
  FUNCTION zfun1293_n.
 *"----------------------------------------------------------------------
 *"*"本地接口:EVENT DSAVB函数-数据保存
 *"----------------------------------------------------------------------

   cl_md_bp_maintain=>maintain(
     EXPORTING
       i_data = VALUE cvis_ei_extern_t( ( partner-header-object_instance-bpartner = but000-partner
                                                         partner-header-object_instance-bpartnerguid =  but000-partner_guid
                                                         partner-header-object_task    = 'U'
                                                         vendor-header-object_instance-lifnr = lfa1-lifnr
                                                         vendor-header-object_task    = 'U'
                                                         vendor-central_data-central-data-gbort = lfa1-gbort
                                                         vendor-central_data-central-data-gbdat = lfa1-gbdat
                                                         vendor-central_data-central-datax-gbort = 'X'
                                                         vendor-central_data-central-datax-gbdat = 'X' )  )
    i_test_run = abap_false ) .
 ENDFUNCTION.  EVENT ISDAT函数-初始化
FUNCTION zfun1294_n.
 *"----------------------------------------------------------------------
 *"*"本地接口: EVENT ISDAT函数-初始化
 *"----------------------------------------------------------------------
   CALL FUNCTION 'CVIV_BUPA_LFA1_GET'
     IMPORTING
       e_lfa1 = gs_lfa1.
 *     E_DATA     =
 *  CALL FUNCTION 'BUP_BUPA_BUT000_GET'
 *    IMPORTING
 *     e_but000   = gs_lfa1.
   lfa1-gbort     = gs_lfa1-gbort.
   lfa1-gbdat     = gs_lfa1-gbdat.
 ENDFUNCTION.EVENT XCHNG函数-检查数据是否更改
FUNCTION zfun1295_n.
 *"----------------------------------------------------------------------
 *"*"本地接口:EVENT XCHNG函数-检查数据是否更改
 *"  EXPORTING
 *"     REFERENCE(E_XCHNG) TYPE  BOOLE_D
 *"----------------------------------------------------------------------
   IF  lfa1-gbort     NE  gs_lfa1-gbort OR
        lfa1-gbdat    NE  gs_lfa1-gbdat.
     e_xchng = 'X'.
   ENDIF.


 ENDFUNCTION.

配置:

在供应商角色的一般视图-税务数据标签页上维护下述两个字段(如下图)。

1: BP菜单TCODE:  BUPT

2:   创建应用程序:BUS1 ,输入程序名:ZAPP

vfp追加字段 vfp增加字段的命令_字段_02

 

vfp追加字段 vfp增加字段的命令_数据库_03

 

3: 创建控制-数据集 执行:BUS23,新建数据集:ZAPPDT

vfp追加字段 vfp增加字段的命令_java_04

 

4: 创建屏幕布局-字段组 执行:屏幕布局->BUS2,新增字段组:702

vfp追加字段 vfp增加字段的命令_servlet_05

 

vfp追加字段 vfp增加字段的命令_java_06

 

         

5:创建视图 执行:屏幕布局->BUS3,新增视图:ZAPPV 

应用程序:ZAPP

数据集:ZAPPDT

程序名:SAPLZFG_MM0770_N

屏幕:9001

功能模块-输入前:ZFUN1291_N1

功能模块-输入后:ZFUN1292_N1

 

vfp追加字段 vfp增加字段的命令_vfp追加字段_07

 

 

vfp追加字段 vfp增加字段的命令_java_08

 分配字段组

vfp追加字段 vfp增加字段的命令_数据库_09

6: 创建部分

进入BUS4,新建,创建一个部分,并给 部分:zappse  分配视图 zappv

 

vfp追加字段 vfp增加字段的命令_java_10

 

vfp追加字段 vfp增加字段的命令_vfp追加字段_11

 7:创建屏幕

进入BUS5,新建,创建一个屏幕,并在屏幕里把部分维护上

vfp追加字段 vfp增加字段的命令_servlet_12

 

vfp追加字段 vfp增加字段的命令_vfp追加字段_13

 

8 创建屏幕顺序

进入BUS6,新建,创建一个屏幕顺序:ZAPPSQ 

vfp追加字段 vfp增加字段的命令_java_14

分配屏幕给屏幕顺序

vfp追加字段 vfp增加字段的命令_字段_15

 创建屏幕顺序类别 ZAPPSC

vfp追加字段 vfp增加字段的命令_java_16

 

vfp追加字段 vfp增加字段的命令_字段_17

 同时在BUP001里再维护一下刚才创建的屏幕顺序

 

vfp追加字段 vfp增加字段的命令_servlet_18

 

9:修改业务伙伴视图,执行:可分割->BUSD

vfp追加字段 vfp增加字段的命令_java_19

给视图分配数据集和应用程序, 

选中:FLVN00(业务伙伴角色,也就是公司视图),FLVN01是采购视图

vfp追加字段 vfp增加字段的命令_java_20

 

双击 数据集 ,添加视图数据集 ZAPPDT

vfp追加字段 vfp增加字段的命令_字段_21

 

双击 调用应用程序,添加ZAPP

 

vfp追加字段 vfp增加字段的命令_servlet_22

 

 8:将函数和应用程序分配给对应事件:  ISDAT XCHNG  DSAVB

  执行操作:事件->BUS7 

1 在ISDAT事件中增加“项目” 9000010 功能模块名称 ZFUN1294_N1 调用 X 应用程序 ZAPP

vfp追加字段 vfp增加字段的命令_vfp追加字段_23

 

2 在XCHNG事件中增加“项目” 9000010 功能模块名称 ZFUN1295_N1 调用 X 应用程序 ZAPP

vfp追加字段 vfp增加字段的命令_字段_24

 

3 在DSAVB事件中增加“项目” 9000010 功能模块名称 ZFUN1293_N1 调用 X 应用程序 ZAPP

vfp追加字段 vfp增加字段的命令_vfp追加字段_25

 

vfp追加字段 vfp增加字段的命令_数据库_26

vfp追加字段 vfp增加字段的命令_vfp追加字段_27