ABAP 重置用户密码为已知用户的密码
*&---------------------------------------------------------------------*
*& Report ZSSFR_CHANGE_USER_PASSWORD
*&---------------------------------------------------------------------*
*& 参照指定用户的密码,重置所有导入用户的密码为参照用户密码.
*& 2021.04.07 lijq21@qq.com
*&---------------------------------------------------------------------*
REPORT zssfr_change_user_password.
TYPES:BEGIN OF ty_zt,
bname TYPE usr02-bname,
END OF ty_zt.
DATA:i_table TYPE TABLE OF ty_zt,
w_table TYPE ty_zt,
gt_table TYPE TABLE OF usr02,
gw_table TYPE usr02.
"选择屏幕"
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(13) str1 . "参考用户
PARAMETERS p_uname TYPE usr02-bname. " OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text002.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:r_but1 RADIOBUTTON GROUP a1 DEFAULT 'X' USER-COMMAND a.
SELECTION-SCREEN COMMENT 4(20) str6 . "单个用户修改
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(13) str5 . "被修改密码用户
PARAMETERS p_cname TYPE usr02-bname.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b4.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:r_but2 RADIOBUTTON GROUP a1.
SELECTION-SCREEN COMMENT 4(20) str7 . "批量用户修改
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(13) str2 ."导入"
PARAMETERS p_file TYPE rlgrap-filename. " OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(50) str3 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(50) str4 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF BLOCK b3.
INITIALIZATION.
str1 = '被参考密码用户'.
str2 = '导入'.
str3 = '提示: 1 导入文件为 ''Excel 97-2003工作薄(.xls) ''格式'.
str4 = ' 2 导入文件只有一列:''系统用户名'',第一行不处理'.
str5 = '被修改密码用户'.
str6 = '单个用户修改'.
str7 = '批量用户修改'.
text001 = '选择已知密码用户'.
text002 = '单个/批量修改密码'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM open_dialog.
AT SELECTION-SCREEN OUTPUT.
IF r_but1 = 'X'.
LOOP AT SCREEN.
IF screen-name CP '*P_FILE*'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
CLEAR:p_file.
ELSE.
LOOP AT SCREEN.
IF screen-name CP '*P_CNAME*'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
CLEAR:p_cname.
ENDIF.
START-OF-SELECTION.
IF p_uname IS INITIAL.
MESSAGE '被参考密码用户不可为空!' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
PERFORM upload.
END-OF-SELECTION.
FORM open_dialog."选择文件会话。"
DATA:lt_file_table TYPE filetable,
lw_file_table TYPE file_table,
l_rc TYPE i,
l_desktopdirectory TYPE string.
**取桌面路径
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
CHANGING
desktop_directory = l_desktopdirectory.
CALL METHOD cl_gui_cfw=>update_view.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = '选择文件'
default_filename = '*.XLS' "默认excel文件"
initial_directory = 'L_DESKTOPDIRECTORY' "'D:\ ' "默认打开D盘,也可以默认空"
multiselection = '' "文件单选"
CHANGING
file_table = lt_file_table
rc = l_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
CHECK l_rc EQ 1."因为文件单选,所以这里判断一下选择的数量为1"
READ TABLE lt_file_table INDEX 1 INTO p_file.
ENDFORM.
FORM upload.
DATA: it_excel TYPE TABLE OF zalsmex_tabline,
w_excel TYPE zalsmex_tabline,
num_col TYPE i,
lv_pwdsaltedhash TYPE pwd_hash_string,
num_tab(6) TYPE c,
str_line1 TYPE string.
FIELD-SYMBOLS:<fs>.
CLEAR:lv_pwdsaltedhash.
SELECT SINGLE pwdsaltedhash FROM usr02 INTO lv_pwdsaltedhash WHERE bname = p_uname.
IF sy-subrc NE 0.
MESSAGE i000(oo) WITH '被用来参考密码的用户不存在' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
IF r_but1 = 'X'.
IF p_cname IS INITIAL.
MESSAGE '被修改密码用户名不能为空!' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
CLEAR:w_table.
w_table-bname = p_cname.
APPEND w_table TO i_table.
ELSE.
IF p_file IS INITIAL.
MESSAGE '文件地址不可为空!' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 1
i_end_row = 10000
TABLES
intern = it_excel.
IF it_excel IS INITIAL.
MESSAGE i000(oo) WITH 'Excel表格不能为空' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
CLEAR:i_table.
SORT it_excel BY zrow zcol.
LOOP AT it_excel INTO w_excel.
num_col = w_excel-zcol.
ASSIGN COMPONENT num_col OF STRUCTURE w_table TO <fs>.
<fs> = w_excel-zvalue.
AT END OF zrow.
APPEND w_table TO i_table.
CLEAR:w_table.
ENDAT.
CLEAR:w_excel.
ENDLOOP.
ENDIF.
LOOP AT i_table INTO w_table.
*--系统管理员账号不能被修改.
IF w_table-bname = 'DDIC' OR w_table-bname = 'SAP*' OR w_table-bname = 'SYSADM'.
CONTINUE.
ENDIF.
gw_table-bname = w_table-bname.
gw_table-pwdchgdate = sy-datum.
gw_table-pwdsetdate = sy-datum.
gw_table-pwdsaltedhash = lv_pwdsaltedhash.
APPEND gw_table TO gt_table.
CLEAR:gw_table,w_table.
ENDLOOP.
"将数据库中内容更新"
DATA: lv_num TYPE i.
CLEAR : gw_table.
LOOP AT gt_table INTO gw_table.
UPDATE usr02 SET pwdchgdate = gw_table-pwdchgdate
pwdsetdate = gw_table-pwdsetdate
pwdsaltedhash = gw_table-pwdsaltedhash
WHERE bname = gw_table-bname.
IF sy-subrc = 0.
lv_num = lv_num + 1.
ENDIF.
ENDLOOP.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
num_tab = lv_num .
CONDENSE num_tab NO-GAPS.
CONCATENATE '成功修改账号' num_tab '条' INTO str_line1 .
MESSAGE s000(oo) WITH str_line1.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDFORM.
文章来自于网络,如果侵犯了您的权益,请联系站长删除!