ABAP 批量创建用户 分配权限

1 *&---------------------------------------------------------------------* 2 *& Report ZTEST_GUO 3 *&---------------------------------------------------------------------* 4 *& 5 *&---------------------------------------------------------------------* 6 REPORT ZTEST_GUO. 7 *&---------------------------------------------------------------------* 8 *& Report Y4_A2_R01 9 *&---------------------------------------------------------------------* 10 *& 11 *&---------------------------------------------------------------------* 12 13 **************************************************************** 14 TABLES:sscrfields. "定义按钮 15 16 *********************************************************************** 17 * 18 *数据类型定义逻辑块 19 * 20 ************************************************************************ 21 "导入数据 22 DATA: BEGIN OF gt_itab OCCURS 0, 23 bname LIKE suid_st_bname-bname, "账户名 24 name_last LIKE suid_st_node_person_name-name_last, "用户名 25 password LIKE suid_st_node_password_ext-password, "密码 26 function LIKE suid_st_node_workplace-function, "岗位 27 department LIKE suid_st_node_workplace-department, "部门 28 profile LIKE suid_st_node_profile-profile, "参数文件名 29 state(1), "状态 30 message TYPE string, "消息文本 31 checkbox(1), 32 END OF gt_itab. 33 34 "定义指针 35 FIELD-SYMBOLS <fs_itab> LIKE gt_itab. 36 37 "ALV 38 DATA: 39 "主要属性 40 gt_fieldcat TYPE lvc_t_fcat, "字段目录 41 gs_fieldcat TYPE lvc_s_fcat, "字段目录 42 gs_layout TYPE lvc_s_layo, "布局结构 43 "次要属性 44 gs_glay TYPE lvc_s_glay. "网格设置 45 46 ************************************************************************ 47 * 48 *选择界面程序逻辑块 49 * 50 ************************************************************************ 51 52 PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY. "选择路径 53 54 "事件 55 SELECTION-SCREEN FUNCTION KEY 1. 56 57 INITIALIZATION. 58 "点击下载模板 59 sscrfields-functxt_01 = VALUE smp_dyntxt( 60 icon_id = icon_mapped_relation 61 icon_text = 'EXCEL下载模板' 62 quickinfo = '点击下载' 63 ). 64 65 AT SELECTION-SCREEN OUTPUT. 66 "是一个PBO事件(Process before output,屏幕加载前的事件)。 67 LOOP AT SCREEN. 68 IF matches( val = screen-name regex = 'P_FILE' ). 69 screen-required = 2. 70 ENDIF. 71 MODIFY SCREEN. 72 ENDLOOP. 73 74 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. 75 PERFORM frm_f4_help CHANGING p_file. 76 77 AT SELECTION-SCREEN. 78 "选择文件路径 79 CASE sscrfields-ucomm. 80 WHEN 'FC01'. 81 PERFORM frm_download_excel USING 'Y4_A2_006'. "下载 EXCEL 文件 82 WHEN OTHERS. 83 IF p_file IS INITIAL. 84 MESSAGE s001(00) WITH '导入文件路径必须填写!' DISPLAY LIKE 'E'. 85 STOP. 86 ELSE. 87 PERFORM frm_read_excel TABLES gt_itab[] USING p_file 1 2 6 10000 CHANGING gt_itab. 88 * PERFORM frm_jiaoyan. "校验数据 89 PERFORM frm_set_fieldcat CHANGING gt_fieldcat. "设置字段目录 给ALV FIELDCAT 赋值 90 PERFORM frm_layout. "设置布局 91 PERFORM frm_display. "显示ALV 92 ENDIF. 93 ENDCASE. 94 95 *&---------------------------------------------------------------------* 96 *& FORM FRM_F4_HELP 97 *&---------------------------------------------------------------------* 98 * 打开文件路径 99 *----------------------------------------------------------------------* 100 * --> P1 TEXT 101 * <-- P2 TEXT 102 *----------------------------------------------------------------------* 103 FORM frm_f4_help CHANGING o_fname TYPE rlgrap-filename. 104 DATA: lv_filetab TYPE filetable, 105 lv_waftab LIKE LINE OF lv_filetab, 106 lv_rc TYPE i. 107 108 CALL METHOD cl_gui_frontend_services=>file_open_dialog 109 EXPORTING 110 window_title = '打开文件' 111 initial_directory = 'C:/' 112 CHANGING 113 file_table = lv_filetab 114 rc = lv_rc 115 * USER_ACTION = 116 * FILE_ENCODING = 117 EXCEPTIONS 118 file_open_dialog_failed = 1 119 cntl_error = 2 120 error_no_gui = 3 121 not_supported_by_gui = 4 122 OTHERS = 5. 123 IF sy-subrc <> 0. 124 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 125 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 126 EXIT. 127 ELSE. 128 READ TABLE lv_filetab INTO lv_waftab INDEX 1. 129 o_fname = lv_waftab-filename. 130 CLEAR: lv_filetab, 131 lv_waftab. 132 ENDIF. 133 134 ENDFORM. " FRM_F4_HELP 135 *&---------------------------------------------------------------------* 136 *& FORM FRM_DOWNLOAD_EXCEL 137 *&---------------------------------------------------------------------* 138 * 下载EXCEL模版 139 *----------------------------------------------------------------------* 140 * --> P1 TEXT 141 * <-- P2 TEXT 142 *----------------------------------------------------------------------* 143 FORM frm_download_excel USING lv_objid TYPE wwwdatatab-objid. 144 DATA: l_filename TYPE string, 145 lv_filename TYPE string, 146 lv_path TYPE string, 147 lv_fullpath TYPE string. 148 149 DATA: lv_obj LIKE wwwdatatab, 150 lv_destination LIKE rlgrap-filename. 151 DATA: lv_rc LIKE sy-subrc. 152 DATA: lv_error TYPE char255. 153 154 SELECT SINGLE * FROM wwwdata 155 INTO CORRESPONDING FIELDS OF lv_obj 156 WHERE objid = lv_objid. 157 158 CONCATENATE lv_obj-text '.XLSX' INTO l_filename. 159 160 CALL METHOD cl_gui_frontend_services=>file_save_dialog 161 EXPORTING 162 default_file_name = l_filename 163 file_filter = cl_gui_frontend_services=>filetype_excel 164 prompt_on_overwrite = 'X' 165 CHANGING 166 filename = lv_filename 167 path = lv_path 168 fullpath = lv_fullpath 169 EXCEPTIONS 170 cntl_error = 1 171 error_no_gui = 2 172 not_supported_by_gui = 3 173 invalid_default_file_name = 4 174 OTHERS = 5. 175 176 IF lv_fullpath <> ''. 177 lv_destination = lv_fullpath. 178 CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' 179 EXPORTING 180 key = lv_obj 181 destination = lv_destination 182 IMPORTING 183 rc = lv_rc. 184 ENDIF. 185 186 ENDFORM. 187 188 *&---------------------------------------------------------------------* 189 *& FORM FRM_READ_EXCEL 190 *&---------------------------------------------------------------------* 191 * 调用上传文件函数 192 *----------------------------------------------------------------------* 193 *FORM frm_read_excel TABLES l_tab 194 * USING pv_file TYPE rlgrap-filename 195 * lv_i_begin_col TYPE i 196 * lv_i_begin_row TYPE i 197 * lv_i_end_col TYPE i 198 * lv_i_end_row TYPE i 199 * CHANGING l_wa TYPE any. 200 * 201 * DATA: lt_excel TYPE TABLE OF alsmex_tabline WITH HEADER LINE. 202 * FIELD-SYMBOLS <lfs_value> TYPE any. 203 * 204 * CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' 205 * EXPORTING 206 * filename = pv_file "文件路径 207 * i_begin_col = lv_i_begin_col "开始列 208 * i_begin_row = lv_i_begin_row "开始行 209 * i_end_col = lv_i_end_col "结束列 210 * i_end_row = lv_i_end_row "结束行 211 * TABLES 212 * intern = lt_excel 213 * EXCEPTIONS 214 * inconsistent_parameters = 1 215 * upload_ole = 2 216 * OTHERS = 3. 217 * IF sy-subrc <> 0. 218 * MESSAGE s001(00) WITH '读取 EXCEL 文件失败' DISPLAY LIKE 'E'. 219 * STOP. 220 * ENDIF. 221 * 222 * "对固定格式的数据进一步处理,以存放至数据库表格中。 223 * LOOP AT lt_excel. 224 * ASSIGN COMPONENT lt_excel-col OF STRUCTURE l_wa TO <lfs_value>. 225 * "系统将字符串lt_excel-col的组件l_wa分配给字段符号<lfs_value> 226 * IF sy-subrc = 0 . 227 * <lfs_value> = lt_excel-value. 228 * ENDIF. 229 * AT END OF row. 230 * APPEND l_wa TO l_tab. 231 * CLEAR l_wa. 232 * ENDAT. 233 * ENDLOOP. 234 *ENDFORM. 235 236 237 FORM frm_read_excel TABLES l_tab 238 USING pv_file TYPE rlgrap-filename 239 lv_i_begin_col TYPE i 240 lv_i_begin_row TYPE i 241 lv_i_end_col TYPE i 242 lv_i_end_row TYPE i 243 CHANGING l_wa TYPE any. 244 245 DATA: lt_excel TYPE TABLE OF alsmex_tabline WITH HEADER LINE. 246 FIELD-SYMBOLS <lfs_value> TYPE any. 247 248 CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' 249 EXPORTING 250 filename = pv_file "文件路径 251 i_begin_col = lv_i_begin_col "开始列 252 i_begin_row = lv_i_begin_row "开始行 253 i_end_col = lv_i_end_col "结束列 254 i_end_row = lv_i_end_row "结束行 255 TABLES 256 intern = lt_excel 257 EXCEPTIONS 258 inconsistent_parameters = 1 259 upload_ole = 2 260 OTHERS = 3. 261 IF sy-subrc <> 0. 262 MESSAGE s001(00) WITH '读取 EXCEL 文件失败' DISPLAY LIKE 'E'. 263 STOP. 264 ENDIF. 265 266 "对固定格式的数据进一步处理,以存放至数据库表格中。 267 LOOP AT lt_excel. 268 ASSIGN COMPONENT lt_excel-col OF STRUCTURE l_wa TO <lfs_value>. 269 "系统将字符串LT_EXCEL-COL的组件L_WA分配给字段符号<LFS_VALUE> 270 IF sy-subrc = 0 . 271 <lfs_value> = lt_excel-value. 272 ENDIF. 273 AT END OF row. 274 APPEND l_wa TO l_tab. 275 CLEAR l_wa. 276 ENDAT. 277 ENDLOOP. 278 ENDFORM. 279 280 *&---------------------------------------------------------------------* 281 *& Form FRM_FIELDCAT 282 *&---------------------------------------------------------------------* 283 *& ALV字段显示 284 *&---------------------------------------------------------------------* 285 *& --> p1 text 286 *& <-- p2 text 287 *&---------------------------------------------------------------------* 288 FORM frm_set_fieldcat CHANGING VALUE(ot_fieldcat) TYPE lvc_t_fcat. 289 DATA:lv_Unit_price TYPE char20. 290 DATA:l_pos TYPE i VALUE 2, 291 ls_fieldcat TYPE lvc_s_fcat. 292 DEFINE alv_append_field. 293 CLEAR ls_fieldcat. 294 ls_fieldcat-col_pos = l_pos. 295 ls_fieldcat-fieldname = &1 . 296 ls_fieldcat-reptext = &2 . 297 APPEND ls_fieldcat TO ot_fieldcat. 298 l_pos = l_pos + 1 . 299 END-OF-DEFINITION. 300 "拼接 Unit_price 301 REFRESH ot_fieldcat. 302 CLEAR gs_fieldcat. 303 ls_fieldcat-fieldname = 'CHECKBOX'. "多选框 304 ls_fieldcat-reptext = '请选择'. "文本 305 ls_fieldcat-edit = 'X'. "可编辑 306 ls_fieldcat-checkbox = 'X'. "多选 307 APPEND ls_fieldcat TO ot_fieldcat. 308 *ALV显示EXCEL模板字段值 309 ALV_APPEND_FIELD 'STATE' '状态' . 310 ALV_APPEND_FIELD 'MESSAGE' '消息' . 311 ALV_APPEND_FIELD 'BNAME' '账号名' . 312 ALV_APPEND_FIELD 'NAME_LAST' '用户名' . 313 ALV_APPEND_FIELD 'PASSWORD' '密码' . 314 ALV_APPEND_FIELD 'FUNCTION' '职能' . 315 ALV_APPEND_FIELD 'DEPARTMENT' '部门' . 316 ALV_APPEND_FIELD 'PROFILE' '权限' . 317 ENDFORM. 318 319 *&---------------------------------------------------------------------* 320 *& Form frm_layout 321 *&---------------------------------------------------------------------* 322 *& ALV页面显示 323 *&---------------------------------------------------------------------* 324 *& --> p1 text 325 *& <-- p2 text 326 *&---------------------------------------------------------------------* 327 FORM frm_layout . 328 CLEAR gs_layout. 329 gs_layout-zebra = 'X'. "斑马线显示 330 gs_layout-cwidth_opt = 'X'. "自适应宽度 331 gs_layout-sel_mode = 'A'. "选择模式:多选/单选 332 ENDFORM. 333 334 *&---------------------------------------------------------------------* 335 *& Form fem_display 336 *&---------------------------------------------------------------------* 337 *& 调用ALV函数 338 *&---------------------------------------------------------------------* 339 *& --> p1 text 340 *& <-- p2 text 341 *&---------------------------------------------------------------------* 342 FORM frm_display . 343 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' 344 EXPORTING 345 i_callback_program = sy-repid "按钮 346 i_callback_pf_status_set = 'SET_PF_STATUS' "按钮 347 i_callback_user_command = 'ALV_USER_COMMAND' "按钮 348 is_layout_lvc = gs_layout "layout工作区 349 it_fieldcat_lvc = gt_fieldcat "fieldcat结构 350 i_save = 'A' "保存 351 TABLES 352 t_outtab = gt_itab[] "取gt_itab取数 353 EXCEPTIONS 354 program_error = 1 355 OTHERS = 2. 356 IF sy-subrc <> 0. 357 * Implement suitable error handling here 358 ENDIF. 359 360 ENDFORM. 361 362 *&---------------------------------------------------------------------* 363 *& 364 *&---------------------------------------------------------------------* 365 * "添加STANDARD GUI 366 *----------------------------------------------------------------------* 367 FORM set_pf_status USING pt_exclude TYPE kkblo_t_extab. 368 DATA:lt_exclude TYPE kkblo_t_extab WITH HEADER LINE. 369 SET PF-STATUS 'STANDARD' EXCLUDING lt_exclude[]. 370 ENDFORM. 371 372 *&---------------------------------------------------------------------* 373 *& 374 *&---------------------------------------------------------------------* 375 * 按钮事件 376 *----------------------------------------------------------------------* 377 FORM alv_user_command USING r_ucomm LIKE sy-ucomm 378 rs_selfield TYPE slis_selfield. 379 DATA:ref_grid TYPE REF TO cl_gui_alv_grid. 380 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' 381 IMPORTING 382 e_grid = ref_grid. 383 CALL METHOD ref_grid->check_changed_data. "更改 384 CALL METHOD ref_grid->refresh_table_display. "刷新内表 385 386 CASE r_ucomm. 387 WHEN '&ALL1'. "全选 388 LOOP AT gt_itab[] ASSIGNING <fs_itab>." INTO gt_itab." 389 <fs_itab>-checkbox = 'X'. 390 ENDLOOP. 391 WHEN '&SAL1'. "取消全选 392 LOOP AT gt_itab[] ASSIGNING <fs_itab>. 393 <fs_itab>-checkbox = ''. 394 ENDLOOP. 395 WHEN 'SET'. 396 PERFORM frm_bipi. "调用BAPI 397 PERFORM re_alv. "刷新ALV 398 ENDCASE. 399 400 CALL METHOD ref_grid->check_changed_data. 401 CALL METHOD ref_grid->refresh_table_display. " 刷新 402 rs_selfield-refresh = 'X'. "刷新内表 403 404 ENDFORM. 405 406 *&---------------------------------------------------------------------* 407 *& FORM FRM_CO01_BIPI 408 *&---------------------------------------------------------------------* 409 * BAPI 410 *----------------------------------------------------------------------* 411 FORM frm_bipi. 412 413 "声明BAPI相关参数 414 DATA: ls_username LIKE bapibname, "账户名 415 ls_password LIKE bapipwd, "密码 416 ls_logondata LIKE bapilogond, "登录数据 417 ls_address LIKE bapiaddr3, "用户名 418 lt_profile TYPE TABLE OF bapiprof, 419 ls_profile LIKE LINE OF lt_profile, 420 lt_return LIKE STANDARD TABLE OF bapiret2 WITH HEADER LINE, "返回值 421 ls_return LIKE LINE OF lt_return. 422 DATA: lv_username LIKE bapibname-bapibname. 423 DATA: lv_dest TYPE rfcdest. 424 425 DATA: lv_errmsg TYPE string, 426 lv_msg TYPE string, 427 message1 TYPE string. 428 429 "循环gt_itab中checkbox = 'X' AND state <> 'E'条件的值 430 LOOP AT gt_itab ASSIGNING <fs_itab> WHERE checkbox = 'X'." AND state <> 'E'. 431 432 "数据赋值 433 ls_username-bapibname = <fs_itab>-bname. "账户名 434 ls_logondata-ustyp = 'A'. "用户类型 435 ls_password-bapipwd = <fs_itab>-password. "密码 436 ls_address-lastname = <fs_itab>-name_last. "姓名 437 ls_address-function = <fs_itab>-function. "职能 438 ls_address-department = <fs_itab>-department. "部门 439 440 *初始化相应的变量 441 CLEAR: lt_return[] , ls_return , lt_profile[] , ls_profile. 442 CLEAR:<fs_itab>-state. 443 CLEAR:<fs_itab>-message. "清空消息字段 444 445 *创建用户 446 CALL FUNCTION 'BAPI_USER_CREATE1' 447 EXPORTING 448 username = ls_username 449 logondata = ls_logondata 450 password = ls_password 451 address = ls_address 452 TABLES 453 return = lt_return. 454 455 "执行结果信息处理 456 CLEAR lv_errmsg. 457 LOOP AT lt_return WHERE type = 'E' OR type = 'A'. 458 CLEAR lv_msg. 459 CALL FUNCTION 'MESSAGE_TEXT_BUILD' "调用消息函数 460 EXPORTING 461 msgid = lt_return-id 462 msgnr = lt_return-number 463 msgv1 = lt_return-message_v1 464 msgv2 = lt_return-message_v2 465 msgv3 = lt_return-message_v3 466 msgv4 = lt_return-message_v4 467 IMPORTING 468 message_text_output = lv_msg. 469 470 lv_errmsg = |{ lv_errmsg }{ lv_msg };|. 471 ENDLOOP. 472 473 READ TABLE lt_return INTO ls_return WITH KEY type = 'E'. 474 IF sy-subrc = 0. 475 "回滚事务 476 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 477 <fs_itab>-state = ls_return-type. 478 <fs_itab>-message = lv_errmsg. 479 ELSE. 480 REFRESH:lt_return. 481 lv_username = <fs_itab>-bname. 482 ls_profile-bapiprof = <fs_itab>-profile. 483 ls_profile-bapitype = 'C'. 484 ls_profile-bapiaktps = 'X'. 485 APPEND ls_profile TO lt_profile. 486 "用户权限 487 CALL FUNCTION 'BAPI_USER_PROFILES_ASSIGN' DESTINATION lv_dest 488 EXPORTING 489 username = lv_username 490 TABLES 491 profiles = lt_profile 492 return = lt_return. 493 READ TABLE lt_return INTO ls_return WITH KEY type = 'E'. 494 IF sy-subrc = 0. 495 WRITE '将配置文件分配给用户错误'. 496 ELSE. 497 ENDIF. 498 ENDIF. 499 IF lv_errmsg IS NOT INITIAL. 500 "回滚事务 501 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 502 <fs_itab>-state = ls_return-type. 503 <fs_itab>-message = lv_errmsg. 504 ELSE. 505 "提交事务 506 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 507 EXPORTING 508 wait = 'X'. 509 <fs_itab>-state = 'S'. 510 <fs_itab>-message = '创建成功'. 511 ENDIF. 512 513 ENDLOOP. 514 ENDFORM. 515 516 *&---------------------------------------------------------------------* 517 *& FORM re_alv 518 *&---------------------------------------------------------------------* 519 * ALV按钮事件后自动刷新列宽度 520 *----------------------------------------------------------------------* 521 FORM re_alv. 522 DATA:lv_grid TYPE REF TO cl_gui_alv_grid, 523 ls_layout TYPE lvc_s_layo. "这一句很关键 524 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' 525 IMPORTING 526 e_grid = lv_grid. 527 * 获取ALV变化过后的布局参数 528 CALL METHOD lv_grid->get_frontend_layout 529 IMPORTING 530 es_layout = ls_layout. 531 532 * 重新回写自适应宽度 533 ls_layout-cwidth_opt = 'X'. 534 * 回写ALV变化过后的布局参数 535 CALL METHOD lv_grid->set_frontend_layout 536 EXPORTING 537 is_layout = ls_layout. 538 539 * 刷新ALV布局 540 CALL METHOD lv_grid->refresh_table_display. 541 542 ENDFORM. 543 544 545 *Messages 546 *---------------------------------------------------------- 547 * 548 * Message class: 00 549 *001 &1&2&3&4&5&6&7&8
导入模板
社会很单纯,复杂的是人
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