导语:最近收到了BP的需求,要增加页签,找了一些资料,发现BP的增强页签可是真麻烦啊,下面把我梳理出来的分享一下。
👉【增强记录清单…】
需求:
需求是在供应商界面增加一个页签,用来维护增强字段,效果如下。
 
实现过程:
整个增强的实现其实就三个步骤:
 一、增强数据库表
 二、创建函数组
 三、配置BUPT
 但是在配置BUPT的时候很麻烦,下面我们详细说一下
一、增强数据库表
根据SAP在BUT000预留的结构【CI_EEW_BUT000】中,增加一组字段。
 
二、创建函数组
创建一个空的函数组,我这里名字叫【ZFGMM_03】,整个过程会有几个函数存放在这里的。
1、创建函数组

2、在TOP里增加定义
TABLES : but000.CONSTANTS : table_name_but000 TYPE tabname VALUE 'BUT000'.
CONSTANTS : false TYPE boole-boole VALUE ' '.DATA : gs_but000 TYPE but000.
 

 3、创建屏幕
我这里习惯用9001开头,把增强的字段放在屏幕上,这里的字段要从数据库表抓取。
 
 4、PBO及PAI事件
这里的PBO、PAI事件是固定的,代码如下。
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
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.
 

三、配置BUPT
事务码BUPT,进入BP的功能界面,接下来的配置会非常多,主要用到下图圈出来的事务码们。
 
 1、BUS1创建应用程序
进入BUS1,新建,创建一个新的应用程序,这里的应用程序要注意,一定要把【活动】勾选上
 
 2、创建数据集
进入BUS23,新建,创建一个新的数据集。
 
 3、创建字段组
进入BUS2,新建,创建一个字段组,这里的编号好像没有什么规律,我就给了一个600。

 点击字段,把需要增强到屏幕上的字段,加入到600这个字段组下。

 4、创建视图
进入BUS3,新建,创建视图,这里要重点说一下
 1>描述:这里的描述与屏幕上的框描述一致
 2>应用程序:使用刚才新建的应用程序
 3>数据集:使用刚才新建的数据集
 4>程序名:填写函数组对应的程序名
 5>屏幕号:填写刚才创建的屏幕编号
 6>输出前:在函数组里新建一个函数,代码如下
 7>输出后:在函数组里新建一个函数,代码如下

 函数:【ZFM_BUT000_PBO】 不需要出入参,代码如下
FUNCTION zfm_but000_pbo.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------DATA:lt_but000   TYPE TABLE OF but000.* step 1: request data from xo for dynpro structure"if gs_but000 is initial.cvi_bdt_adapter=>data_pbo(EXPORTINGi_table_name = table_name_but000IMPORTINGe_data_table = lt_but000[])."endif.IF lt_but000[] IS INITIAL.CLEAR gs_but000.ELSE.READ TABLE lt_but000 INTO gs_but000 INDEX 1.ENDIF.ENDFUNCTION.
 
函数:【ZFM_BUT000_PAI】 不需要出入参,代码如下
FUNCTION zfm_but000_pai.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------DATA:lt_but000            TYPE TABLE OF but000.FIELD-SYMBOLS: <but000>   LIKE LINE OF lt_but000.CHECK cvi_bdt_adapter=>is_direct_input_active( ) = false.
* step 1: update xo memory from dypro structurecvi_bdt_adapter=>get_current_bp_data(EXPORTINGi_table_name = table_name_but000IMPORTINGe_data_table = lt_but000[]).IF lt_but000[] IS INITIAL.IF gs_but000 IS NOT INITIAL.gs_but000-partner = cvi_bdt_adapter=>get_current_bp( ).APPEND gs_but000 TO lt_but000.ENDIF.ELSE.READ TABLE lt_but000 ASSIGNING <but000> INDEX 1.<but000>-zzczb    = gs_but000-zzczb.   "增强字段赋值<but000>-zfzr     = gs_but000-zfzr.<but000>-zdrrq    = gs_but000-zdrrq.<but000>-zgysyxq1 = gs_but000-zgysyxq1.<but000>-zgysyxq2 = gs_but000-zgysyxq2.<but000>-zgyssl   = gs_but000-zgyssl.<but000>-zsycplx  = gs_but000-zsycplx.<but000>-zgysdj   = gs_but000-zgysdj.ASSIGN gs_but000 TO <but000>.ENDIF.cvi_bdt_adapter=>data_pai(i_table_name = table_name_but000i_data_new   = lt_but000[]i_validate   = false).ENDFUNCTION.
 
