使采购申请BAPI实施中的行无效

时间:2014-06-13 00:36:00

标签: abap

我试图阻止用户通过BAdI实施保存采购申请,检查行和帐户。我抛出的错误消息并没有停止保存过程,我也找不到让线路无效的方法,就像我在PO中所做的那样。因此,可以保存包含错误数据的PR。

我扩展了采购申请BAdI并在IF_EX_ME_PROCESS_REQ_CUST中实施了ZCL_IM_EI_PROCESS_REQ_CUST。在方法PROCESS_ITEMPROCESS_ACCOUNT中,我可以访问帐户和项目上的多个导入。与PO不同,我无法找到使项目无效的方法。所使用的类都没有提供该功能。

我在BAPI中有权访问的PR项目对象是接口IF_PURCHASE_REQUISITION_ITEM,实现为函数池MEREQ中的本地类。此接口具有方法IS_VALID但不提供任何无效的内容,与具有INVALIDATE方法的PO项目界面相反。

修改

经过更多调试后,似乎失效是通过本地班级MY_STATE-BROKEN_RULES的成员MEREQ/LCL_REQ_ITEM完成的。知道我怎么能访问这个吗?

2 个答案:

答案 0 :(得分:1)

正如@vwegert建议的那样,诀窍是使用CHECK方法。它会在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类的{{1}}方法。这会使PR无效并触发您看到的带有标准错误的消息框。保存时,下图中的自定义错误消息。

enter image description here

答案 1 :(得分:0)

我已经在' PROCESS_HEADER'中使用MESSAGE 'My message' TYPE 'E'完成了该操作。方法

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.

希望它有所帮助。