ABAP ME_PROCESS_PO_CUST消息异常

前言

业务顾问要求根据物料组校验增强字段必填,一开始放在行项目的IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM里面做校验,但是如果只修改增强字段,则无法进入该函数
所以最后放到IF_EX_ME_PROCESS_PO_CUST~CHECK里面做检查

问题

使用标准示例代码的消息例程向前台的用户报错,如果第一次检查报错之后,用户第二次将问题修改完再次检查,第一次的报错仍然会出现,源代码如下:

    DATA: lv_dummy TYPE c LENGTH 128.
    DATA: lo_item     TYPE REF TO if_purchase_order_item_mm,
          lt_items    TYPE        purchase_order_items,
          ls_mepoitem TYPE        mepoitem,
          lv_error    TYPE c.

      lt_items = im_header->get_items( ).
      LOOP AT lt_items INTO DATA(ls_items).
        ls_mepoitem = ls_items-item->get_data( ).
        " 检查逻辑
        CASE ls_mepoitem-matkl.
          WHEN '2030102'.  " 当MATKL=2030102(工业硅半成品)时,“理化指标”、“颗粒度”请检查是否需要输入;
            IF ls_mepoitem-zzgf_lhzb_po IS INITIAL OR
               ls_mepoitem-zzgf_kld_po  IS INITIAL .


              mmpur_business_obj_id ls_mepoitem-id.
              mmpur_context MMCNT_USER_EXIT.
              MESSAGE w008(zmm001) WITH ls_mepoitem-ebelp INTO lv_dummy.
              mmpur_message_forced sy-msgty sy-msgid sy-msgno
                                   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
           ENDIF.
        ENDCASE.                           
      ENDLOOP.

解决方案

用该宏添加到标准消息之后,只能手工才能去掉之前添加的消息,新增如下代码即可

    DATA: lv_dummy TYPE c LENGTH 128.
    DATA: lo_item     TYPE REF TO if_purchase_order_item_mm,
          lt_items    TYPE        purchase_order_items,
          ls_mepoitem TYPE        mepoitem,
          lv_error    TYPE c.

    DATA: lt_events TYPE mmpur_event_list.
    DATA: ls_event TYPE mmpur_event_entry.
    DATA: lo_business_object TYPE REF TO if_message_obj_mm.

      lt_items = im_header->get_items( ).
      LOOP AT lt_items INTO DATA(ls_items).
        ls_mepoitem = ls_items-item->get_data( ).
        " 检查逻辑
        CASE ls_mepoitem-matkl.
          WHEN '2030102'.  " 当MATKL=2030102(工业硅半成品)时,“理化指标”、“颗粒度”请检查是否需要输入;
            IF ls_mepoitem-zzgf_lhzb_po IS INITIAL OR
               ls_mepoitem-zzgf_kld_po  IS INITIAL .
               
              mmpur_business_obj_id ls_mepoitem-id.
              mmpur_context MMCNT_USER_EXIT.
              MESSAGE w008(zmm001) WITH ls_mepoitem-ebelp INTO lv_dummy.
              mmpur_message_forced sy-msgty sy-msgid sy-msgno
                                   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                                   
           ELSE.
           
*---            清空消息先找消息ID
              CALL METHOD cl_message_handler_mm=>get_handler
                IMPORTING
                  ex_handler = gl_message_handler.

              CALL METHOD gl_message_handler->getlist
                IMPORTING
                  ex_events = lt_events.
              LOOP AT lt_events INTO ls_event.

*---     check context
                IF ls_event-context = mmcnt_user_exit.

*---     remove message
                  lo_business_object = ls_event-business_obj.
                  CALL METHOD gl_message_handler->remove_by_bo
                    EXPORTING
                      im_business_obj = lo_business_object
                      im_context      = ls_event-context.
                ENDIF.
              ENDLOOP.
           ENDIF.
        ENDCASE.                           
      ENDLOOP.

感谢大佬的博客
参考链接:https://blog.csdn.net/qq_41900124/article/details/89919004

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值