给视图分配字段组
 
5、创建部分
进入BUS4,新建,创建一个部分,并给部分分配视图

 
 6、创建屏幕
进入BUS5,新建,创建一个屏幕,并在屏幕里把部分维护上
 
 由于这里我想给供应商页签增加屏幕,所以第一个选择了【CVIV00】加上创建的【ZBUTAD】,这个根据需求来定。
 
 7、创建屏幕顺序
进入BUS6,新建,创建一个屏幕顺序,并在屏幕顺序->屏幕里维护一下项目,这里的项目号我也是找了一个没有被使用的。

 
再创建一个屏幕顺序种类,以及屏幕顺序

 
 同时在BUP001里再维护一下刚才创建的屏幕顺序
 
8、业务伙伴视图
这里决定了,你的屏幕是否能显示出来
一般情况下都是在这四个里按需维护,事务码【BUSD】

 

 
9、定义事件
进入BUS7,按一下步骤进行事件维护,函数代码放在图片后面了。

 
 
 
函数:【ZFG_BUT000_EVENT_ISDAT】
FUNCTION zfg_but000_event_isdat.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------CALL FUNCTION 'BUP_BUPA_BUT000_GET'IMPORTINGe_but000 = gs_but000.but000-zzczb    = gs_but000-zzczb.   "增强字段赋值but000-zfzr     = gs_but000-zfzr.but000-zdrrq    = gs_but000-zdrrq.but000-zgysyxq1 = gs_but000-zgysyxq1.but000-zgysyxq2 = gs_but000-zgysyxq2.but000-zgyssl   = gs_but000-zgyssl.but000-zsycplx  = gs_but000-zsycplx.but000-zgysdj   = gs_but000-zgysdj.ENDFUNCTION.
 
函数:【ZFG_BUT000_EVENT_DSAVB】
FUNCTION zfg_but000_event_dsavb.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------DATA:ls_but000 TYPE but000.ls_but000 = but000.MOVE-CORRESPONDING gs_but000 TO but000.but000-zzczb    = ls_but000-zzczb.   "增强字段赋值but000-zfzr     = ls_but000-zfzr.but000-zdrrq    = ls_but000-zdrrq.but000-zgysyxq1 = ls_but000-zgysyxq1.but000-zgysyxq2 = ls_but000-zgysyxq2.but000-zgyssl   = ls_but000-zgyssl.but000-zsycplx  = ls_but000-zsycplx.but000-zgysdj   = ls_but000-zgysdj.CALL FUNCTION 'BUP_BUPA_BUT000_COLLECT'EXPORTINGi_subname = 'ZBUT000_APPEND_001'i_but000  = but000.ENDFUNCTION.
 
函数:【ZFG_BUT000_EVENT_XCHNG】
FUNCTION zfg_but000_event_xchng.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     REFERENCE(E_XCHNG) TYPE  BOOLE_D
*"----------------------------------------------------------------------IF but000-zzczb <> gs_but000-zzczb.e_xchng = 'X'.ENDIF.IF but000-zfzr <> gs_but000-zfzr.e_xchng = 'X'.ENDIF.IF but000-zdrrq <> gs_but000-zdrrq.e_xchng = 'X'.ENDIF.IF but000-zgysyxq1 <> gs_but000-zgysyxq1.e_xchng = 'X'.ENDIF.IF but000-zgysyxq2 <> gs_but000-zgysyxq2.e_xchng = 'X'.ENDIF.IF but000-zgyssl <> gs_but000-zgyssl.e_xchng = 'X'.ENDIF.IF but000-zsycplx <> gs_but000-zsycplx.e_xchng = 'X'.ENDIF.IF but000-zgysdj <> gs_but000-zgysdj.e_xchng = 'X'.ENDIF.ENDFUNCTION.
 
作者:小飞猪猪猪猪猪猪猪–CSDN


















