採購訂單行項目檢查增強
使用BADI“ME_PROCESS_PO_CUST”的方法CHECK中增強,增加對採購訂單行項目的校驗,若發現錯誤,將這些錯誤消息按照行項目歸集顯示。
完整示例代碼:
METHOD IF_EX_ME_PROCESS_PO_CUST~CHECK .
INCLUDE MM_MESSAGES_MAC.
DATA:LT_PO_ITEM TYPE PURCHASE_ORDER_ITEMS,
LS_PO_ITEM LIKE LINE OF LT_PO_ITEM,
LV_MESSAGE TYPE CHAR255,
LS_ITEM TYPE MEPOITEM.
LT_PO_ITEM = IM_HEADER->GET_ITEMS( ).
LOOP AT LT_PO_ITEM INTO LS_PO_ITEM.
LS_ITEM = LS_PO_ITEM-ITEM->GET_DATA( ).
* ....
IF LS_ITEM-MATNR IS INITIAL.
MMPUR_BUSINESS_OBJ_ID LS_ITEM-ID. "確定錯誤消息顯示到哪個行項目上
MMPUR_MESSAGE_FORCED 'E' 'ZMM001' '001' LV_MESSAGE '' '' ''. "收集錯誤消息
CALL METHOD LS_PO_ITEM-ITEM->INVALIDATE( ). "將發生錯誤的行設置爲無效行
CH_FAILED = 'X'.
ENDIF.
ENDLOOP.
ENDMETHOD. "IF_EX_ME_PROCESS_PO_CUST~CHECK
其中宏mmpur_business_obj_id就是用來確定錯誤消息顯示到哪個行項目上的。
宏(Macros)是一段獨立的代碼,能實現數據的運算與輸出,功能與子程序類似,主要應用於同一程序中某些重複的運算,以簡化代碼。與子程序不同的是,宏通過&N(N爲索引)接收傳入的參數,不需要定義接收參數的類型及格式。宏只能被本程序中定義於宏後面的語名所調用,宏一般定義於程序最開始。
DEFINE mmpur_business_obj_id.
gl_subrc = sy-subrc.
gl_tabix = sy-tabix.
call method cl_handle_manager_mm=>get
exporting
im_id = &1
importing
ex_handle = gl_handle.
call method cl_message_mm=>set_current_business_obj
exporting
im_business_obj = gl_handle.
call method cl_message_mm=>set_current_context
exporting
im_context = 5.
sy-subrc = gl_subrc.
sy-tabix = gl_tabix.
END-OF-DEFINITION.
DEFINE mmpur_message_forced.
set extended check off.
gl_tabix = sy-tabix.
gl_subrc = sy-subrc.
message id &2 type &1 number &3 with &4 &5 &6 &7 into gl_dummy. "#EC MG_PAR_CNT
call method cl_message_mm=>create
exporting
im_msgid = &2
im_msgty = &1
im_msgno = &3
im_msgv1 = sy-msgv1
im_msgv2 = sy-msgv2
im_msgv3 = sy-msgv3
im_msgv4 = sy-msgv4
im_force_collect = cl_mmpur_constants=>yes
exceptions
failure = 01
dialog = 02.
if sy-subrc = 1 or sy-subrc = 2.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
sy-subrc = gl_subrc.
sy-tabix = gl_tabix.
set extended check on.
END-OF-DEFINITION.