整个增强的实现其实就三个步骤:
一、增强数据库表
二、创建函数组
三、配置BUPT
第一次进BP,先执行: EVENT ISDAT >,PBO函数
每次回车,屏幕跳转,都执行EVENT DSAVB 函数-数据保存
1: 在CI_EEW_BUT000中加入需要增强的字段,
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
3: 创建控制-数据集 执行:BUS23,新建数据集:ZAPPDT
4: 创建屏幕布局-字段组 执行:屏幕布局->BUS2,新增字段组:702
5:创建视图 执行:屏幕布局->BUS3,新增视图:ZAPPV
应用程序:ZAPP
数据集:ZAPPDT
程序名:SAPLZFG_MM0770_N
屏幕:9001
功能模块-输入前:ZFUN1291_N1
功能模块-输入后:ZFUN1292_N1
分配字段组
6: 创建部分
进入BUS4,新建,创建一个部分,并给 部分:zappse 分配视图 zappv
7:创建屏幕
进入BUS5,新建,创建一个屏幕,并在屏幕里把部分维护上
8 创建屏幕顺序
进入BUS6,新建,创建一个屏幕顺序:ZAPPSQ
分配屏幕给屏幕顺序
创建屏幕顺序类别 ZAPPSC
同时在BUP001里再维护一下刚才创建的屏幕顺序
9:修改业务伙伴视图,执行:可分割->BUSD
给视图分配数据集和应用程序,
选中:FLVN00(业务伙伴角色,也就是公司视图),FLVN01是采购视图
双击 数据集 ,添加视图数据集 ZAPPDT
双击 调用应用程序,添加ZAPP
8:将函数和应用程序分配给对应事件: ISDAT XCHNG DSAVB
执行操作:事件->BUS7
1 在ISDAT事件中增加“项目” 9000010 功能模块名称 ZFUN1294_N1 调用 X 应用程序 ZAPP
2 在XCHNG事件中增加“项目” 9000010 功能模块名称 ZFUN1295_N1 调用 X 应用程序 ZAPP
3 在DSAVB事件中增加“项目” 9000010 功能模块名称 ZFUN1293_N1 调用 X 应用程序 ZAPP