BP 增强

发布时间 2023-05-29 16:03:11作者: 初入世俗

一、事务说明:

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