BP 附加字段增强

整个增强的实现其实就三个步骤:
一、增强数据库表
二、创建函数组
三、配置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

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值