在ME21n中修改EKPO字段-ME_PROCESS_PO_CUST BADI

时间:2018-10-18 15:21:22

标签: sap exit abap purchase-order

我试图在保存时修改ME21n中WEORA和BSTAE字段的值。我已经在CHECK方法中用ME_PROCESS_PO_CUST BADI编写了代码。下面是我的代码。

DATA: lt_data TYPE PURCHASE_ORDER_ITEMS,
      lo_header TYPE REF TO CL_PO_HEADER_HANDLE_MM,
      lt_item TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM,
      ls_get_item TYPE MEPOITEM,
      ls_set_item TYPE MEPOITEM,
      lv_firewall TYPE abap_bool.

  FIELD-SYMBOLS: <fs_data> TYPE PURCHASE_ORDER_ITEM.

  lt_data = im_header->get_items( ).

  READ TABLE lt_data ASSIGNING <fs_data> INDEX 1.
  IF <fs_data> IS ASSIGNED.
    lt_item = <fs_data>-item.
  ENDIF.

  ls_get_item = lt_item->get_data( ).

  ls_get_item-bstae = '0004'.
  ls_get_item-weora = abap_true.


  CALL METHOD lt_item->set_data
    EXPORTING
      im_data = ls_get_item.

我尝试调试它,但是在set_data方法中有一个条件:

检查l_parent-> my_ibs_firewall_on EQ mmpur_yes或         l_parent-> my_cust_firewall_on均衡器mmpur_yes。

bot的值是初始值,因此不会遍历整个set_data代码。但是我也尝试将其中之一强制为abap_true(以使其通过其余代码),但是更新字段也不起作用。

该BADI似乎无法正常工作,但我进行了研究,其中大多数人都使用此BADI来更新ME21n中的EKPO字段。我的代码有问题吗?保存后还有其他出口可用于更新事务代码ME21N中的字段WEORA和BSTAE吗?

2 个答案:

答案 0 :(得分:0)

您必须调用方法SET_DATAX,然后调用SET_DATA。   SET_DATAX,您将X标记为要更新值的字段。

关于, 乌玛尔·阿卜杜拉

答案 1 :(得分:0)

您应该使用此BAdi中的PROCESS_ITEM方法,this question中的代码对我来说是完美的,并更新了以下字段:

DATA: ls_mepoitem_set TYPE mepoitem.
FIELD-SYMBOLS: <fs_item> TYPE mepoitem.

DATA(ls_mepoitem) = im_item->get_data( ).

ls_mepoitem_set = ls_mepoitem.
ls_mepoitem_set-bstae = '0004'.
ls_mepoitem_set-weora = abap_true.
ASSIGN ls_mepoitem_set TO <fs_item>.
CALL METHOD im_item->set_data( EXPORTING im_data = <fs_item> ).