BP屏幕增强
一、项目需求
-
需要在业务伙伴角色ZFLV01和下,供应商:文本右边添加一个附加属性页签。
二、实现方法
-
首先需要在表BUT000中找到结构CI_EEW_BUT000和CI_EEW_BUT000_X中添加增强字段。
-
然后在se11中创建一个对应的结构ZSBP_001,在后续事件中可能会用到
-
然后创建一个函数组ZFG_BP,首先在包含LZFG_BPTOP中定义全局变量
TABLES: BUT000. CONSTANTS: TABLE_NAME_BUT000 TYPE FSBP_TABLE_NAME VALUE 'BUT000', FALSE TYPE BOOLE-BOOLE VALUE ''. DATA: GS_BUT000 TYPE BUT000.
-
创建子屏幕9001,并将字段编辑在屏幕中,如图,其中表单一定要是BUT000-XXX。
-
实现屏幕中的BPO和BPI。
-
然后创建事件函数
-
事件1:ISDAT 读取数据 (所有人应用程序)
FUNCTION ZFM_BP_01_ISDAT. *"---------------------------------------------------------------------- *"*"本地接口: *"---------------------------------------------------------------------- DATA: LS_BP_001 TYPE ZSBP_001. CALL FUNCTION 'BUP_BUPA_BUT000_GET' IMPORTING E_BUT000 = GS_BUT000. MOVE-CORRESPONDING GS_BUT000 TO LS_BP_001. MOVE-CORRESPONDING LS_BP_001 TO BUT000. ENDFUNCTION.
-
事件2:DSAVB 收集数据(所有人应用程序)
FUNCTION ZFM_BP_01_DSAVE. *"---------------------------------------------------------------------- *"*"本地接口: *"---------------------------------------------------------------------- DATA: LS_BP_001 TYPE ZSBP_001. MOVE-CORRESPONDING BUT000 TO LS_BP_001. MOVE-CORRESPONDING GS_BUT000 TO BUT000. MOVE-CORRESPONDING LS_BP_001 TO BUT000. CALL FUNCTION 'BUP_BUPA_BUT000_COLLECT' EXPORTING I_SUBNAME = 'ZSBP_001' I_BUT000 = BUT000 * I_ALL_INTERVALS = ' ' . ENDFUNCTION.
-
事件3:XCHNG 检查数据是否已更改
FUNCTION ZFM_BP_01_XCHNG. *"---------------------------------------------------------------------- *"*"本地接口: *" EXPORTING *" REFERENCE(E_XCHNG) TYPE BOOLE_D *" E_XCHNG TYPE BOOLE_D 域BOOLE的数据要素: 真 (='X'), 假 (=' ') *"---------------------------------------------------------------------- DATA: LS_BP_001_NEW TYPE ZSBP_001. DATA: LS_BP_001_OLD TYPE ZSBP_001. MOVE-CORRESPONDING GS_BUT000 TO LS_BP_001_OLD. MOVE-CORRESPONDING BUT000 TO LS_BP_001_NEW. IF LS_BP_001_NEW NE LS_BP_001_OLD. E_XCHNG = 'X'. ENDIF. ENDFUNCTION.
-
创建PBO函数
FUNCTION ZFM_BP_BUT000_01_PBO. *"---------------------------------------------------------------------- *"*"本地接口: *"---------------------------------------------------------------------- DATA:LT_BUT000 TYPE TABLE OF BUT000. * step 1: request data from xo for dynpro structure CVI_BDT_ADAPTER=>DATA_PBO( EXPORTING I_TABLE_NAME = TABLE_NAME_BUT000 IMPORTING E_DATA_TABLE = LT_BUT000[] ). IF LT_BUT000[] IS INITIAL. CLEAR GS_BUT000. ELSE. READ TABLE LT_BUT000 INTO GS_BUT000 INDEX 1. ENDIF. ENDFUNCTION.
-
创建PAI函数
FUNCTION ZFM_BP_BUT000_01_PAI. *"---------------------------------------------------------------------- *"*"本地接口: *"---------------------------------------------------------------------- DATA:LT_BUT000 TYPE TABLE OF BUT000. FIELD-SYMBOLS:<BUT000> LIKE LINE OF LT_BUT000. DATA: LS_BP_001 TYPE ZSBP_001. 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. MOVE-CORRESPONDING GS_BUT000 TO LS_BP_001. MOVE-CORRESPONDING LS_BP_001 TO <BUT000>. ENDIF. CVI_BDT_ADAPTER=>DATA_PAI( I_TABLE_NAME = TABLE_NAME_BUT000 I_DATA_NEW = LT_BUT000[] I_VALIDATE = FALSE ). ENDFUNCTION.
-
三、BP配置
-
BDT事务码:BUPT
-
首先创建应用程序,双击BUS1进入后,建立新条目。
-
然后创建数据集,双击BUS23,进入后新建条目
-
创建字段组,双击BUS2后,建立新条目。然后建立字段组和字段
-
创建视图,双击BUS3后,建立新条目。子屏幕名可以通过执行子屏幕获得。然后将前面创建的字段组分配给视图。
-
创建部分,双击BUS4后,建立新条目。然后建视图分配给部分。
-
创建屏幕,双击BUS5后,建立新条目。然后将部分分配给屏幕。
-
创建屏幕顺序,双击BUS6后,建立创建屏幕顺序。然后将屏幕分配给屏幕顺序,还需要将自定义屏幕分配给标准屏幕顺序 BUP001,创建顺序种类,将屏幕顺序分配给屏幕顺序种类。
-
创建业务伙伴视图,双击BUSD,然后新建业务伙伴视图,然后分配数据集,然后分配应用程序
-
分配事件函数,双击BUS7,创建事件,然后分配功能模块 ,并且将ISDAT和XCHNG都分配函数
-
将视图添加到对应的伙伴角色上
-
SPRO->跨应用组件->SAP业务伙伴->业务合作伙伴->基本设置->商业伙伴角色->定义业务伙伴角色
-
定义角色:
-
找到对应的角色分组,将新建的BP角色分配给角色分组
-
-
效果:TJX1,TJ00000011