CRM_BADI_RF_Q1O_SEARCH
增强OneOrder标准搜索界面,增加搜索条件自定义字段,自定义搜索逻辑,搜索结果内容等。
过滤器:搜索对象 例如OBJ_IL = BTQSLSORD (销售订单)
代码示例: 在搜索销售订单界面增加“创建日期”的搜索
METHOD if_crm_rf_q1o_search~search. DATA(lt_multivalues) = it_multivalues. READ TABLE lt_multivalues INTO DATA(lw_multivalues) WITH KEY fieldname = 'ZZCREATE_DATE_S'. IF sy-subrc EQ 0. DELETE TABLE lt_multivalues FROM lw_multivalues. lw_multivalues-fieldname = 'CREATED_AT_RANGE'. INSERT lw_multivalues INTO TABLE lt_multivalues. ENDIF. CALL FUNCTION 'CRM_BSP_OIC_1O_SEARCH_FROM_RF' EXPORTING it_search_tab = it_search_tab iv_number = iv_number iv_archive = iv_archive it_multivalues = lt_multivalues iv_items = iv_item iv_select_for_headerlevel = iv_select_for_headerlevel iv_call_authority_badi = iv_call_authority_badi iv_select_for_itemlevel = iv_select_for_itemlevel iv_obj_il = iv_obj_il iv_report_area = iv_report_area IMPORTING et_guidlist = et_guidlist et_return = et_return EXCEPTIONS date_not_correct = 1 no_card_type = 2 no_card_no = 3 no_program_id = 4 OTHERS = 5. ENDMETHOD.
注意,该Badi中只包含了搜索的具体逻辑。自定义字段需要通过AET实现,而搜索选项和样式则可以去对应的组件进行修改。
CRM_ORDER_FIELDCHECK
修改订单抬头、行项目中的字段是否可编辑。当我们需要修改系统标准逻辑时,可以采用这个Badi。
过滤器:无
代码示例:使标准订单行项目上的“批次号”可编辑(在ERP不启用批次管理的情况下)
METHOD if_ex_crm_order_fieldcheck~fieldcheck. FIELD-SYMBOLS <field_batchid> LIKE LINE OF ct_input_field_names. IF iv_object_name = 'PRODUCT_I' AND is_fieldcheck_com-ref_kind = 'B'. LOOP AT ct_input_field_names ASSIGNING <field_batchid>. IF <field_batchid>-fieldname = 'BATCH_ID'. <field_batchid>-changeable = ''. ENDIF. ENDLOOP. ENDIF. ENDMETHOD.
批次号可以成功同步到ERP,该功能可参考Note: 2472483
CRM_ORDER_AUTH_CHECK
Order权限检查。
过滤器:无
代码示例:基于某些特定逻辑,让用户无法编辑(删除)该订单,并抛出消息。METHOD if_ex_crm_order_auth_check~crm_order_add_auth_check. CHECK iv_process_type = 'ZA15' AND iv_header_guid IS NOT INITIAL AND ( IV_MODE = 'B' or IV_MODE = 'D' ). CALL FUNCTION 'CRM_MESSAGE_COLLECT' EXPORTING iv_ref_object = iv_header_guid iv_ref_kind = 'A' iv_caller_name = 'ORDERADM_H' iv_msgno = '043' iv_msgid = 'ZSECCO_CRM' iv_msgty = 'E'. RAISE no_authority. ENDMETHOD.
ORDER_SAVE
Order中最常用的Badi之一,但是很多人却用得不好。
过滤器:无
示例代码:无-该Badi中有三个Method,起到不同的作用,并不是可以随便乱用的。按调用顺序应该为:
CHECK_BEFORE_SAVE 用于订单的保存校验,可以在该方法中抛出消息并阻止保存。
PREPARE 用于处理一些在订单commit之前的一些额外逻辑,例如通过order maintain修改订单本身的一些内容,注意,该方法无法阻止订单保存。
CHANGE_BEFORE_UPDATE 用于处理一些与订单本身没有太大关联的逻辑,例如发送邮件,触发中间件,更新自建表等。
-该Badi为多次调用的Badi类型,这代表所有的implementation都会被调用到,但是他们被调用的顺序,是无法预知的。因此每一个实施中的内容都要相对独立,不能有所牵连。
-由于Order Save本身是在函数CRM_ORDER_SAVE中被调用到,因此我们应该极力避免在该Badi中使用BOL,或者其他Commit,锁对象等,否则可能会造成单据的未知错误。
-作为Order中最关键的Badi,我们应尽量考虑到程序执行的效率问题,尽可能的将类似需求放置在一个implementation中,尽量避免直接使用CRM_ORDER_READ函数,而是去针对不同的对象调用对应的OW函数。尽量约束各种条件等。CRM_COND_COM_BADI
Condition中增加通讯结构与数据。例如通过实施该Badi,向IPC Java中传入更多的自定义参数。
SAP CRM OneOrder Badi 汇总(持续更新)
最新推荐文章于 2023-03-29 14:07:22 发布