【SAP-ABAP】-权限批导-批量给某个角色导入事务码权限

需求:SAP期初上线的时候,业务顾问经常会遇到批量创建角色和分配角色权限的情况

岗位需求:一般是业务顾问定义权限,BASIS进行后期运维,今天讲两个批导功能,方便期初上线

主要函数:PRGN_READ_ROLE_MENU和PRGN_SAVE_ROLE_MENU

批量给某个角色到事务码权限

第一步

建立一个底表,用于存储哪个角色需要哪些事务码权限(当然你也可以进行模板导入,相当于不存储于数据库中,只做临时界面展示,一般我建议批导功能除了批导字段外,最好加入批导日志,批导时间和批导人员)

第二步

SE38创建程序,程序代码如下

REPORT  ZRIMPORT_TCODE.
DATA: role TYPE agr_name,
      it_rt TYPE TABLE OF agr_tcodes,
      wa_rt TYPE agr_tcodes,
      i_anz TYPE p,confirm_flag(1),
      it_gw TYPE TABLE OF ztrole_tcode WITH HEADER LINE,
      itab_gw TYPE TABLE OF ztrole_tcode WITH HEADER LINE.
DATA: it_hier TYPE TABLE OF agr_hier,
      wa_hier TYPE agr_hier,
      it_dtl_flags TYPE TABLE OF agr_dtl_flags,
      it_dtl_bor_methods TYPE TABLE OF agr_dtl_bor_methods,
      it_dtl_bor_params TYPE TABLE OF agr_dtl_bor_params,
      it_hiert TYPE TABLE OF agr_hiert,
      wa_hiert TYPE agr_hiert,
      i_zh LIKE sy-langu,i_anz1 TYPE p.

SELECT * FROM ztrole_tcode INTO TABLE it_gw.
APPEND LINES OF it_gw TO itab_gw.
i_zh = '1'."语言设为中文
DESCRIBE TABLE it_gw LINES i_anz.
IF i_anz > 0.

  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
    EXPORTING
      textline1 = '该功能用于角色导入事务代码使用,请确保先清除自定义表ZTROLE_TCODE中的旧数据后上载新数据,'
      textline2 = '确认上载的数据没问题后再执行导入操作,是否确认要执行导入操作?'
      titel     = '警告'
    IMPORTING
      answer    = confirm_flag.
  CASE confirm_flag.
    WHEN 'N'. EXIT. "NO
    WHEN 'A'. EXIT. "Cancel
    WHEN 'J'. "YES

      SORT itab_gw BY role.
      DELETE ADJACENT DUPLICATES FROM itab_gw COMPARING role.

      LOOP AT itab_gw.

        CALL FUNCTION 'PRGN_READ_ROLE_MENU'
          EXPORTING
            role              = itab_gw-role
            language          = i_zh
          TABLES
            t_nodes           = it_hier
            t_dtl_flags       = it_dtl_flags
            t_dtl_bor_methods = it_dtl_bor_methods
            t_dtl_bor_params  = it_dtl_bor_params
            t_tcodes          = it_rt
            t_texts           = it_hiert
          EXCEPTIONS
            not_authorized    = 1
            OTHERS            = 2.
        IF sy-subrc <> 0.
* Implement suitable error handling here
        ENDIF.



        LOOP AT it_gw WHERE role = itab_gw-role.
          role = it_gw-role.
          wa_rt-agr_name = role.
          wa_rt-type = 'TR'.
          wa_rt-tcode = it_gw-tcode.
          wa_rt-direct = 'X'.
          APPEND wa_rt TO it_rt.
          DESCRIBE TABLE it_hier LINES i_anz1.
          wa_hier-agr_name = it_gw-role.
          wa_hier-object_id = i_anz1 + 2.
          wa_hier-parent_id = 1.
          wa_hier-sort_order = ( wa_hier-object_id - 1 ) * 10.
          wa_hier-reporttype = 'TR'.
          wa_hier-report = it_gw-tcode.
          wa_hier-menu_level = '01'.
          wa_hier-attributes = 'X'.
          APPEND wa_hier TO it_hier.
          wa_hiert-agr_name = it_gw-role.
          wa_hiert-spras = i_zh.
          wa_hiert-object_id = i_anz1 + 2.
          SELECT SINGLE ttext FROM tstct INTO wa_hiert-text WHERE sprsl = i_zh AND tcode = it_gw-tcode .
          APPEND wa_hiert TO it_hiert.
        ENDLOOP.

        CALL FUNCTION 'PRGN_SAVE_ROLE_MENU'
          EXPORTING
            activity_group          = role          " agr_name
          TABLES
            nodes                   = it_hier
            texts                   = it_hiert
            tcodes                  = it_rt         " agr_tcodes
          EXCEPTIONS
            not_authorized          = 1
            activity_group_enqueued = 2
            no_auth_for_tcodes      = 3.
        IF  sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
        CLEAR: wa_rt,it_rt[],it_hier[],it_hiert[],wa_hier,wa_hiert.
      ENDLOOP.
  ENDCASE.
ELSE.
  MESSAGE '自定义表ZTROLE_TCODE没有要导入的数据,请按模板先上载数据!'  TYPE 'I'.
