如何在控制单据Order的增删改查的权限

对于Order来说,如果有定制化的权限控制需求,可以通过实施Badi: CRM_ORDER_AUTH_CHECK 来进行额外的权限控制。

在CRM Order中,权限检查是遵循如下序列sequence来执行的:

  • BADI CRM_ORDER_AUTH_CHECK->CRM_ORDER_ALTERN_AUTH_CHECK 该方法可以允许跳过系统标准的权限检查逻辑
  • 标准Check - 属于自己的单据, 当前操作用户拥有的Role
  • 标准Check - 单据被分配的组织数据与当前用户所属组织相对应
  • 标准Check - Territory 地域管理
  • 标准Check - Business object type 例如BUS2000115
  • 标准Check - Process Type
  • 标准Check - 销售区域数据,Division,Channel
  • BADI CRM_ORDER_AUTH_CHECK->CRM_ORDER_ADD_AUTH_CHECK

需要说明的是,针对标准Check,执行检查序列的时候,如果有任何一步Check Pass,那么将会跳过余下所有的标准Check。但是,无论检查是否通过,CRM_ORDER_ADD_AUTH_CHECK都会在最后被调用。因此,我们可以将一些客制化的检查逻辑放在此方法中。

案例

业务需求: 如果当前用户不是该单据的特定相关方,那么不允许其对该订单进行任何修改操作。

代码:

METHOD if_ex_crm_order_auth_check~crm_order_add_auth_check.

    TYPES: BEGIN OF lty_guid,
             guid TYPE crmt_object_guid,
           END OF lty_guid.
    DATA:lv_guid         TYPE bu_partner_guid,
         lt_header_guids TYPE crmt_object_guid_tab,
         lt_partner      TYPE crmt_partner_external_wrkt,
         lw_partner      TYPE crmt_partner_external_wrk,
         lv_flg_edit(1)  TYPE c.

    CHECK iv_process_type = 'ZA15' AND iv_header_guid IS NOT INITIAL  AND ( IV_MODE = 'B' or IV_MODE = 'D' ).    '''不允许删除或者修改'''
*    取得当前用户
    CALL FUNCTION 'BP_CENTRALPERSON_GET'
      EXPORTING
        iv_username         = sy-uname
      IMPORTING
        ev_bu_partner_guid  = lv_guid
      EXCEPTIONS
        no_central_person   = 1
        no_business_partner = 2
        no_id               = 3
        OTHERS              = 4.
    Check sy-subrc = 0.

    SELECT SINGLE partner 
      INTO @DATA(lv_partner)
      FROM but000
      WHERE  partner_guid = @lv_guid.

    lt_header_guids = VALUE #(
    ( iv_header_guid )
     ).
    CALL FUNCTION 'CRM_ORDER_READ'
      EXPORTING
        it_header_guid = lt_header_guids
      IMPORTING
        et_partner     = et_partner.

    LOOP AT et_partner INTO ls_partner.
      IF ls_partner-partner_fct = 'ZSE00008' AND ls_partner-partner_no = lv_partner.
        flg_edit = 'X'   
        EXIT.
      ENDIF.

    IF flg_edit IS NOT INITIAL.
      MESSAGE e043(ZSECCO_CRM).    '''提示报错信息'''
      RAISE no_authority.
    ENDIF.

ENDMETHOD.

补充

对于BP来说,相同的权限控制可以在BADI: BADI_CRM_BP_UIU_AUTHORITY 中实现

发布了19 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LoveSolar/article/details/65441628
今日推荐