When we have a customer requirement to implement checks for PO data before saving, we can implement BADI ME_PROCESS_PO_CUST. The check for the fields can be implemented in methods:
To raise an error message we use macros. To make them available, specify in the beginning the following include mm_messages_mac.
After the logical condition when the error should be raised:
If the logical condition, defines that we have no error message, the error message must be removed from the context
Below you can find example for the closing check of a purchase order.
1) Example of raising an error message at the header level
2) Example of raising an error message at the iem level
The error message will be shown in the log ( example from Transaction ME22N ):
Okumaya devam et...
- PROCESS_* (example: PROCESS_ITEM Processing of Item Data )
- CHECK Closing Check
To raise an error message we use macros. To make them available, specify in the beginning the following include mm_messages_mac.
After the logical condition when the error should be raised:
- Set the context ( a freely selected number from the range 900-999): mmpur_context &Context.
- Set the business object: mmpur_business_obj_id &Object ID.
- Set the error message from the message class with variables ( message type, message class, message number, message variables 1-4) : mmpur_message_forced &Message type...
- Invalidate the object: CALL METHOD invalidate( ).
- Set the check failed in case of Closing Check : ch_failed = abap_true.
If the logical condition, defines that we have no error message, the error message must be removed from the context
- mmpur_remove_msg_by_context &Object ID &Context .
Below you can find example for the closing check of a purchase order.
1) Example of raising an error message at the header level
Kod:
IF ls_header-vsart NE 'Z1' AND lv_error EQ abap_true.
mmpur_context 990.
mmpur_business_obj_id ls_header-id.
mmpur_message_forced 'E' 'Z_PO_ERROR' '001' '' '' '' ''.
CALL METHOD im_header->invalidate( ).
ch_failed = abap_true.
ELSE.
mmpur_remove_msg_by_context ls_header-id 990.
ENDIF.
2) Example of raising an error message at the iem level
Kod:
DATA(lt_items) = im_header->get_items( ).
LOOP AT lt_items INTO DATA(ls_item).
lm_items = ls_item-item.
DATA(ls_mepoitem) = lm_items->get_data( ).
IF ls_mepoitem-vsart NE 'Z1' AND lv_error EQ abap_true.
mmpur_context 991.
mmpur_business_obj_id ls_mepoitem-id.
mmpur_message_forced 'E' 'Z_PO_ERROR' '002' ls_mepoitem-ebelp '' '' ''.
CALL METHOD lm_items->invalidate( ).
ch_failed = abap_true.
ELSE.
mmpur_remove_msg_by_context ls_mepoitem-id 991 .
ENDIF.
ENDLOOP.
The error message will be shown in the log ( example from Transaction ME22N ):
Okumaya devam et...