【SAP-ABAP】-权限批导-批量分配角色给具体用户

需求:SAP期初上线的时候,业务顾问经常会遇到批量创建角色和分配角色权限的情况

岗位需求:一般是业务顾问定义权限,BASIS进行后期运维,今天讲两个批导功能,方便期初上线

此程序功能:给具体用户分配多角色

代码如下

*&---------------------------------------------------------------------*
*& Report  Y_YZD_TEST11
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*REPORT  Y_YZD_TEST11.TABLES: sscrfields.TYPES: BEGIN OF ty_list,uname     TYPE usnam,pname     TYPE agr_name,msg(1024),END OF ty_list.DATA: gt_list TYPE STANDARD TABLE OF ty_list,gt_usrs TYPE STANDARD TABLE OF ty_list.
* OLE使用变量
DATA: gv_excel       TYPE ole2_object,gv_application TYPE ole2_object,gv_wbook       TYPE ole2_object,gv_sheet       TYPE ole2_object,go_error       TYPE REF TO i_oi_error,go_document    TYPE REF TO i_oi_document_proxy,go_container   TYPE REF TO cl_gui_custom_container,go_control     TYPE REF TO i_oi_container_control,go_spreadsheet TYPE REF TO i_oi_spreadsheet.*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS: cns_left TYPE i VALUE 1,cns_top  TYPE i VALUE 2,cns_col  TYPE i VALUE 2.*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
* 选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-t01.
PARAMETERS: p_file  TYPE string OBLIGATORY.
SELECTION-SCREEN FUNCTION KEY 1.
PARAMETERS:p_rec TYPE i OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bk1.*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
* 初始化对象PERFORM frm_init_prog.*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
* 运行前的相关检查PERFORM frm_check_ref.*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* 得到文件路径PERFORM frm_get_file_path.*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* 处理导入数据PERFORM frm_upload_sheets .*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_PROG
*&---------------------------------------------------------------------*
*       text:初始化OLE对象
*----------------------------------------------------------------------*
FORM frm_init_prog .CALL METHOD c_oi_container_control_creator=>get_container_controlIMPORTINGcontrol = go_controlerror   = go_error.IF go_error->has_failed = abap_true.CALL METHOD go_error->raise_messageEXPORTINGtype = 'E'.ENDIF.CREATE OBJECT go_containerEXPORTINGcontainer_name              = 'CONT'EXCEPTIONScntl_error                  = 1cntl_system_error           = 2create_error                = 3lifetime_error              = 4lifetime_dynpro_dynpro_link = 5OTHERS                      = 6.IF sy-subrc <> 0.MESSAGE  'Error while creating container' TYPE 'E'.ENDIF.CALL METHOD go_control->init_controlEXPORTINGinplace_enabled      = abap_truer3_application_name  = 'EXCEL CONTAINER'parent               = go_containerIMPORTINGerror                = go_errorEXCEPTIONSjavabeannotsupported = 1OTHERS               = 2.IF go_error->has_failed = abap_true.CALL METHOD go_error->raise_messageEXPORTINGtype = 'E'.ENDIF.CALL METHOD go_control->get_document_proxyEXPORTINGdocument_type  = soi_doctype_excel_sheetIMPORTINGdocument_proxy = go_documenterror          = go_error.IF go_error->has_failed = abap_true.CALL METHOD go_error->raise_messageEXPORTINGtype = 'E'.ENDIF.ENDFORM.                    " FRM_INIT_PROG*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_REF
*&---------------------------------------------------------------------*
*       text:检查文件是否存在
*----------------------------------------------------------------------*
FORM frm_check_ref .DATA lv_ret TYPE abap_bool.*   将路径全部转换为大写TRANSLATE p_file TO UPPER CASE.IF p_file IS NOT INITIAL.
*     检查文件是否存在CALL METHOD cl_gui_frontend_services=>file_existEXPORTINGfile                 = p_fileRECEIVINGresult               = lv_retEXCEPTIONScntl_error           = 1error_no_gui         = 2wrong_parameter      = 3not_supported_by_gui = 4OTHERS               = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.IF lv_ret NE abap_true.MESSAGE TEXT-t02 TYPE 'E'.ENDIF.ENDIF.ENDFORM.                    " FRM_CHECK_INPUT*&---------------------------------------------------------------------*
*&      Form  FRM_GET_FILE_PATH
*&---------------------------------------------------------------------*
*       text:取得文件路径
*----------------------------------------------------------------------*
FORM frm_get_file_path .DATA: lt_filetab TYPE filetable.DATA: lv_rc TYPE i.* 取得文件路径CALL METHOD cl_gui_frontend_services=>file_open_dialogEXPORTINGwindow_title            = '导入文件'default_extension       = '*.xls'file_filter             = cl_gui_frontend_services=>filetype_excelCHANGINGfile_table              = lt_filetabrc                      = lv_rcEXCEPTIONSfile_open_dialog_failed = 1cntl_error              = 2error_no_gui            = 3not_supported_by_gui    = 4OTHERS                  = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.IF lt_filetab IS NOT INITIAL.READ TABLE lt_filetab INTO p_file INDEX 1.ENDIF.ENDFORM.                    " FRM_GET_FILE_PATH*&---------------------------------------------------------------------*
*&      Form  FRM_UPLOAD_SHEETS
*&---------------------------------------------------------------------*
*       text:上传Excel内容
*----------------------------------------------------------------------*
FORM frm_upload_sheets .DATA: lwa_list        TYPE ty_list,lv_flag,lv_document_url TYPE c LENGTH 256,lv_sheet_name   TYPE soi_field_name,lt_data         TYPE soi_generic_table,lt_ranges       TYPE soi_range_list,lt_range        TYPE soi_dimension_table,ls_range        TYPE soi_dimension_item,lv_str          TYPE string.lv_sheet_name = 'Assets'.CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTING
*     percentage = progresstext = TEXT-t03." open documentCONCATENATE 'FILE://' p_file INTO lv_document_url.CALL METHOD go_document->open_documentEXPORTINGdocument_title = TEXT-t05document_url   = lv_document_urlopen_inplace   = abap_trueIMPORTINGerror          = go_error.IF go_error->has_failed = abap_true.CALL METHOD go_error->raise_messageEXPORTINGtype = 'I'.LEAVE LIST-PROCESSING.ENDIF." get sheet interfaceCALL METHOD go_document->get_spreadsheet_interfaceEXPORTINGno_flush        = ' 'IMPORTINGerror           = go_errorsheet_interface = go_spreadsheet.IF go_error->has_failed = abap_true.CALL METHOD go_error->raise_messageEXPORTINGtype = 'I'.LEAVE LIST-PROCESSING.ENDIF.ls_range-row     = cns_top.ls_range-column  = cns_left.ls_range-rows    = p_rec.ls_range-columns = cns_col.APPEND ls_range TO lt_range." get sheet contentCALL METHOD go_spreadsheet->select_sheetEXPORTINGname  = lv_sheet_name "lstr_sheets-sheet_nameIMPORTINGerror = go_error.IF go_error->has_failed = abap_true.CALL METHOD go_error->raise_messageEXPORTINGtype = 'I'.LEAVE LIST-PROCESSING.ENDIF.CALL METHOD go_spreadsheet->set_selectionEXPORTINGtop     = cns_topleft    = cns_leftrows    = p_reccolumns = cns_col.CALL METHOD go_spreadsheet->insert_rangeEXPORTINGname     = TEXT-t04rows     = p_reccolumns  = cns_colno_flush = ''IMPORTINGerror    = go_error.IF go_error->has_failed = abap_true.CALL METHOD go_error->raise_messageEXPORTINGtype = 'I'.LEAVE LIST-PROCESSING.ENDIF.REFRESH lt_data.CALL METHOD go_spreadsheet->get_ranges_dataEXPORTINGrangesdef = lt_rangeIMPORTINGcontents  = lt_dataerror     = go_errorCHANGINGranges    = lt_ranges.DELETE lt_data WHERE value IS INITIAL OR value = space.LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<lfs_data>)." build records by selected combinationPERFORM frm_build_records_by_comb USING <lfs_data> lwa_list.AT END OF row.CLEAR lv_flag.TRANSLATE lwa_list-uname TO UPPER CASE.TRANSLATE lwa_list-pname TO UPPER CASE.*     检查用户是否存在SELECT SINGLE bname INTO @DATA(lv_bname)FROM usr01 WHERE bname = @lwa_list-uname.IF sy-subrc EQ 0.ELSE.lwa_list-msg = TEXT-t05.lv_flag = abap_true.ENDIF.*     检查角色是否存在SELECT SINGLE agr_name INTO @DATA(lv_agr)FROM agr_define WHERE agr_name = @lwa_list-pname.IF sy-subrc EQ 0.ELSE.lwa_list-msg = lwa_list-msg && '|' && TEXT-t08.lv_flag = abap_true.ENDIF.IF lv_flag IS INITIAL.APPEND lwa_list TO gt_usrs.ELSE.SHIFT lwa_list-msg LEFT DELETING LEADING '|'.APPEND lwa_list TO gt_list.ENDIF.CLEAR:lwa_list.ENDAT.ENDLOOP.* 出错的用户,直接从gt_usrs里面移到gt_listSORT gt_list BY uname.LOOP AT gt_usrs INTO lwa_list.READ TABLE gt_list ASSIGNING FIELD-SYMBOL(<lfs_list>)WITH KEY uname = lwa_list-uname BINARY SEARCH.CHECK sy-subrc EQ 0.APPEND lwa_list TO gt_list.SORT gt_list BY uname.DELETE gt_usrs.ENDLOOP.IF gt_usrs IS NOT INITIAL.
*   执行修改PERFORM frm_exec_change.ENDIF.* 如果出现检查或上载错误,则将错误的下载下来SORT gt_list BY uname pname.IF gt_list IS NOT INITIAL.lwa_list-uname = 'SAP用户'.lwa_list-pname = '角色'.lwa_list-msg   = '错误消息'.INSERT lwa_list INTO gt_list INDEX 1.CALL FUNCTION 'GUI_DOWNLOAD'EXPORTING
*       BIN_FILESIZE            =filename                = 'C:\code\role_error.xls'filetype                = 'DAT'
*       APPEND                  = ' 'write_field_separator   = 'X'
*       HEADER                  = '00'
*       TRUNC_TRAILING_BLANKS   = ' '
*       WRITE_LF                = 'X'
*       COL_SELECT              = ' '
*       COL_SELECT_MASK         = ' '
*       DAT_MODE                = ' '
*       CONFIRM_OVERWRITE       = ' '
*       NO_AUTH_CHECK           = ' 'codepage                = '4103'
*       IGNORE_CERR             = ABAP_TRUEreplacement             = '#'write_bom               = 'X'
*       TRUNC_TRAILING_BLANKS_EOL       = 'X'
*       WK1_N_FORMAT            = ' '
*       WK1_N_SIZE              = ' '
*       WK1_T_FORMAT            = ' '
*       WK1_T_SIZE              = ' '
*       WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*       SHOW_TRANSFER_STATUS    = ABAP_TRUE
*       VIRUS_SCAN_PROFILE      = '/SCET/GUI_DOWNLOAD'TABLESdata_tab                = gt_list
*       FIELDNAMES              =EXCEPTIONSfile_write_error        = 1no_batch                = 2gui_refuse_filetransfer = 3invalid_type            = 4no_authority            = 5unknown_error           = 6header_not_allowed      = 7separator_not_allowed   = 8filesize_not_allowed    = 9header_too_long         = 10dp_error_create         = 11dp_error_send           = 12dp_error_write          = 13unknown_dp_error        = 14access_denied           = 15dp_out_of_memory        = 16disk_full               = 17dp_timeout              = 18file_not_found          = 19dataprovider_exception  = 20control_flush_error     = 21OTHERS                  = 22.WRITE: TEXT-t07.ELSE.MESSAGE TEXT-t06 TYPE 'S'.ENDIF.ENDFORM.                    " FRM_UPLOAD_SHEETS*&---------------------------------------------------------------------*
*&      Form  FRM_BUILD_RECORDS_BY_COMB
*&---------------------------------------------------------------------*
*       text:将列值赋值到上传内表
*----------------------------------------------------------------------*
*      -->U_DATA:上传的EXCEL值
*      -->U_UPLDATA:传入内表的行
*----------------------------------------------------------------------*
FORM frm_build_records_by_comb USING u_data  TYPE soi_generic_itemu_list TYPE ty_list.CASE u_data-column.WHEN '1'.u_list-uname = u_data-value.WHEN '2'.u_list-pname = u_data-value.WHEN OTHERS.ENDCASE.ENDFORM.*&---------------------------------------------------------------------*
*&      Form  FRM_EXEC_CHANGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_FLAG  text
*      -->P_LWA_LIST  text
*----------------------------------------------------------------------*
FORM frm_exec_change.DATA:lt_agr  TYPE TABLE OF bapiagr,ls_agr  TYPE bapiagr,lt_ret  TYPE TABLE OF bapiret2,lv_name TYPE bapibname-bapibname,lt_list TYPE TABLE OF ty_list,ls_list TYPE ty_list,lv_str  TYPE string.SORT gt_usrs BY uname.LOOP AT gt_usrs ASSIGNING FIELD-SYMBOL(<lfs_list>).ls_agr-agr_name = <lfs_list>-pname.ls_agr-from_dat = sy-datum.ls_agr-to_dat   = '99991231'.*   取角色的描述SELECT text UP TO 1 ROWSINTO @ls_agr-agr_textFROM agr_textsWHERE agr_name = @<lfs_list>-pname.ENDSELECT.APPEND ls_agr TO lt_agr.APPEND <lfs_list> TO lt_list.AT END OF uname.lv_name = <lfs_list>-uname.CALL FUNCTION 'ISAI_USER_ROLES_MAINTAIN'EXPORTINGusername      = lv_nameTABLESactgroups_new = lt_agrreturn        = lt_ret.LOOP AT lt_ret INTO DATA(lwa_return).IF lwa_return-type = 'E' ORlwa_return-type = 'A' ORlwa_return-type = 'X'.DATA(lv_flg) = abap_true.EXIT.ENDIF.ENDLOOP.IF lv_flg IS INITIAL.
*       成功CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = abap_true.ELSE.
*       失败CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.CLEAR lv_str.LOOP AT lt_ret INTO lwa_returnWHERE type = 'E' OR type = 'A' OR type = 'X'.lv_str = lv_str && '|' && lwa_return-message.ENDLOOP.SHIFT lv_str LEFT DELETING LEADING '|'.CLEAR ls_list.ls_list-msg = lv_str.MODIFY lt_list FROM ls_list TRANSPORTING msgWHERE uname NE ''.APPEND LINES OF lt_list TO gt_list.ENDIF.CLEAR:lt_agr,lt_ret,lt_list,lv_name.ENDAT.ENDLOOP.ENDFORM.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算各聚类中心

