需求是这样的,用户在抬头输入的付款条件在自建表有维护,就将行项目中预付定金类别强制为V类型(自愿预付款),并置灰,禁止用户编辑。
首先想到的是二代增强:
这里面的出口基本上都试了一下,发现都接收不到预付定金类别这个字段值,所以就没办法通过这些出口去修改该字段值。
下面是正确的思路:
去BADI:ME_PROCESS_PO_CUST中去实施PROCESS_ITEM方法,这个方法中就可以获取到抬头和行项目值了
设置字段值:
METHOD if_ex_me_process_po_cust~process_item.
DATA: l_rec_mepoheader TYPE mepoheader,
l_rec_mepoitem TYPE mepoitem,
l_tab_customer TYPE TABLE OF mepoitem,
l_tab_zterm TYPE TABLE OF zmmt0004.
l_rec_mepoheader = im_item->get_header( )->get_data( ).
l_rec_mepoitem = im_item->get_data( ).
SELECT * FROM zmmt0004 INTO TABLE l_tab_zterm WHERE zterm = l_rec_mepoheader-zterm
AND active = 'X'.
IF l_tab_zterm IS NOT INITIAL.
l_rec_mepoitem-dptyp = 'V'.
im_item->set_data( l_rec_mepoitem ).
ENDIF.
ENDMETHOD.
置灰:先去类型组MMMFD中找到该字段对应的常量编号
再去函数模块:MEPOBADI_FS_ITEM,做隐式增强
ENHANCEMENT 1 ZMME0002. "active version
DATA: l_rec_mmpur_fs type mmpur_fs.
SELECT COUNT(*)
FROM zmmt0004
WHERE zterm = @ls_me_header-zterm
AND active = 'X'.
IF sy-subrc = 0 AND
ls_item_data-dptyp = 'V'.
READ TABLE ch_fieldselection ASSIGNING FIELD-SYMBOL(<g_fs_rec_ch>) WITH KEY metafield = 4715. "预付定金类别不可输入
IF sy-subrc = 0.
<g_fs_rec_ch>-fieldstatus = '*'."灰色不可编辑
ENDIF.
ENDIF.
ENDENHANCEMENT.
成功后,前台效果如下: