You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ECC系统中BAPI_RE_RO_CHANGE及REBDRO屏幕权限检查增强实现问询

权限检查实现方案:REBDRO屏幕与BAPI_RE_RO_CHANGE的状态修改

一、能否通过集中式增强同时处理两种场景?

可以,但需要找到两者共同调用的核心状态修改逻辑节点。在ECC的RE模块中,REBDRO屏幕修改单元状态和BAPI_RE_RO_CHANGE的执行流程,最终都会调用到状态变更的核心函数/方法(例如REBD_RO_STATUS_CHANGE函数或CL_REBD_RO=>CHANGE_STATUS类方法)。

如果能在这个核心节点插入增强逻辑,就能同时覆盖屏幕交互和BAPI调用的权限检查场景,实现集中式管控。具体步骤如下:

  • 调试确认核心执行节点:分别跟踪REBDRO屏幕状态修改和BAPI调用的执行路径,找到共同的核心处理函数/方法
  • 在核心节点的增强点(如函数入口、方法执行前)插入权限检查:
    • 从上下文提取单元编号、状态变更类型、公司代码等关键信息
    • 执行AUTHORITY-CHECK语句,验证用户权限(需提前在SU20/SU21配置好对应的权限对象)
    • 权限校验失败时,屏幕场景抛出错误消息中断操作;BAPI场景则填充RETURN参数返回错误并终止后续逻辑

二、若集中式增强不可行,针对BAPI_RE_RO_CHANGE的权限检查步骤

如果核心节点无法增强或两者执行路径无交集,可单独针对BAPI_RE_RO_CHANGE实现权限控制,具体步骤:

1. 确定BAPI的增强入口

选择以下任一增强方式:

  • Customer Exit:使用EXIT_SAPLREBD_002(该出口对应RE对象修改的BAPI增强点)
  • BAdI:若ECC版本支持,使用BADI_REBD_RO_CHANGE(专门用于RE单元修改的业务增强接口)

2. 编写权限检查逻辑

  • 从BAPI输入参数中提取关键数据:
    • 从I_REBDRO获取单元编号(ROGUID/RONUM)、公司代码(BUKRS)等基础信息
    • 从T_STATUS表或I_STATUS_NEW参数中获取要变更的目标状态
  • 执行权限校验:
    AUTHORITY-CHECK OBJECT 'ZRE_RO_STATUS'
      ID 'BUKRS' FIELD l_bukrs
      ID 'ROTYPE' FIELD l_rotype
      ID 'ACTVT' FIELD '02'. "02代表修改操作,根据实际需求调整
    
  • 权限校验失败时处理:
    • 向BAPI的RETURN参数表中添加错误条目:
      DATA: ls_return TYPE bapiret2.
      ls_return-type = 'E'.
      ls_return-id = 'ZRE'.
      ls_return-number = '001'.
      ls_return-message = '无修改单元状态的权限'.
      APPEND ls_return TO return.
      
    • 终止BAPI后续执行逻辑(如在Exit中设置EXIT = ABAP_TRUE,或在BAdI中抛出异常)

3. 测试验证

  • 使用无权限用户调用BAPI_RE_RO_CHANGE,确认返回权限错误
  • 使用有权限用户执行状态修改,验证状态正常更新且无错误提示

内容的提问来源于stack exchange,提问作者Mahmoud Farid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:30:14