任务描述 本关实现一个函数来计算各簇的中心。 相关知识 在前一个关卡中&#xff0c;我们实现了一个函数来计算距离每个样本最近的簇中心&#xff0c;这样每一个样本都有了所属的簇团&#xff0c;从而将一堆数据分成了 n 个簇&#xff0c;也就是 n 个类。 K-means 算法是一…

leetcode打卡#day41 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 class Solution { public:int fib(int n) {if (n 0) return 0;if (n 1) return 1;return fib(n-1) fib(n-2);} };70. 爬楼梯 class Solution { public://动态规划 -- 爬楼梯int climbStairs(int n) {if (n < 1) return n; //防止空指针vector<int&g…

【Go】十三、TOKEN机制与跨域处理方式

身份校验 对于微服务场景来说&#xff0c;使用 cookie session 来进行身份校验是一种不合适的做法&#xff0c;因为 生成的sessionid 是不存储任何信息的&#xff0c;这样我们如果要在其他模块中进行身份校验就是做不到的&#xff0c;例如&#xff1a;我们无法在商品模块中筛…

Android Unable to determine activity name

报错:Unable to determine activity name的解决办法 最新的Android Studio长颈鹿版(Android Studio Giraffe | 2022.3.1 Patch 4) 新建一个空白的Activity,只能选kotlin. 选No Activity,则可以选Java语言。 新建好后,不像以前的老版本,点击运行,可以直接进入Hello wor…