ENDIF.

第三步

PFCG当中需要增加对应的角色,只需要创建角色,无需给角色分配事务码权限(给角色分配事务码权限由程序完成)

第四步

在自定义的底表中,维护好对应的角色和事务码权限,截图内容为参考截图(两个角色,多个事务码为案例)

第五步

执行程序,即可完成导入。该程序适用于大批量角色权限分配的时候(例如期初上线,或者由新增新权限,批量角色添加权限的时候)

<think>好的,我现在需要帮助用户解决在SAP系统中批量权限批量分配给角色的问题。用户提到的交易代码是PFCG,所以我要先回忆一下PFCG的相关功能。 首先,PFCG是SAP中用于角色维护的主要事务代码,常规操作是单个角色逐个添加事务代码权限对象。但用户需要批量处理,这可能涉及到一些高级功能或者变通方法。我记得SAP的标准功能可能没有直接的批量处理选项,但可能有一些变通方法,比如使用LSMW或者处理作业。 接下来,我需要参考用户提供的引用内容。引用1提到在PFCG中创建角色时需要分配事务代码、组织结构和权限对象。引用2则说明在分配事务代码时,系统会自动抓取权限对象,并要求输入组织级别。引用3提到在ABAP代码中进行权限检查,可能需要通过程序来实现批量处理。这些引用可能提示用户希望通过自动化或程序化的方式处理批量分配。 然后,我需要考虑用户的实际需求。批量赋权可能包括批量添加事务代码到多个角色,或者批量分配权限对象到多个角色,或者同时处理多个用户的角色分配。这里用户明确提到“批量赋值给角色”,所以重点应该是将权限(如事务代码权限对象)批量添加到一个或多个角色中。 可能的解决方案包括: 1. 使用PFCG的模板功能,通过复制现有角色权限结构到新角色。 2. 使用LSMW(Legacy System Migration Workbench)进行批量导入,可能需要开发相应的记录和结构。 3. 编写ABAP程序,通过BAPI或者直接修改角色相关的表(如AGR_TCODES, AGR_1251等)来实现批量更新。 4. 使用SUPC处理作业,但需要确认是否支持所需操作。 另外,用户可能没有权限直接修改底层数据表,因此程序化方法需要考虑权限和安全问题,可能需要授权对象S_TCODE和S_DEVELOP等。 需要提醒用户注意权限维护的风险,批量操作可能致错误覆盖或权限泄露,因此测试环境和备份很重要。同时,组织级别的分配可能需要特别处理,如引用2中提到的在分配事务代码时定义组织范围,这可能需要在批量处理时动态指定或统一设置。 最后,生成相关问题需要考虑用户可能的后续疑问,比如如何角色权限、如何处理冲突、如何验证批量处理结果等。</think>在SAP系统中实现权限批量赋值的操作可以通过以下方法实现,结合交易代码$PFCG$和相关技术手段: ### 一、标准功能批量操作 1. **角色模板复制** - 在$PFCG$中创建基础角色模板,包含通用事务代码(如$SU10$)和权限对象(如$S_TCODE$) - 通过菜单路径 **更多→模板→派生** 创建子角色,系统会自动继承父角色事务权限对象[^1] - 批量调整子角色的组织级别(如公司代码、销售组织) 2. **批量事务代码分配** -角色事务代码页签,使用 **菜单→其他→导入事务代码** 功能 - 通过文本文件批量导入事务代码列表,格式为每行一个事务代码[^2] ```abap VA01 VA02 MM01 SE38 ``` ### 二、增强型批量处理 1. **LSMW批量维护** - 创建LSMW项目,选择对象类型 **角色维护(BGR00)** - 映射字段包括角色名、事务代码权限对象及字段值 - 通过录制$PFCG$操作生成批量导入模板 2. **ABAP程序批量处理** 开发自定义程序调用$BAPI_ROLE_MAINTAIN$接口: ```abap DATA: lt_roles TYPE TABLE OF BAPIBGR00, ls_role TYPE BAPIBGR00. ls_role-role = 'ZHR_PAYROLL'. ls_role-action = 'MODIFY'. APPEND ls_role TO lt_roles. CALL FUNCTION 'BAPI_ROLE_MAINTAIN' EXPORTING test_run = space TABLES roles = lt_roles transactions = lt_tcodes "事务代码表 auth_objects = lt_objs. "权限对象表 ``` ### 三、关键注意事项 1. **权限对象校验** 批量操作需检查授权对象$S_GRANT$和$S_TCODE$[^3],建议在程序中加入校验: ```abap AUTHORITY-CHECK OBJECT 'S_GRANT' ID 'ACTVT' FIELD '02' ID 'OBJECT' FIELD 'BGR00'. IF sy-subrc <> 0. MESSAGE e001(00) WITH '无批量赋权权限'. ENDIF. ``` 2. **组织级别继承** 使用参数文件生成器(SUPC)批量生成派生角色的参数文件时,需确保组织字段(如$BUKRS$)已正确传递[^2] 3. **变更审计** 启用审计日志(SM19/SM20)记录批量操作,建议结合变更请求管理(Transport Request)进行版本控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自律的Drew.Dong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值