您的位置:首页 > 其它

ABAP-获取用户的组织结构权限

2011-09-19 11:20 204 查看
在日常维护中常常需要用户的组织结构层面的权限列表,在SAP里我们就需要到角色里去查看,比较不方便,因此做下面的一个用户组织结构权限的列表程序,代码如下(供大家参考使用)

*&---------------------------------------------------------------------*

*& Report ZORG_LEVELS_AU *

*& *

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

REPORT ZORG_LEVELS_AU MESSAGE-ID dev.

TYPE-POOLS: slis.

TABLES: usr02.

DATA: BEGIN OF gt_1252 OCCURS 100,

agr_name LIKE agr_1251-agr_name.

INCLUDE STRUCTURE pt1252.

DATA: END OF gt_1252 .

DATA db_1252 LIKE gt_1252 OCCURS 100 WITH HEADER LINE.

DATA: BEGIN OF gt_au_fld OCCURS 100.

INCLUDE STRUCTURE pt1251.

DATA: END OF gt_au_fld.

*Organization Level Authorization Field Text

DATA: BEGIN OF orgebenen OCCURS 30.

INCLUDE STRUCTURE usorg_db.

DATA: END OF orgebenen,

*Organization Level Authorization Field Text

BEGIN OF orgtext OCCURS 30.

INCLUDE STRUCTURE usorg_db.

DATA: END OF orgtext.

DATA: g_var LIKE orgebenen-varbl,

g_ret LIKE sy-subrc,

g_old_field LIKE pt1251-field.

DATA: BEGIN OF gt_result OCCURS 100,

agr_name LIKE agr_1251-agr_name.

INCLUDE STRUCTURE tprorg1.

DATA: END OF gt_result.

DATA: gt_field TYPE slis_t_fieldcat_alv.

*Define Selection Screen

PARAMETERS p_user LIKE usr02-bname OBLIGATORY.

PARAMETERS p_date LIKE sy-datum OBLIGATORY DEFAULT sy-datum .

RANGES r_group FOR agr_define-agr_name.

END-OF-SELECTION.

REFRESH: db_1252, r_group .

r_group-sign = 'I'.

r_group-option = 'EQ'.

* Get User's roles

SELECT agr_name INTO (r_group-low) FROM agr_users WHERE uname = p_user AND to_dat > p_date.

APPEND r_group.

ENDSELECT.

*Get value of roles' Organizational levels

SELECT * FROM agr_1252 INTO CORRESPONDING FIELDS OF TABLE db_1252

WHERE agr_name IN r_group

ORDER BY counter.

IF sy-subrc NE 0.

MESSAGE i036. "没有符合条件的数据,则提示信息退出

EXIT.

ENDIF.

DELETE db_1252 WHERE varbl = space.

*CALL FUNCTION 'PRGN_1252_READ_ORG_LEVELS'

* EXPORTING

* ACTIVITY_GROUP = S_STAT-OBJID

* TABLES

* ORG_LEVELS = DB_STORG

* EXCEPTIONS

* NO_DATA_***AILABLE = 1

* OTHERS = 2.

SORT db_1252.

*Auth. Object in User Master Maintenance

SELECT * FROM agr_1251 INTO CORRESPONDING FIELDS OF TABLE gt_au_fld

WHERE agr_name IN r_group

ORDER BY field.

PERFORM init_orgs.

LOOP AT gt_au_fld.

IF gt_au_fld-field NE g_old_field.

g_old_field = gt_au_fld-field.

PERFORM is_org USING g_old_field g_var g_ret.

IF g_ret EQ 0.

READ TABLE db_1252 WITH KEY varbl = g_var.

IF sy-subrc = 0.

LOOP AT db_1252 WHERE varbl = g_var.

APPEND db_1252 TO gt_1252.

ENDLOOP.

IF sy-subrc NE 0.

CLEAR gt_1252.

gt_1252-varbl = g_var.

APPEND gt_1252.

ENDIF.

ELSE.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

SORT gt_1252.

LOOP AT gt_1252.

MOVE-CORRESPONDING gt_1252 TO gt_result.

PERFORM read_org_text USING gt_1252-varbl gt_result-text.

READ TABLE orgebenen WITH KEY varbl = gt_1252-varbl.

IF sy-subrc = 0.

gt_result-fieldname = orgebenen-field.

ENDIF.

APPEND gt_result.

ENDLOOP.

DESCRIBE TABLE gt_result LINES sy-subrc.

IF sy-subrc = 0.

MESSAGE i036. "没有符合条件的数据,则提示信息退出

EXIT.

ELSE.

PERFORM sub_create_field_cat.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

it_fieldcat = gt_field[]