电脑桌面提醒做事的app 好用的桌面提醒app

在快节奏的现代生活中&#xff0c;我们每天都要通过电脑处理大量的工作事项。然而&#xff0c;繁忙的工作节奏有时会导致我们遗忘某些重要任务&#xff0c;从而带来不必要的损失。为了避免这种情况&#xff0c;选择一款好用的桌面提醒app显得尤为重要。 想象一下&#xff0c;你…

世界上最顶级的动画公司是哪个?基于什么技术?

世界上最顶级的动画公司之一是皮克斯动画工作室&#xff08;Pixar Animation Studios&#xff09;。皮克斯以其技术创新、卓越的动画质量和强大的故事叙述能力闻名。下面是皮克斯的一些关键技术和创新&#xff1a; 1. 计算机动画&#xff08;CGI&#xff09;&#xff1a; 皮…

C语言| 数组

直接定义一个数组&#xff0c;并给所有元素赋值。 数组的下标从0开始&#xff0c;下标又表示数组的长度。 【程序代码】 #include <stdio.h> int main(void) { int a[5] {1, 2, 3, 4, 5}; int i; for(i0; i<5; i) { printf("a[%d] %d\…

主窗体获取子窗体的数值

本文所描述的是一个modbus读从站的数值实时更新到主窗体中&#xff0c;在主窗体中实时检测子窗体反馈回来的数据当它为false的时候添加报警输出 在主窗体中 //公开一个静态的字典用来接收数值 public static Dictionary<string, bool> StatusDictionary { get; set; }p…

