导语:最近收到了BP需要增加页面签名,找到一些信息,找到BP增强页签真的很麻烦。让我分享一下我梳理出来的。
??【增强记录清单…】
需求:
需要在供应商界面添加一个页签,以维护增强字段,效果如下。
实现过程:
实现整体增强实际上有三个步骤: 一、增强数据库表 二、创建函数组 三、配置BUPT 但是在配置BUPT很麻烦。让我们详细谈谈
一、增强数据库表
根据SAP在BUT000预留的结构【CI_EEW_BUT在000中,添加一组字段。
二、创建函数组
创建一个空函数组,我在这里叫它【ZFGMM_03在整个过程中有几个函数存储在这里。
TABLES : but000. CONSTANTS : table_name_but000 TYPE tabname VALUE 'BUT000'. CONSTANTS : false TYPE boole-boole VALUE ' '. DATA : gs_but000 TYPE but000.
我习惯于从9001开始,把增强的字段放在屏幕上,这里的字段要从数据库表中抓取。
这里的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的功能界面,接下来的配置会非常多,主要用到下图圈出来的事务码们。
进入BUS1,新建,创建一个新的应用程序,这里的应用程序要注意,一定要把【活动】勾选上
进入BUS23,新建,创建一个新的数据集。
进入BUS2,新建,创建一个字段组,这里的编号好像没有什么规律,我就给了一个600。
点击字段,把需要增强到屏幕上的字段,加入到600这个字段组下。
进入BUS3,新建,创建视图,这里要重点说一下 1>描述:这里的描述与屏幕上的框描述一致 2>应用程序:使用刚才新建的应用程序 3>数据集:使用刚才新建的数据集 4>程序名:填写函数组对应的程序名 5>屏幕号:填写刚才创建的屏幕编号 6>输出前:在函数组里新建一个函数,代码如下 7>输出后:在函数组里新建一个函数,代码如下
函数:【】 不需要出入参,代码如下
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(
EXPORTING
i_table_name = table_name_but000
IMPORTING
e_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.
函数:【】 不需要出入参,代码如下
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 structure
cvi_bdt_adapter=>get_current_bp_data(
EXPORTING
i_table_name = table_name_but000
IMPORTING
e_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_but000
i_data_new = lt_but000[]
i_validate = false
).
ENDFUNCTION.
给视图分配字段组
进入BUS4,新建,创建一个部分,并给部分分配视图
进入BUS5,新建,创建一个屏幕,并在屏幕里把部分维护上 由于这里我想给供应商页签增加屏幕,所以第一个选择了【CVIV00】加上创建的【ZBUTAD】,这个根据需求来定。
进入BUS6,新建,创建一个屏幕顺序,并在屏幕顺序->屏幕里维护一下项目,这里的项目号我也是找了一个没有被使用的。
再创建一个屏幕顺序种类,以及屏幕顺序
同时在BUP001里再维护一下刚才创建的屏幕顺序
这里决定了,你的屏幕是否能显示出来
一般情况下都是在这四个里按需维护,事务码【BUSD】
进入BUS7,按一下步骤进行事件维护,函数代码放在图片后面了。
函数:【ZFG_BUT000_EVENT_ISDAT】
FUNCTION zfg_but000_event_isdat.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
CALL FUNCTION 'BUP_BUPA_BUT000_GET'
IMPORTING
e_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'
EXPORTING
i_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.