供应商主数据屏幕增强

 场景:给供应商主数据增加分个按钮,实现自定义的其他的客制化数据如下截图,需要的BADI增强:

VENDOR_ADD_DATA_CS 和  VENDOR_ADD_DATA

 步骤如下:

1.在LFA1增加 zlfa1的结构

 2、进入事务代码SPRO,在中文环境下按照路径,后勤-常规->业务合作伙伴->供应商->控制->客户所有的主数据字段的采用,选择第一步“准备供应商主记录的自由修改增强“,添加一条记录到视图V_TSCGR_VENDOR中:

 创建一个新的页签功能码

 3.进入到SE19     VENDOR_ADD_DATA  创建实施

 找到如下的方法

 添加激活的屏幕组

 

method IF_EX_VENDOR_ADD_DATA~CHECK_ADD_ON_ACTIVE.

  CHECK i_screen_group = 'ZV'.
  e_add_on_active = 'X'.
endmethod.

 4、接下来继续SE18实现BADI vendor_add_data_cs ,这个才是这个屏幕增强的主体部分,和传统的屏幕增强方式不同(传统的屏幕增强例如采购订单的增强MM06E005),这里只提供了几个接口,真正的逻辑需要自己完全建立一个新的function group(这个function group和那些以X开头的增强函数组例如XM06是不一样的),将这些接口的参数对应的在函数组里面定义成一些全局变量,然后进行处理。

5.创建VENDOR_ADD_DATA_CS的实施,并且选择filter = ‘ZV’,先激活

 6.这时,需要我们创建的一个函数组来实现自定义屏幕的展示

 7.创建一个屏幕,然后在屏幕创建自己定义的屏幕上的数据展示

 8.给增强的方法添加要展示的屏幕信息

 

 9.在实现SET_DATA这个方法之前,我们要先建立一个函数,用于调用传值:ZE_VENDOR_DATA_READ

 

  CLEAR:g_activity,ls_lfa1,ls_zlfa1_fl.
  g_activity = i_activity.   "A–>DISPLAY;h–>CREATE;V–>CHANGE
*  lfa1-licensecate = i_tm_lfa1-licensecate.  "新件保修条款
*  lfa1-cashway = i_tm_lfa1-cashway.  "修后索赔条款
*  lfa1-companytype = i_tm_lfa1-companytype.  "Vendor Code

  MOVE-CORRESPONDING i_tm_lfa1 TO ls_lfa1.

  SELECT SINGLE * FROM zlfa1_fl INTO ls_zlfa1_fl WHERE lifnr = i_lifnr.

  SELECT * FROM zlfa1_fl INTO CORRESPONDING FIELDS OF TABLE it_fl WHERE lifnr = i_lifnr.
  LOOP AT it_fl.
    SELECT SINGLE zzgysdlx FROM zgysdl INTO it_fl-zzgysdl_txt WHERE zzgysdl = it_fl-zzgysdl.
    SELECT SINGLE zzgysxlx FROM zgysxl INTO it_fl-zzgysxl_txt WHERE zzgysxl = it_fl-zzgysxl.
    MODIFY it_fl.
  ENDLOOP.
  l_lifnr = i_lifnr.

data:g_ucomm type sy-ucomm.
DATA:g_activity TYPE aktyp.
*data:lfa1 type table of lfa1 with header line.
DATA:ls_zlfa1_fl TYPE zlfa1_fl,
     ls_lfa1 TYPE lfa1.
data:l_lifnr type lifnr.
DATA:BEGIN OF it_fl OCCURS 0.
        INCLUDE STRUCTURE zlfa1_fl.
DATA:zzgysdl_txt(30),
     zzgysxl_txt(30),
     box(1).
DATA:END OF it_fl.

10.最后我们还需要控制屏幕的输入逻辑,这需要我们在PBO里面实现处理:

 具体的增强的屏幕里面的程序代码(table control 和部分的PBO和PAI)就不粘贴了

 11.到方法中写代码

 

  data:i_tm type zlfa1.

  move-corresponding i_lfa1 to i_tm.

  if flt_val = 'ZV'.
    CALL FUNCTION 'ZE_VENDOR_DATA_READ'
      EXPORTING
        I_ACTIVITY = i_activity
        I_TM_LFA1  = i_tm
        i_lifnr    = i_lfa1-lifnr.
  endif.

 12.在实现GET_DATA这个方法之前,我们亦需先创建如下这个函数:ZE_VENDOR_DATA_SAVE

 

 

 

  DATA:wa_fl LIKE zlfa1_fl.
  MOVE-CORRESPONDING ls_lfa1 TO e_tm.

  DELETE FROM zlfa1_fl WHERE lifnr = i_lifnr.
  MODIFY zlfa1_fl FROM TABLE it_fl.

 13.接下来,实现接口中的GET_DATA方法:

  data:e_tm type zlfa1.
  if flt_val = 'ZV'.
    CALL FUNCTION 'ZE_VENDOR_DATA_SAVE'
      EXPORTING
        i_lifnr = s_lfa1-lifnr
      IMPORTING
        E_TM    = e_tm.

    move-corresponding e_tm to s_lfa1.

  endif.

将上述的过程全部激活,就OK了

猜你喜欢

转载自blog.csdn.net/qq_16116183/article/details/82347678