一、事务说明:
BUS1: 应用程序创建---
BUS23: 数据集创建----
BUS2:字段组创建----
BUS3:视图创建-----
BUS4:部分创建----
BUS5:屏幕创建----
BUS6:屏幕顺序(建立屏幕顺序)
BUS7: 事件处理(初始化,数据读取,数据准备,数据保存等)
BUSD:业务伙伴视图(绑定业务伙伴和应用程序,数据集,屏幕顺序关系)
二、示例:
增强实现标准版BUT000 增强和自定义表增强(数据保存自定义表),标准程序调用自定义程序子屏幕实现屏幕增强,本文示例,以函数组屏幕为例:
函数组:
屏幕9000:
逻辑流:
PBO:
PAI:
集成配置:
BUS1:
BUS23:
BUS2: 字段组
分配字段:
BUS3: 创建视图,分配字段组
屏幕PBO/PAI:
函数:ZMM_BUT000_PBO -- 数据读取
FUNCTION zmm_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.
函数模块:ZMM_BUT000_PAI --- 数据写入
FUNCTION zmm_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>-zbpmid = gs_but000-zbpmid.
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: 创建屏幕,分配部分
屏幕顺序处理:
出现多个页签
业务伙伴视图分配,选择的伙伴视图分配,本例子选择FLVN00
数据集分配:
应用程序分配:
配置完成目前状态BP界面可以看到页签,但是无法保存数据,需要定义事件
三、定义事件(BUS7)
函数模块:ZMM_BUT000_EVENT_DSAVB:
FUNCTION zmm_but000_event_dsavb .
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
*CALL FUNCTION 'BUP_BUPA_BUT000_GET'
* IMPORTING
* e_but000 = gs_but000
* .
but000-ztext = gs_but000-ztext.
CALL FUNCTION 'BUP_BUPA_BUT000_COLLECT'
EXPORTING
i_subname = 'ZSBUT00_CUST'
i_but000 = but000.
ENDFUNCTION.
函数模块:ZMM_BUT000_EVENT_ISDAT
FUNCTION ZMM_BUT000_EVENT_ISDAT .
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
CALL FUNCTION 'BUP_BUPA_BUT000_GET'
IMPORTING
e_but000 = gs_but000
.
but000-ztext = gs_but000-ztext.
ENDFUNCTION.
函数模块:ZMM_BUT000_EVENT_XCHNG
FUNCTION zmm_but000_event_xchng.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" REFERENCE(E_XCHNG) TYPE BOOLE_D
*"----------------------------------------------------------------------
IF gs_but000-ztext NE but000-ztext.
e_xchng = abap_true.
ENDIF.
ENDFUNCTION.
四、 接着我们将添加BP的interfance效果图如下
五、在新界面(TCODE:BUS_HDRID)中增加一列
同时在SM30(V_TBZJ1C)中去激活BP的对话框顺序
同时在SM30(V_TBZJ1)
六、 在业务伙伴视图 BUSD中维护:屏幕顺序 和 子标题ID
七、 由于是自定义字段,现在HANA更新自定义字段不会更新到KNA1表,所以需要写增强BADI
SE19 继承 PARTNER_UPDATE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
METHOD if_ex_partner_update~change_before_update. DATA lt_but000_o TYPE TABLE OF but000 . DATA lt_but000_n TYPE TABLE OF but000 . DATA ls_but000 TYPE but000 . CALL FUNCTION 'BUPA_GENERAL_CALLBACK' TABLES et_but000_old = lt_but000_o et_but000_new = lt_but000_n. IF lt_but000_n IS NOT INITIAL. LOOP AT lt_but000_n INTO ls_but000. ENDLOOP. ENDIF. SELECT partner_guid, customer INTO TABLE @DATA(lt_cvi_cust) FROM cvi_cust_link WHERE partner_guid = @ls_but000-partner_guid. SELECT * INTO TABLE @DATA(lt_kna1) FROM kna1 FOR ALL ENTRIES IN @lt_cvi_cust WHERE kunnr = @lt_cvi_cust-customer. READ TABLE lt_kna1 ASSIGNING FIELD-SYMBOL(<fs_kna1>) INDEX 1. IF sy-subrc = 0. <fs_kna1>-yd_cusid = ls_but000-yd_cusid . <fs_kna1>-yd_ussiccode = ls_but000-yd_ussiccode . <fs_kna1>-yd_cusemployee = ls_but000-yd_cusemployee . <fs_kna1>-yd_cushierarchy = ls_but000-yd_cushierarchy. <fs_kna1>-yd_anturnover = ls_but000-yd_anturnover . <fs_kna1>-yd_ussicdesc = ls_but000-yd_ussicdesc . <fs_kna1>-yd_cusnatduns = ls_but000-yd_cusnatduns . <fs_kna1>-yd_cuswwduns = ls_but000-yd_cuswwduns . <fs_kna1>-ygmaid = ls_but000-ygmaid . <fs_kna1>-yename1 = ls_but000-yename1 . <fs_kna1>-yename2 = ls_but000-yename2 . <fs_kna1>-yeadstr2 = ls_but000-yeadstr2 . <fs_kna1>-yeadstreet = ls_but000-yeadstreet . <fs_kna1>-yeadhsnm = ls_but000-yeadhsnm . <fs_kna1>-yeadpstcd = ls_but000-yeadpstcd . <fs_kna1>-yeadcity = ls_but000-yeadcity . * MODIFY kna1 FROM <fs_kna1> . CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL' EXPORTING i_kna1 = <fs_kna1> IMPORTING e_kunnr = <fs_kna1>-kunnr * TABLES * T_UPD_TXT = * EXCEPTIONS . ENDIF. ENDMETHOD. |
通过上面的增强去更新KNA1表
对于配置已经结束,接下来记录下调用BAPI创建BP的时候如何处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
FROM FM_CHANGE_EEW USING US_ALV01 TYPE TY_ALV01. DATA:LS_BUS000_EEW TYPE BUS000_EEW, LS_BUS000_EEW_X TYPE BUS000_EEW_X, LT_RETURN TYPE BUS_BAPIRET2_T. SELECT SINGLE PARTNER_GUID INTO LS_BUS000_EEW-PARTNR_GUID FROM BUT000 WHERE PARTNER = US_ALV01-PARTNER. CHECK SY-SUBRC = 0. LS_BUS000_EEW-ZVBUND = US_ALV01-VBUND. LS_BUS000_EEW_X-PARTNR_GUID = LS_BUS000_EEW_X-ZTEST = ‘X’. CALL FUNCTION ‘BUPA_CENTRAL_CI_CHANGE’ EXPORTING IS_BUS000_EEW = LS_BUS000_EEW IS_BUS000_EEW_X = LS_BUS000_EEW_X IMPORTING ET_RETURN = LT_RETURN. |
自定义字段在创建BP得同时能够更新KNA1表
SE18 CVI_CUSTOM_MAPPER