翻译: Gen AI生成式人工智能学习资源路线图一

Introduction 介绍 本文档旨在作为学习现代人工智能系统背后的关键概念的手册。考虑到人工智能最近的发展速度&#xff0c;确实没有一个好的教科书式的资源来快速了解 LLMs 或其他生成模型的最新和最伟大的创新&#xff0c;但互联网上有大量关于这些主题的优秀解释资源&#x…

WireGuard网络架构及配置详解

WireGuard网络架构及配置详解 一.点对点二.中心网关,实现nat穿透弊端:流量全部经过中心网关,带宽上限受限于中心网关 三.借助registry实现双向nat穿透需要借助registry实现 udp打洞, 待二开 一.点对点 yum install epel-release elrepo-release -y yum install yum-plugin-elr…

QT——事件

一、什么是事件 在QT中,事件(Event)是指由特定对象发生的动作或状态变化,通常用于响应用户的操作。事件可以是鼠标点击、键盘输入、窗口移动等用户操作,也可以是系统发出的信号,比如定时器超时、网络数据到达等。在QT中,可以通过连接信号与槽(Signals and Slots)的方…

蒂姆·库克解释Apple Intelligence和与ChatGPT合作的区别|TodayAI

在2024年全球开发者大会&#xff08;WWDC 2024&#xff09;上&#xff0c;苹果公司首席执行官蒂姆库克&#xff08;Tim Cook&#xff09;隆重介绍了公司的最新人工智能&#xff08;AI&#xff09;计划——Apple Intelligence&#xff0c;并宣布了与OpenAI的ChatGPT的合作。虽然…