TABLES

t_outtab = gt_result

EXCEPTIONS

program_error = 1

OTHERS = 2.

ENDIF.

*&---------------------------------------------------------------------*

*& Form sub_create_field_cat

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM sub_create_field_cat.

REFRESH gt_field.

PERFORM sub_field_des USING :

'' '' 'AGR_NAME' '' 'X' '' '' 'Role Name' '20' '' '' gt_field[],

'' '' 'VARBL' '' 'X' '' '' 'Org. Level' '10' '' '' gt_field[],

'' '' 'TEXT' '' '' '' '' 'Org. Des.' '40' '' '' gt_field[],

'' '' 'LOW' '' '' '' '' 'Low Value' '40' '' '' gt_field[],

'' '' 'HIGH' '' '' '' '' 'High Vlaue' '40' '' '' gt_field[].

ENDFORM. " SUB_CREATE_FIELD_CAT

*----------------------------------------------------------------------*

* Form : SUB_FIELD_DES

*----------------------------------------------------------------------*

* Description: Set the fields which will be displayed

*----------------------------------------------------------------------*

*参数说明 *

*---------------------------------------------------------------------*

* im_ref_FIELD---must upper case *

* im_ref_TABLE---internal table name *

* im_FIELDname---must upper case *

* im_TABname ---internal table name *

* im_KEY ---column with key-color AND frozen *

* im_CHECKBOX ---the column is checkbox *

* im_dosum ---total,if total, the field must be sumed *

* im_SELTEX_L ---column Long description of title *

* im_outputlen---column output length

* re_field : 字段格式定义内表

*----------------------------------------------------------------------*

* Modification Log: *

* Date Programmer Correction Number *

*2006-08-10 dev01 增加控制零值是否显示控制参数

*2006-08-12 dev01 增加控制是否显示控制参数

*----------------------------------------------------------------------*

FORM sub_field_des USING im_ref_field TYPE c

im_ref_table TYPE c

im_fieldname TYPE c

im_tabname TYPE c

im_key TYPE c

im_checkbox TYPE c

im_dosum TYPE c

im_seltex_l TYPE c

im_outputlen TYPE i

im_zero TYPE c

im_out TYPE c

re_field TYPE slis_t_fieldcat_alv.

DATA: wa_fieldcat TYPE slis_fieldcat_alv.

CLEAR wa_fieldcat.

wa_fieldcat-ref_fieldname = im_ref_field.

wa_fieldcat-ref_tabname = im_ref_table.

wa_fieldcat-fieldname = im_fieldname.

wa_fieldcat-tabname = im_tabname.

wa_fieldcat-key = im_key.

wa_fieldcat-checkbox = im_checkbox.

wa_fieldcat-do_sum = im_dosum.

wa_fieldcat-no_zero = im_zero.

wa_fieldcat-no_out = im_out.

wa_fieldcat-seltext_l = im_seltex_l.

wa_fieldcat-seltext_m = im_seltex_l.

wa_fieldcat-seltext_s = im_seltex_l.

wa_fieldcat-outputlen = im_outputlen.

* wa_fieldcat-col_pos = IM_colpos.

APPEND wa_fieldcat TO re_field.

ENDFORM. "SUB_FIELD_DES

*&---------------------------------------------------------------------*

*& Form INIT_ORGS

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

FORM init_orgs.

STATICS: org_init.

IF org_init = space.

org_init = 'X'.

SELECT * FROM usorg_db INTO TABLE orgebenen.

SORT orgebenen.

orgtext[] = orgebenen[].

SORT orgtext BY langu varbl.

ENDIF.

ENDFORM. " INIT_org

*&---------------------------------------------------------------------*

*& Form IS_ORG

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->FIELD text

* -->VAR text

* -->RET text

*----------------------------------------------------------------------*

FORM is_org USING field var ret.

READ TABLE orgebenen WITH KEY field = field BINARY SEARCH.

IF sy-subrc = 0.

ret = 0.

var = orgebenen-varbl.

ELSE.

ret = 4.

CLEAR var.

ENDIF.

ENDFORM. "IS_ORG

* Text zu einer Variablen (Orgebene) liefern

FORM read_org_text USING name LIKE usvart-varbl

text.

READ TABLE orgtext WITH KEY langu = sy-langu varbl = name

BINARY SEARCH.

IF sy-subrc = 0.

text = orgtext-vtext.

ELSE.

READ TABLE orgtext WITH KEY langu = 'D' varbl = name

BINARY SEARCH.

IF sy-subrc = 0.

text = orgtext-vtext.

ELSE.

text = name.

ENDIF.

ENDIF.

ENDFORM. "read_org_text
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: