BP 屏幕增强

1、 SE11  BUT000 表增强 CI_EEW_BUT000 , CI_EEW_BUT000_X

2、 再创建增强结构ZSBUT000_CUST (备用),该结构再DSAVB事件中使用

 

 

 

 

3、 创建函数组ZSD_BP ,增强相关的所有内容都需要放在此函数组中

 

4、 在ZSD_BP的Include top中定义如下变量:这些变量会在后续的函数中使用到

 

 

 

 

 

TABLES:
  BUT000.
CONSTANTS:
  TABLE_NAME_BUT000 TYPE FSBP_TABLE_NAME VALUE 'BUT000',
  FALSE             TYPE BOOLE-BOOLE     VALUE ' '.
DATA:
  GS_BUT000 TYPE BUT000.

  5、 创建屏幕9000,屏幕字段从表BUT000中生成 BUT000-XXXXX

 

 

 

 

 

 6、进行屏幕增强配置,进入TCODE :BUPT

 

7、 创建应用程序 BUS1

 

 

 

 

 

8、 创建数据集 BUS23

 

 

 

 

 

 

 9、创建字段组 BUS2

 

 

 

 

配置字段组对应的字段

 

 

10、在函数组ZSD_BP中创建两个函数(无输入输出参数):

 

YSD_BUT000_PBO;

YSD_BUT000_PAI;

 

FUNCTION YSD_BUT000_PBO.
*"------------------------------------------------------------------
*"*"Local Interface:
*"------------------------------------------------------------------
  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 YSD_BUT000_PAI.
*"------------------------------------------------------------------
*"*"Local Interface:
*"------------------------------------------------------------------
 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>-YD_CUSID        = gs_but000-YD_CUSID       .
     <but000>-YD_USSICCODE    = gs_but000-YD_USSICCODE   .
     <but000>-YD_CUSEMPLOYEE  = gs_but000-YD_CUSEMPLOYEE .
     <but000>-YD_CUSHIERARCHY = gs_but000-YD_CUSHIERARCHY.
     <but000>-YD_ANTURNOVER   = gs_but000-YD_ANTURNOVER  .
     <but000>-YD_USSICDESC    = gs_but000-YD_USSICDESC   .
     <but000>-YD_CUSNATDUNS   = gs_but000-YD_CUSNATDUNS  .
     <but000>-YD_CUSWWDUNS    = gs_but000-YD_CUSWWDUNS   .
     <but000>-YGMAID          = gs_but000-YGMAID         .
     <but000>-YENAME1         = gs_but000-YENAME1        .
     <but000>-YENAME2         = gs_but000-YENAME2        .
     <but000>-YEADSTR2        = gs_but000-YEADSTR2       .
     <but000>-YEADSTREET      = gs_but000-YEADSTREET     .
     <but000>-YEADHSNM        = gs_but000-YEADHSNM       .
     <but000>-YEADPSTCD       = gs_but000-YEADPSTCD      .
     <but000>-YEADCITY        = gs_but000-YEADCITY       .
     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.

  11、创建视图BUS3

 

将程序名、屏幕号、PBO、PAI函数分配给视图

 

 

 

 

 

 12、创建部分BUS4

 

 

 

 

 

13、 创建屏幕BUS5

 

 

 

 

 

 

 14、创建屏幕顺序BUS6

 

 

 

 

 15、 分配屏幕给屏幕顺序

 

 16、定义屏幕顺序种类

 

 

 

 17、对标准屏幕顺序分配自定义屏幕

 

 

 

 18、业务伙伴视图BUSD

 

 

选择要分配给的视图例如:

 

 

 

 

分配调用应用

 

 

 

 

配置完成目前状态BP界面可以看到页签,但是无法保存数据,需要定义事件

19、 定义事件

 

 

在函数组ZSD_BP中定义三个函数

 

1、ZFI_BUT000_EVENT_DSAVB 无传入传出参数,参数已经在top里面定义好了

FUNCTION ZFI_BUT000_EVENT_DSAVB.
*"------------------------------------------------------------------
*"*"Local Interface:
*"------------------------------------------------------------------
  DATA:LS_BUT000 TYPE BUT000.
  LS_BUT000 = BUT000.
  MOVE-CORRESPONDING GS_BUT000 TO BUT000.
  BUT000-YD_CUSID        = LS_BUT000-YD_CUSID       .
  BUT000-YD_USSICCODE    = LS_BUT000-YD_USSICCODE   .
  BUT000-YD_CUSEMPLOYEE  = LS_BUT000-YD_CUSEMPLOYEE .
  BUT000-YD_CUSHIERARCHY = LS_BUT000-YD_CUSHIERARCHY.
  BUT000-YD_ANTURNOVER   = LS_BUT000-YD_ANTURNOVER  .
  BUT000-YD_USSICDESC    = LS_BUT000-YD_USSICDESC   .
  BUT000-YD_CUSNATDUNS   = LS_BUT000-YD_CUSNATDUNS  .
  BUT000-YD_CUSWWDUNS    = LS_BUT000-YD_CUSWWDUNS   .
  BUT000-YGMAID          = LS_BUT000-YGMAID         .
  BUT000-YENAME1         = LS_BUT000-YENAME1        .
  BUT000-YENAME2         = LS_BUT000-YENAME2        .
  BUT000-YEADSTR2        = LS_BUT000-YEADSTR2       .
  BUT000-YEADSTREET      = LS_BUT000-YEADSTREET     .
  BUT000-YEADHSNM        = LS_BUT000-YEADHSNM       .
  BUT000-YEADPSTCD       = LS_BUT000-YEADPSTCD      .
  BUT000-YEADCITY        = LS_BUT000-YEADCITY       .
  CALL FUNCTION 'BUP_BUPA_BUT000_COLLECT'
    EXPORTING
      i_subname             = 'YSBUT00_CUST'
      i_but000              = BUT000
