SAP 表分权限查询

以下是程序可以设置对表进行分组,并把组分给用户,达到用户分权限组管理表的功能,此功能使用函数调用SE16N,来显示表,其实也可以增加一下,当有权限时调用SM30维护表

 

REPORT ZFIR_015 LINE-SIZE 70.

*** 数据定义  *********************************
DATA: BEGIN OF GS_TABNAME,
*        index TYPE sy-index,
        TABNAME LIKE DD02T-TABNAME,
        DDTEXT LIKE DD02T-DDTEXT,
      END OF GS_TABNAME.

DATA: GT_TBACT LIKE TABLE OF GS_TABNAME,
      GT_SE16N_AUTHGRP TYPE TABLE OF ZSE16N_AUTHGRP.

DATA: G_MTEXT TYPE STRING.

*** SELECTION-SCREEN   ************************

PARAMETERS: P_TABNAM TYPE DD02T-TABNAME OBLIGATORY.

*********************************************

INITIALIZATION.
  PERFORM FRM_AUTH_CHECK.
  PERFORM FRM_INIT.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_TABNAM.
  PERFORM FRM_F4_TABNAME.
**********************************************
START-OF-SELECTION.

  PERFORM FRM_GO.

END-OF-SELECTION.
  IF G_MTEXT IS NOT INITIAL.
    MESSAGE S001(BL) DISPLAY LIKE 'E' WITH G_MTEXT .
  ENDIF.

*&---------------------------------------------*
*&      Form  frm_go
*&---------------------------------------------*
*       text
*----------------------------------------------*
FORM FRM_GO.
  CLEAR G_MTEXT.

  DATA: L_SCVARIANT LIKE SHDSVCI-SCVARIANT.

  "判断输入的表名是否有权限,并生成屏幕变式名。
  READ TABLE GT_TBACT TRANSPORTING NO FIELDS WITH KEY
    TABNAME = P_TABNAM BINARY SEARCH.
  IF SY-SUBRC = 0.
    L_SCVARIANT = P_TABNAM.
    SHIFT L_SCVARIANT LEFT CIRCULAR.
    CONCATENATE 'ZSV_' L_SCVARIANT INTO L_SCVARIANT.
  ELSE.
    G_MTEXT = TEXT-001.
    RETURN.
  ENDIF.
*  CALL FUNCTION 'RS_HDSYS_GET_SC_VARIANT'
*{   INSERT         QASK902552                                        2
  DO 2 TIMES.
*}   INSERT

  "检查屏幕变式。
  CALL FUNCTION 'RS_HDSYS_READ_SC_VARIANT_DB'
    EXPORTING
      SCVARIANT  = L_SCVARIANT
    EXCEPTIONS
      NO_VARIANT = 1
      OTHERS     = 2.
*{   DELETE         QASK902552                                        5
*\  IF sy-subrc <> 0.
*}   DELETE
*{   INSERT         QASK902552                                        4
   IF SY-SUBRC = 0.
     EXIT.
   ELSE.
    IF SY-INDEX = 1.
      L_SCVARIANT = P_TABNAM.
      CONCATENATE 'ZSV_' L_SCVARIANT INTO L_SCVARIANT.
      CONTINUE.
    ENDIF.
*}   INSERT
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            INTO G_MTEXT
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    RETURN.
  ENDIF.
*{   INSERT         QASK902552                                        3
    ENDDO.
*}   INSERT

  "设置 SE16N 屏幕变式。
  CALL FUNCTION 'RS_HDSYS_SET_SC_VARIANT'
    EXPORTING
      PROGNAME            = 'SAPLSE16N'
      DYNPRO              = '100'
      SCVARIANT           = L_SCVARIANT
      OVERWRITE_SCVARIANT = 'X'
      SET_IMMEDIATELY     = 'X'.

*  WAIT UP TO '0.5' SECONDS.
  "设置 SE16N 要查看的表。
  SET PARAMETER ID 'DTB' FIELD P_TABNAM.

*"调用 SE16N
  SUBMIT RK_SE16N AND RETURN.

ENDFORM.                    "frm_go

*&---------------------------------------------*
*&      Form  frm_auth_check
*&---------------------------------------------*
*       text
*----------------------------------------------*
FORM FRM_AUTH_CHECK.
  FIELD-SYMBOLS:<LFS_AUTHGRP> LIKE LINE OF GT_SE16N_AUTHGRP.

  SELECT ZAUTHGRP
    INTO CORRESPONDING FIELDS OF TABLE GT_SE16N_AUTHGRP
    FROM ZSE16N_AUTHGRP.

  CHECK SY-SUBRC = 0.

  LOOP AT GT_SE16N_AUTHGRP ASSIGNING <LFS_AUTHGRP>.
    AUTHORITY-CHECK OBJECT 'Z_AUTHGRP'
             ID 'ACTVT' FIELD '03'
             ID 'ZAUTHGRP' FIELD <LFS_AUTHGRP>-ZAUTHGRP .
    IF SY-SUBRC <> 0.
      DELETE GT_SE16N_AUTHGRP INDEX SY-TABIX.
    ENDIF.
  ENDLOOP.


ENDFORM.                    "frm_auth_check

*&---------------------------------------------*
*&      Form  frm_init
*&---------------------------------------------*
*       text
*----------------------------------------------*
FORM FRM_INIT.

  CHECK LINES(  GT_SE16N_AUTHGRP ) > 0.

  SELECT D~TABNAME D~DDTEXT
    FROM ZSE16N AS Z INNER JOIN DD02T AS D
      ON Z~TABLENAME = D~TABNAME
      INTO CORRESPONDING FIELDS OF TABLE GT_TBACT
      FOR ALL ENTRIES IN GT_SE16N_AUTHGRP
    WHERE Z~ZAUTHGRP = GT_SE16N_AUTHGRP-ZAUTHGRP
      AND D~DDLANGUAGE = SY-LANGU.

  CHECK SY-SUBRC = 0.

  SORT GT_TBACT BY TABNAME.
  DELETE ADJACENT DUPLICATES FROM GT_TBACT COMPARING TABNAME.

ENDFORM.                    "frm_init

*&---------------------------------------------------------------------*
*&      Form  frm_f4_tabname
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_F4_TABNAME.

  DATA:LT_RETURN_TAB TYPE TABLE OF DDSHRETVAL.


  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD         = 'TABNAME'
      PVALKEY          = 'TABNAME'
      DYNPPROG         = SY-REPID
      DYNPNR           = SY-DYNNR
      DYNPROFIELD      = 'P_TABNAM'
      VALUE_ORG        = 'S'
      DISPLAY          = 'F'
      CALLBACK_PROGRAM = SY-REPID
    TABLES
      VALUE_TAB        = GT_TBACT
      RETURN_TAB       = LT_RETURN_TAB
    EXCEPTIONS
      PARAMETER_ERROR  = 1
      NO_VALUES_FOUND  = 2
      OTHERS           = 3.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            INTO G_MTEXT
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    "frm_f4_tabname

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ᝰ随心ꦿེএ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值