如何在 sap abap 中访问一个块的选择屏幕

问题描述 投票:0回答:1

我试图提供一个只有少数人可以看到的一块选择屏幕的访问权限。对于其他 SAP 用户,它应该是不可见的,但我犯了一些错误。

我想隐藏的块的声明:

SELECTION-SCREEN BEGIN OF BLOCK b3  WITH FRAME TITLE TEXT-004.
  SELECTION-SCREEN SKIP 2.
  SELECTION-SCREEN PUSHBUTTON 3(45) TEXT-ba5 USER-COMMAND x.
  SELECTION-SCREEN SKIP 2.
  SELECTION-SCREEN PUSHBUTTON 3(45) TEXT-bb3 USER-COMMAND y.
  SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN END OF BLOCK b3.

应该完成工作的代码片段:

DATA: lt_authorized_users TYPE STANDARD TABLE OF sy-uname,
      ls_user             TYPE sy-uname.

 lt_authorized_users = VALUE #(  ( 'USER 1' )
                                 ( 'USER 2' ).

                              
  LOOP AT lt_authorized_users INTO ls_user.
  ENDLOOP.


AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 = 'BLK'.
      IF sy-uname = ls_user.
        screen-active = 1.
      ELSE.
        screen-active = 0.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
abap sap
1个回答
0
投票

LOOP AT SCREEN
AT SELECTION-SCREEN OUTPUT
中,您走在正确的轨道上。但是要使
IF screen-group1 = 'BLK'
起作用,您实际上必须说明选择屏幕的哪些部分是哪个块的一部分。您可以使用适用于大多数选择屏幕元素的附加
MODIF ID id
来做到这一点:

SELECTION-SCREEN PUSHBUTTON 3(45) TEXT-ba5 USER-COMMAND x MODIF ID blk.

另请注意,将“活动”设置为 0 不会使对象不可见。这让他们不活跃。这意味着它们仍然存在,但无法与之交互。如果你想让它们完全消失,你需要使用

screen-invisible = 1.

然后你的代码中还有另一个问题,这不是一个真正的技术问题,而是一个非常糟糕的做法:构建你自己的授权系统! SAP 已经有一个授权系统。它围绕 tcode

PFCG
中定义的角色构建,其中包含对 tcode
SU21
中定义的授权对象的授权,并分配给具有 tcode
SU01
的用户。您可以检查用户是否有权使用 ABAP 指令执行某些操作
AUTHORITY-CHECK
。无论何时处理用户授权,都应该在这个系统上构建。自己的授权系统是维护、管理和合规性的噩梦。只有当你有一个真的很好的理由时才建造它们。

SELECTION-SCREEN BEGIN OF BLOCK b3  WITH FRAME TITLE TEXT-004.
  SELECTION-SCREEN SKIP 2.
  SELECTION-SCREEN PUSHBUTTON 3(45) TEXT-ba5 USER-COMMAND x MODIF ID blk.
  SELECTION-SCREEN SKIP 2.
  SELECTION-SCREEN PUSHBUTTON 3(45) TEXT-bb3 USER-COMMAND y MODIF ID blk.
  SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN END OF BLOCK b3.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 = 'BLK'.
      AUTHORITY-CHECK OBJECT Z_SEEBUTTONS
                      ID ACTVT = '03'
      IF sy-subrc <> 0.
        screen-invisible = 1.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.

您可能想知道

BLOCK
SKIP
是什么意思。他们不需要修改器 ID 吗?不,他们没有。他们不能有一个。但他们也不需要一个,因为当一个块不包含可见元素时,整个块就会消失而不占用选择屏幕上的任何空间。

© www.soinside.com 2019 - 2024. All rights reserved.