天天看點

SAP ABAP ZBA_R001 查詢使用者下的角色

SAP ABAP ZBA_R001 查詢使用者下的角色
******************************************
* 查詢使用者下的角色,事務代碼
* 作者:劉欣
* 2013-5-3
* [email protected]
* QQ522929
******************************************
REPORT  ZBA_R001.
TYPE-POOLS: SLIS,KCDE.
*-----------内表定義--------------
DATA:BEGIN OF itab OCCURS 0,
       UNAME type AGR_USERS-UNAME,          "使用者名
       NAME_TEXT type V_USERNAME-NAME_TEXT, "完整使用者名稱
       DEPARTMENT type ADCP-DEPARTMENT,    "部門資訊
       AGR_NAME  type AGR_USERS-AGR_NAME,   "角色名
       TEXT type AGR_TEXTS-TEXT,         "角色中文說明
       TCODE type AGR_TCODES-TCODE,       "事務代碼
       TTEXT type TSTCT-TTEXT,           "代碼說明
      END of itab.

DATA: username TYPE V_USERNAME-NAME_TEXT,
      tcodes  TYPE AGR_TCODES-TCODE,
*      DEPARTMENT type ADCP~DEPARTMENT,"部門資訊
      G_REPID TYPE SY-REPID,
      IT_EVENTS TYPE SLIS_T_EVENT,
      IT_FIELD TYPE SLIS_T_FIELDCAT_ALV,
      WA_FIELD TYPE SLIS_FIELDCAT_ALV,
      IT_SORT TYPE SLIS_T_SORTINFO_ALV.

INITIALIZATION.
G_REPID = SY-REPID.
*--------選擇字段-----------------------
start-of-selection.
     SELECT-OPTIONS name FOR USERNAME NO INTERVALS.
     SELECT-OPTIONS codes FOR tcodes  NO INTERVALS.
end-of-selection.


*------執行-----------
perform tosql.
perform listshow.
*--------------------------------
* 使用者名,完整使用者名稱,部門名稱,角色名,角色中文說明,事務代碼,事務代碼說明
*--------------------------------
form tosql.
SELECT DISTINCT  usr21~bname AS uname   V_USERNAME~NAME_TEXT  ADCP~DEPARTMENT  AGR_USERS~AGR_NAME    AGR_TEXTS~TEXT   AGR_TCODES~TCODE   TSTCT~TTEXT
        INTO corresponding fields of table itab
        FROM USR21
        INNER JOIN v_username       on V_USERNAME~persnumber = usr21~persnumber "通過usr21的号碼,連接配接使用者資訊表
        INNER JOIN adcp      ON adcp~persnumber = usr21~persnumber       "通過usr21的号碼,連接配接部門表
        INNER JOIN agr_users       ON agr_users~uname = usr21~bname            "通過usr21的使用者名,連接配接角色表
        INNER JOIN AGR_TEXTS   on  AGR_TEXTS~AGR_NAME = AGR_USERS~AGR_NAME "通過角色名,加入角色中文說明表
        INNER JOIN AGR_TCODES   on  AGR_TCODES~AGR_NAME = AGR_USERS~AGR_NAME "通過角色名,加入角色中文說明表
        INNER JOIN TSTCT   on  TSTCT~TCODE = AGR_TCODES~TCODE "通過  表


        where AGR_USERS~UNAME in name and AGR_TCODES~TCODE in codes and AGR_TEXTS~LINE = '00000' and TSTCT~SPRSL = '1'.

DELETE ADJACENT DUPLICATES FROM itab.
SORT itab BY  UNAME AGR_NAME TCODE.
endform.
*--------------------------------
* form listshow
*--------------------------------
form listshow.
********宏定義.
  DEFINE ADD_FIELD.
    WA_FIELD-FIELDNAME = &1.
    WA_FIELD-REPTEXT_DDIC = &2.
    WA_FIELD-NO_ZERO = 'X'.
    APPEND WA_FIELD TO IT_FIELD.
  END-OF-DEFINITION.
  ADD_FIELD 'UNAME'  '登入使用者名'.
  ADD_FIELD 'NAME_TEXT'  '中文名稱'.
  ADD_FIELD 'DEPARTMENT'  '部門'.
  ADD_FIELD 'AGR_NAME'  '角色'.
  ADD_FIELD 'TEXT'  '角色名稱'.
  ADD_FIELD 'TCODE'  '事務代碼'.
  ADD_FIELD 'TTEXT'  '事務代碼說明'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'"
       EXPORTING
            I_CALLBACK_PROGRAM = G_REPID
            I_BACKGROUND_ID   = 'ALV_BACKGROUND'
*            I_GRID_TITLE      = '查詢使用者-角色-事務代碼'
            IT_FIELDCAT        = IT_FIELD
*            IS_LAYOUT          = GS_LAYOUT
*            IT_SORT            = IT_SORT
            I_SAVE             = 'A'
*            IT_EVENTS          = IT_EVENTS[]
       TABLES
            T_OUTTAB           = itab
       EXCEPTIONS
            PROGRAM_ERROR = 1
            OTHERS        = 2.
endform.