*     I_ALL_INTERVALS       = ' '
            .
ENDFUNCTION.

2、ZFI_BUT000_EVENT_ISDAT 无传入传出参数

 

FUNCTION ZFI_BUT000_EVENT_ISDAT.
*"------------------------------------------------------------------
*"*"Local Interface:
*"------------------------------------------------------------------

CALL FUNCTION 'BUP_BUPA_BUT000_GET'
 IMPORTING
   E_BUT000            = GS_BUT000
          .

  BUT000-YD_CUSID        = GS_BUT000-YD_CUSID       .
  BUT000-YD_USSICCODE    = GS_BUT000-YD_USSICCODE   .
  BUT000-YD_CUSEMPLOYEE  = GS_BUT000-YD_CUSEMPLOYEE .
  BUT000-YD_CUSHIERARCHY = GS_BUT000-YD_CUSHIERARCHY.
  BUT000-YD_ANTURNOVER   = GS_BUT000-YD_ANTURNOVER  .
  BUT000-YD_USSICDESC    = GS_BUT000-YD_USSICDESC   .
  BUT000-YD_CUSNATDUNS   = GS_BUT000-YD_CUSNATDUNS  .
  BUT000-YD_CUSWWDUNS    = GS_BUT000-YD_CUSWWDUNS   .
  BUT000-YGMAID          = GS_BUT000-YGMAID         .
  BUT000-YENAME1         = GS_BUT000-YENAME1        .
  BUT000-YENAME2         = GS_BUT000-YENAME2        .
  BUT000-YEADSTR2        = GS_BUT000-YEADSTR2       .
  BUT000-YEADSTREET      = GS_BUT000-YEADSTREET     .
  BUT000-YEADHSNM        = GS_BUT000-YEADHSNM       .
  BUT000-YEADPSTCD       = GS_BUT000-YEADPSTCD      .
  BUT000-YEADCITY        = GS_BUT000-YEADCITY       .

ENDFUNCTION.

3、ZFI_BUT000_EVENT_XCHNG 有传出参数 E_XCHNG        LIKE     BUS000FLDS-XCHNG

  

 

 

FUNCTION ZFI_BUT000_EVENT_XCHNG.
*"------------------------------------------------------------------
*"*"Local Interface:
*"  EXPORTING
*"     VALUE(E_XCHNG) LIKE  BUS000FLDS-XCHNG
*"------------------------------------------------------------------
IF
  GS_BUT000-YD_CUSID        NE BUT000-YD_CUSID        OR
  GS_BUT000-YD_USSICCODE    NE BUT000-YD_USSICCODE    OR
  GS_BUT000-YD_CUSEMPLOYEE  NE BUT000-YD_CUSEMPLOYEE  OR
  GS_BUT000-YD_CUSHIERARCHY NE BUT000-YD_CUSHIERARCHY OR
  GS_BUT000-YD_ANTURNOVER   NE BUT000-YD_ANTURNOVER   OR
  GS_BUT000-YD_USSICDESC    NE BUT000-YD_USSICDESC    OR
  GS_BUT000-YD_CUSNATDUNS   NE BUT000-YD_CUSNATDUNS   OR
  GS_BUT000-YD_CUSWWDUNS    NE BUT000-YD_CUSWWDUNS    OR
  GS_BUT000-YGMAID          NE BUT000-YGMAID          OR
  GS_BUT000-YENAME1         NE BUT000-YENAME1         OR
  GS_BUT000-YENAME2         NE BUT000-YENAME2         OR
  GS_BUT000-YEADSTR2        NE BUT000-YEADSTR2        OR
  GS_BUT000-YEADSTREET      NE BUT000-YEADSTREET      OR
  GS_BUT000-YEADHSNM        NE BUT000-YEADHSNM        OR
  GS_BUT000-YEADPSTCD       NE BUT000-YEADPSTCD       OR
  GS_BUT000-YEADCITY        NE BUT000-YEADCITY        .

  E_XCHNG = 'X'.
ENDIF.
ENDFUNCTION.

  

20、 将创建好的函数分配给对应的事件BUS7

 

 

 

 

 

到此的话页签增强已经结束

 

21、 接着我们将添加BP的interfance效果图如下

 

22、在新界面(TCODE:BUS_HDRID)中增加一列

 

 23、 同时在SM30(V_TBZJ1C)中去激活BP的对话框顺序

 

 

同时在SM30(V_TBZJ1)

 

 

 24、 在业务伙伴视图 BUSD中维护:屏幕顺序 和 子标题ID

 

 由于是自定义字段,现在HANA更新自定义字段不会更新到KNA1表,所以需要写增强BADI

SE19 继承 PARTNER_UPDATE

 

 

  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的时候如何处理

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

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2020-07-22 17:55  TorranceZhao  阅读(896)  评论(0)    收藏  举报

导航