批量维护角色的权限对象

作者:ABAP老白 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, 开发, 数据工程

[ ABAP老白 ](javascript:void\(0\);)

批量维护角色的权限对象 - 封面图
批量维护角色的权限对象 - 封面图
批量维护角色的权限对象 - 封面图
批量维护角色的权限对象 - 封面图

关键代码:

*&\---------------------------------------------------------------------*

*& Form SAVE

*&\---------------------------------------------------------------------*

FORM save .

DATA : lt_1251 TYPE TABLE OF pt1251 WITH HEADER LINE ,

lt_1250 TYPE TABLE OF pt1250 WITH HEADER LINE .

DATA : BEGIN OF lt_agr_name OCCURS 0 ,

agr_name TYPE agr_name ,

newline ,

END OF lt_agr_name .

DATA : xuauth TYPE xuauth ,

numc ( 2 ) TYPE n .

LOOP AT <fs_out> INTO <fs_out_wa> .

MOVE-CORRESPONDING <fs_out_wa> TO lt_agr_name .

COLLECT lt_agr_name .

ENDLOOP .

SORT lt_agr_name .

LOOP AT lt_agr_name .

CLEAR : lt_1251 , lt_1251[] , lt_1250 , lt_1250[] , xuauth ,

agr_1016 , agr_1250 .

PERFORM mess_retn TABLES return

USING 'I' ' 上传角色 :' lt_agr_name \- agr_name '' '' .

CALL FUNCTION 'ENQUEUE_E_AGR_DEF'

EXPORTING

agr_name = lt_agr_name \- agr_name

EXCEPTIONS

foreign_lock = 1

system_failure = 2

OTHERS = 3 .

IF sy \- subrc <> 0 .

PERFORM symsg_retn TABLES return .

CONTINUE .

ENDIF .
SELECT SINGLE * FROM agr_1016 WHERE agr_name = lt_agr_name \- agr_name . IF agr_1016 \- profile IS INITIAL .

PERFORM mess_retn TABLES return

USING 'E' ' 角色或者角色的参数文件不存在 :' lt_agr_name \- agr_name '' '' .

CONTINUE .

ENDIF .
SELECT SINGLE * FROM agr_1250 WHERE agr_name = lt_agr_name \- agr_name AND

object = p_objct .

SELECT MAX ( auth ) INTO xuauth

FROM agr_1250

WHERE agr_name = lt_agr_name \- agr_name . IF agr_1250 IS INITIAL . IF xuauth IS INITIAL .

CONCATENATE agr_1016 \- profile '00' INTO xuauth .

ELSE .

xuauth+10 ( 2 ) = numc = xuauth+10 ( 2 ) \+ 1 .

ENDIF .
CALL FUNCTION 'PRGN_1250_READ_AUTH_DATA'

EXPORTING

activity_group = lt_agr_name \- agr_name

TABLES

auth_data = lt_1250

EXCEPTIONS

no_data_available = 1

OTHERS = 2 .

lt_1250 \- object = p_objct . lt_1250 \- auth = xuauth . lt_1250 \- modified = 'U' .

COLLECT lt_1250 .

ELSEIF lt_agr_name \- newline = 'X' .

xuauth+10 ( 2 ) = numc = xuauth+10 ( 2 ) \+ 1 .

CALL FUNCTION 'PRGN_1250_READ_AUTH_DATA'

EXPORTING

activity_group = lt_agr_name \- agr_name

TABLES

auth_data = lt_1250

EXCEPTIONS

no_data_available = 1

OTHERS = 2 .

lt_1250 \- object = p_objct . lt_1250 \- auth = xuauth . lt_1250 \- modified = 'U' .

COLLECT lt_1250 .

ENDIF .

CLEAR lt_1251[] .

CALL FUNCTION 'PRGN_1251_READ_FIELD_VALUES'

EXPORTING

activity_group = lt_agr_name \- agr_name

TABLES

field_values = lt_1251

EXCEPTIONS

no_data_available = 1

OTHERS = 2 .

* whstr = `agr_name = lt_agr_name-agr_name`. " 早期 ECC 版本不支持 LOOP ..WHERE (whstr). LOOP AT <fs_out> INTO <fs_out_wa> .

ASSIGN COMPONENT 'AGR_NAME' OF STRUCTURE <fs_out_wa> TO <fs_fld> .

CHECK <fs_fld> = lt_agr_name \- agr_name .

DO .

CHECK sy \- index > 2 .

READ TABLE fldct INDEX sy \- index . IF sy \- subrc <> 0 .

EXIT .

ENDIF .

ASSIGN COMPONENT sy \- index OF STRUCTURE <fs_out_wa> TO <fs_fld> .

lt_1251 \- object = p_objct . lt_1251 \- auth = xuauth . lt_1251 \- field = fldct \- fieldname . lt_1251 \- low = <fs_fld> . SELECT SINGLE * FROM usorg WHERE field = fldct \- fieldname . IF sy \- subrc = 0 AND p_usorg = 'X' . lt_1251 \- modified = 'S' .

ELSEIF sy \- subrc = 0 AND p_usorg = '' .

lt_1251 \- modified = 'M' .

ELSE .

lt_1251 \- modified = 'U' . ENDIF .

COLLECT lt_1251 .

ENDDO . ENDLOOP .
IF lt_1250[] IS NOT INITIAL . CALL FUNCTION 'PRGN_1250_SAVE_AUTH_DATA'

EXPORTING

activity_group = lt_agr_name \- agr_name

TABLES

auth_data = lt_1250 . ENDIF .
CALL FUNCTION 'PRGN_1251_SAVE_FIELD_VALUES'

EXPORTING

activity_group = lt_agr_name \- agr_name

TABLES

field_values = lt_1251 .
CALL FUNCTION 'PRGN_UPDATE_DATABASE' .

COMMIT WORK AND WAIT .

CALL FUNCTION 'DEQUEUE_E_AGR_DEF'

EXPORTING

agr_name = lt_agr_name \- agr_name .
CALL FUNCTION 'PRGN_AUTO_GENERATE_PROFILE_NEW'

EXPORTING

activity_group = lt_agr_name \- agr_name

rebuild_auth_data = ' '

no_dialog = 'X'

org_levels_with_star = 'X'

fill_empty_fields_with_star = 'X'

EXCEPTIONS

activity_group_does_not_exist = 1

activity_group_enqueued = 2

profile_name_exists = 3

profile_not_in_namespace = 4

no_auth_for_prof_creation = 5

no_auth_for_role_change = 6

no_auth_for_auth_maint = 7

no_auth_for_gen = 8

no_auths = 9

open_auths = 10

too_many_auths = 11

profgen_tables_not_updated = 12

error_when_generating_profile = 13

OTHERS = 14 .

IF sy \- subrc <> 0 .

PERFORM symsg_retn TABLES return .

ELSE .

PERFORM mess_retn TABLES return

USING 'S' ' 角色 ' lt_agr_name \- agr_name ' 上传结束 ' '' .

ENDIF . ENDLOOP .
CALL FUNCTION 'SUSR_DISPLAY_LOG'

EXPORTING

display_in_popup = 'X'

TABLES

it_log_bapiret2 = return

EXCEPTIONS

parameter_error = 1

OTHERS = 2 .

LEAVE TO CURRENT TRANSACTION .

ENDFORM . " SAVE
批量维护角色的权限对象 - 封面图
批量维护角色的权限对象 - 封面图
ABAP老白

关于作者:ABAP老白

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「批量维护角色的权限对象.md」整理生成,仅用于内部技术分享与学习交流。