通过ME_PROCESS_REQ_CUST使采购请购单的一行无效。

问题描述 投票:0回答:2

我试图阻止用户通过BAdI实现保存采购请购单,检查行和账户。我抛出的错误信息并没有停止保存过程,而且我找不到一种方法来使行无效,就像在PO中一样。所以,可以保存一个包含错误数据的PR。

我扩展了采购申购BAdI,并实现了 IF_EX_ME_PROCESS_REQ_CUSTZCL_IM_EI_PROCESS_REQ_CUST. 在方法上 PROCESS_ITEMPROCESS_ACCOUNT 我可以在账户和项目上访问几个进口。但与PO不同的是,我找不到使一个项目无效的方法。所用的类都没有提供这个功能。

在BAPI中,我可以访问的PR项目对象是属于接口 IF_PURCHASE_REQUISITION_ITEM,作为一个本地类在函数pool中实现 MEREQ. 这个接口有一个方法 IS_VALID 但并不提供任何无效的东西,相比之下,PO项目接口有一个 INVALIDATE 方法。

编辑

经过更多的调试,似乎是通过成员的失效 MY_STATE-BROKEN_RULES 本地班 MEREQ/LCL_REQ_ITEM. 任何想法,我可以访问这个?

sap abap badi
2个回答
1
投票

正如@vwegert所建议的那样,诀窍是使用了? CHECK 方法。它在PR的验证方法中被调用。

我的解决方案是在PR上添加一个成员属性 FAILED 类型 MMPUR_BOOL. 在我的所有其他方法中,我可以在失败时设置这个标志。

IF your condition fails
  me->failed = mmpur_yes.
ENDIF.

最后,我的 CHECK 方法只包含

ch_failed = me->failed.

ch_failed 被带回功能模块 MEREQBADI_CHECK 这又被用于 is_valid 方法的PR类。这将使PR无效,并触发你看到的标准错误的消息框。自定义错误信息在下图中,保存时。

enter image description here


0
投票

我使用了 MESSAGE 'My message' TYPE 'E' 方法中的'PROCESS_HEADER'。

METHOD IF_EX_ME_PROCESS_REQ_CUST~PROCESS_HEADER.
DATA : it_items        TYPE mmpur_requisition_items,
       wa_item         TYPE mmpur_requisition_item,
       wa_item_data    TYPE mereq_item,
       wa_header_data  type mereq_header.

    it_items = im_header->GET_ITEMS( ).      " Purchase requisition positions
    wa_header_data = im_header->GET_DATA( ). " Header info

    LOOP AT it_items INTO wa_item.                      
      CLEAR wa_item_data.  
      wa_item_data = wa_item-item->GET_DATA( ).

      IF wa_item_data-loekz IS NOT INITIAL.
        MESSAGE 'Raise error' TYPE 'E'.
      ENDIF.
    ENDLOOP.
ENDMETHOD.

希望能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.