1

我正在尝试在保存时在 tcode 中修改 ,WEORABSTAEME21n。我已经在ME_PROCESS_PO_CUST BADI方法中编写了代码CHECK

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有一个条件:

CHECK l_parent->my_ibs_firewall_on  EQ mmpur_yes OR
      l_parent->my_cust_firewall_on EQ mmpur_yes.

两者的值都是初始的,因此它会中断并且不会转到其余代码。强制设置它们以true使所有代码执行,但字段的更新无论如何都不起作用。

似乎这个 BADI 不起作用,但我进行了研究,大多数人使用这个 BADI 来EKPO更新ME21n.

我的代码有问题吗?

保存时是否可以使用其他出口来更新字段WEORABSTAE事务代码ME21N

4

2 回答 2

0

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

问候, 奥马尔·阿卜杜拉

于 2018-10-29T07:25:38.803 回答
0

您应该使用PROCESS_ITEM此 BAdi 中的方法,此问题中的代码非常适合我并更新这些字段:

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> ).
于 2020-11-13T15:39:37.253 回答