SAP CRM OneOrder Badi 汇总(持续更新)

来源:互联网 发布:网络测线器 编辑:程序博客网 时间:2024/06/02 07:10
  1. 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实现,而搜索选项和样式则可以去对应的组件进行修改。

  2. 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

  3. 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.
  4. 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函数。尽量约束各种条件等。

  5. CRM_COND_COM_BADI
    Condition中增加通讯结构与数据。例如通过实施该Badi,向IPC Java中传入更多的自定义参数。

1 0
原创粉丝点击