BADI:ME_PROCESS_PO_CUST 采购订单处理增强:客户
业务加载项(BAdI)ME_PROCESS_PO_CUST使您可以分别扩展“享受”采购订单的业务逻辑。 因此,您可以影响对话框事务ME21N,ME22N,ME23N和ME29N,以及BAPI BAPI_PO_CREATE1和BAPI_PO_CHANGE。
该BAdI的典型应用包括:
•处理自己的对象
•处理标准对象上的附加数据
•实施额外的检查和派生
•更改标准字段中的数据 (注意:确保保证数据完整性 )
•更改字段选择
通过其方法,BAdI涵盖了采购订单的整个交易周期。因此,您可以在处理的每个步骤中干预自己的实现:
1.开始交易
2.打开采购订单
3.数据检查
◦PO的抬头数据
◦PO的项目数据
◦PO的交货计划行
◦采购订单中的帐户分配
4.字段选择
◦在标题级别
BAdI方法FIELDSELECTION_HEADER_REFKEYS的文档
◦在物品级别
BAdI方法FIELDSELECTION_ITEM_REFKEYS的文档
◦标头级别的特殊规则
BAdI方法FIELDSELECTION_HEADER的文档
◦项目级别的特殊规则
5.整体检查
6.发布
7.总结工作
要求
要实现这些BAdI,您需要ABAP OO的高级知识。
标准设定
•在标准系统中,业务加载项未激活。
•BAdI与过滤器无关。
•BAdI不能多次使用。
示例
您将在Goto-> Code Example下找到一个示例实现。
进一步说明
BAdI接口IF_EX_ME_PROCESS_PO_CUST的文档
以下以CHECK方法简单说明一下消息处理:
整体检查(CHECK方法)
在CHECK方法中,您可以执行整体检查或您自己的采购订单整体检查的增强功能。
对于不合规的数据,需要Message提醒用户,系统在Include:MM_MESSAGES_MAC中 提供了一系列的 宏,用来处理message。
简单介绍几个宏。
1、mmpur_business_obj 用来指定后续消息的业务对象(抬头,行,计划行,科目分配等)
2、mmpur_business_obj_id 用来指定到后续消息的具体行
3、mmpur_metafield 用来指定光标到具体的元字段
4、mmpur_message_forced 消息收集,统一显示
例如如下Code:可以提示错误消息到具体PO行
METHOD if_ex_me_process_po_cust~check .
DATA: ls_mepoheader TYPE mepoheader,
r_items TYPE purchase_order_items,
r_item TYPE purchase_order_item,
lt_item TYPE STANDARD TABLE OF mepoitem,
ls_item TYPE mepoitem,
lv_dummy TYPE c LENGTH 128.
INCLUDE mm_messages_mac. "useful macros for message handling
*获取头和行项目
CLEAR:ls_mepoheader,r_items.
ls_mepoheader = im_header->get_data( ).
r_items = im_header->get_items( ).
*检查1、T01的采购组,生产商必输
IF ls_mepoheader-ekgrp = 'T01'.
LOOP AT r_items INTO r_item .
ls_item = r_item-item->get_data( ).
IF ls_item-loekz NE 'D' AND ls_item-producer IS INITIAL.
ch_failed = 'X'.
mmpur_business_obj_id ls_item-id. “指定后续消息的具体行
mmpur_metafield mmmfd_cust_01. “指定后续的光标的元字段
MESSAGE e083(me) WITH '生产商' space INTO lv_dummy.
mmpur_message_forced sy-msgty sy-msgid sy-msgno "收集消息
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR: r_item,ls_item.
ENDLOOP.
ENDIF.
ENDMETHOD. "IF_EX_ME_PROCESS_PO_CUST~CHECK