知识图谱存在的挑战---数据相关和算法相关

文章目录 数据相关算法相关 数据相关 数据是知识图谱的基石,知识图谱的数据来源主要有两种&#xff1a;自有数据&#xff08;自身采集 或拥有等&#xff09;和外源数据。自有数据由建设者因特定的业务需求而采集获取或经过特定加工处理形成且被自己所拥有的数据&#xff1b;外源…

kotlin 协程之初识挂起函数

什么是挂起函数 官方文档 在 Kotlin 协程:从基础概念到开发实践 文章中,提到 kotlin协程 是一个可挂起计算的实例,可以在一个线程中挂起并在另一个线程中恢复继续执行,这期间不会阻塞线程。 这种挂起和恢复的能力就是通过挂起函数来实现的。 在使用示例中,我们用到了 w…

定时器0电机控制PWM输出

/*立式不锈钢波纹管机控制板2021 2 26 pcb PAST******/ #include <REG52.H> #include <intrins.H> #define uint unsigned int #define uchar unsigned char #define …

vue使用

if (this.$isPGY) {typeof window.tabCreateFn "function" && window.tabCreateFn("对账单 - 新增", "/vues/account/add", "")} else {this.$router.push({ name: "AccountAdd" })}

JVM性能优化案例:优化垃圾回收器的年轻代和老年代占比

JVM性能优化案例&#xff1a;优化垃圾回收器的年轻代和老年代占比 我们有一款在线交易系统&#xff0c;要求低延迟和高吞吐量。系统运行在Ubuntu服务器上&#xff0c;使用OpenJDK 11&#xff0c;并启用了G1垃圾回收器。以下是系统的基本配置和GC日志信息&#xff1a; 操作系统…

vscode react我常用的开发插件汇总

console-log – 此插件用于快捷键生成console,当然你也可以在其他模板中自定义快捷生成内容CodeGeeX – 一个内嵌在vscode插件列中的AI工具,让我们可以直接获取AI信息而不必麻烦的到其他AI软件或平台搜索Git History – 此插件用于在vscode中提供一个查询当前选中tab页签的组件…

CID引流电商下的3C产品选品策略深度解析

​摘要&#xff1a;随着电商行业的迅猛发展和消费者需求的日益多样化&#xff0c;CID引流电商作为一种新兴的电商模式&#xff0c;逐渐受到了广泛关注。在这一模式下&#xff0c;3C产品作为高客单价、高技术含量的代表品类&#xff0c;其选品策略的制定显得尤为重要。本文将从多…

新建pdb 打不开 ORA-65104 ORA-25153

select * from pdb_plug_in_violations&#xff1b; 有个waring service_name 冲突&#xff0c;应该是不影响的 -------------------------------------service 冲突解决------------------- Select message, action from DB_PLUG_IN_VIOLATIONS and get the result: MESSAG…