ABAP-SAP 账号批量创建分配权限程序
代码:
*&---------------------------------------------------------------------*
*& Report ZUSER001
*&---------------------------------------------------------------------*
************************************************************************
***账号数据结构***
TYPES:BEGIN OF ty_user,
username TYPE bapibname-bapibname,
title_p TYPE bapiaddr3-title_p,
lastname TYPE bapiaddr3-lastname,
firstname TYPE bapiaddr3-firstname,
langu_p TYPE bapiaddr3-langu_p,
function TYPE bapiaddr3-function,
department TYPE bapiaddr3-department,
tel1_numbr TYPE bapiaddr3-tel1_numbr,
useralias TYPE bapialias-useralias,
bapipwd TYPE char40,
gltgv TYPE bapilogond-gltgv,
gltgb TYPE bapilogond-gltgb,
tzone TYPE bapilogond-tzone,
langu TYPE bapidefaul-langu,
dcpfm TYPE bapidefaul-dcpfm,
datfm TYPE bapidefaul-datfm,
timefm TYPE bapidefaul-timefm,
spld TYPE bapidefaul-spld,
splg TYPE bapidefaul-splg,
END OF ty_user.
***账号角色结构***
TYPES:BEGIN OF ty_suer_assign,
username TYPE bapibname-bapibname, "用户名
agr_name TYPE bapiagr-agr_name, "角色名
from_dat TYPE bapiagr-from_dat,
to_dat TYPE bapiagr-to_dat,
END OF ty_suer_assign.
***Excel数据存储结构***
TYPES:BEGIN OF zalsmex_tabline,
row(7) TYPE n,
col(4) TYPE n,
value TYPE char3000,
END OF zalsmex_tabline .
************************************************************************
** 声明内表和工作区 **
************************************************************************
DATA:gt_ty_user TYPE TABLE OF ty_USER,
gs_ty_user TYPE ty_user,
gt_ty_user_assign TYPE TABLE OF ty_suer_assign,
gs_ty_user_assign TYPE ty_suer_assign.
*@---------------------------------------------------------------------*
DATA:gt_alv_table TYPE TABLE OF bapiret2,
gs_alv_table TYPE bapiret2.
*@---------------------------------------------------------------------*
DATA:gt_activitygroups TYPE TABLE OF bapiagr,
gs_activitygroups TYPE bapiagr,
return_1 TYPE TABLE OF bapiret2.
*@---------------------------------------------------------------------*
DATA:logondata TYPE bapilogond,
password TYPE bapipwd,
defaults TYPE bapidefaul,
address TYPE bapiaddr3,
alias TYPE bapialias,
return TYPE TABLE OF bapiret2.
*@---------------------------------------------------------------------*
*@ ALV相关的变量与内表
TYPE-POOLS:slis,icon.
TYPE-POOLS: ole2.
TABLES sscrfields.
DATA: go_grid TYPE REF TO cl_gui_alv_grid,
gv_repid LIKE sy-repid,
gv_fieldcat TYPE slis_fieldcat_alv,
gv_tabkname TYPE tabname,
gv_command TYPE slis_formname,
gv_title TYPE lvc_title,
gs_setting TYPE lvc_s_glay,
gs_print TYPE slis_print_alv,
gt_listheader TYPE slis_t_listheader,
gt_events TYPE slis_t_event,
gs_event TYPE slis_alv_event,
gt_sort TYPE slis_t_sortinfo_alv,
gs_sort TYPE slis_sortinfo_alv,
gs_layout TYPE lvc_s_layo,
gs_variant TYPE disvariant,
gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gv_field TYPE char30,
gs_color TYPE slis_specialcol_alv,
gv_save TYPE c,
gv_length TYPE i,
gv_pos TYPE i.
*-----------------------------------------------------------------------
DATA:answer TYPE c,
it_raw TYPE truxs_t_text_data.
************************************************************************
** 宏定义 Define the macro **
************************************************************************
DEFINE mcr_range.
CLEAR &1.
&1-sign = 'I'.
&1-option = &2.
&1-low = &3.
&1-high = &4.
APPEND &1.
END-OF-DEFINITION.
*-----------------------------------------------------------------------
* Selection Screen
*-----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text006.
SELECTION-SCREEN:
PUSHBUTTON /2(79) button1 USER-COMMAND but1. "40是按钮长度
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text002 .
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (12) text001.
SELECTION-SCREEN POSITION 18.
PARAMETERS: p_file TYPE rlgrap-filename.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1..
*-----------------------------------------------------------------------
* At Selection Screen
*-----------------------------------------------------------------------
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME' "F4功能
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
************************************************************************
AT SELECTION-SCREEN.
CASE sscrfields.
WHEN 'BUT1'.
PERFORM sub_DOWNLOAD_TEMPLATE.
WHEN OTHERS.
ENDCASE.
************************************************************************
IF p_file IS INITIAL AND sscrfields <> 'BUT1'.
MESSAGE '请填写EXCEL批导文件路径!' TYPE 'E'.
EXIT.
ENDIF.
************************************************************************
INITIALIZATION.
text001 = '导入文件路径:'.
text002 = '选择导入文件'.
text006 = '模板下载'.
button1 = '》》》下载EXCEL模版《《《'.
************************************************************************
END-OF-SELECTION.
IF sy-subrc = 0.
PERFORM sub_create_fieldcat.
PERFORM sub_init_layout .
PERFORM sub_display_as_alv.
ENDIF.
************************************************************************
START-OF-SELECTION.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
textline1 = '请确认是否导入用户模板数据!'
titel = '用户模板数据导入'
IMPORTING
answer = answer.
CASE answer.
WHEN 'J'.
PERFORM import_data.
PERFORM process_data.
WHEN OTHERS.
RETURN.
ENDCASE.
**&---------------------------------------------------------------------*
**& Form import_data
**&---------------------------------------------------------------------*
**& 获取Excel数据
**&---------------------------------------------------------------------*
**& --> p1 text
**& <-- p2 text
**&---------------------------------------------------------------------*
FORM import_data .
* 局部变量的定义 用来接收EXCEL的数据
DATA: lt_excel TYPE TABLE OF zalsmex_tabline,
ls_excel TYPE zalsmex_tabline.
DATA : lV_index TYPE i.
FIELD-SYMBOLS : <fs>.
CLEAR:gs_ty_user,gt_ty_user_assign,gs_ty_user,gs_ty_user_assign.
* 选择文件后做后续处理
CHECK p_file IS NOT INITIAL.
*********************读取用户账号数据************************************
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1 "开始列
i_begin_row = 2 "开始行
i_end_col = 19 "终止列
i_end_row = 9999 "终止行
sheet_name = '账号数据'
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
**&---------------------------------------------------------------------*
IF sy-subrc <> 0.
MESSAGE '读取文件异常,请检查模板!!' TYPE 'E' .
EXIT.
ENDIF.
**&---------------------------------------------------------------------*
CLEAR ls_excel.
SORT lt_excel BY row col.
**&---------------------------------------------------------------------*
IF lt_excel IS NOT INITIAL.
SORT lt_excel BY row col.
LOOP AT lt_excel INTO ls_excel.
MOVE ls_excel-col TO lV_index.
ASSIGN COMPONENT lV_index OF STRUCTURE gs_ty_user TO <fs>.
MOVE ls_excel-value TO <fs>.
AT END OF row.
APPEND gs_ty_user TO gt_ty_user.
CLEAR gs_ty_user.
ENDAT.
ENDLOOP.
ENDIF.
*********************读取账号权限数据***********************************
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1 "开始列
i_begin_row = 2 "开始行
i_end_col = 4 "终止列
i_end_row = 9999 "终止行
sheet_name = '账号角色'
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
**&---------------------------------------------------------------------*
IF sy-subrc <> 0.
MESSAGE '读取文件异常,请检查模板!!' TYPE 'E' .
EXIT.
ENDIF.
**&---------------------------------------------------------------------*
IF lt_excel IS NOT INITIAL.
SORT lt_excel BY row col.
LOOP AT lt_excel INTO ls_excel.
MOVE ls_excel-col TO lV_index.
ASSIGN COMPONENT lV_index OF STRUCTURE gs_ty_user_assign TO <fs>.
MOVE ls_excel-value TO <fs>.
AT END OF row.
APPEND gs_ty_user_assign TO gt_ty_user_assign.
CLEAR gs_ty_user_assign.
ENDAT.
ENDLOOP.
ENDIF.
EXIT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form process_data
*&---------------------------------------------------------------------*
*& 数据处理
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM process_data .
***创建用户***
LOOP AT gt_ty_user INTO gs_ty_user.
*&---------------------------------------------------------------------*
logondata-gltgv = gs_ty_user-gltgv.
logondata-gltgb = gs_ty_user-gltgb.
logondata-tzone = gs_ty_user-tzone.
password-bapipwd = gs_ty_user-bapipwd.
defaults-langu = gs_ty_user-langu.
defaults-dcpfm = gs_ty_user-dcpfm.
defaults-datfm = gs_ty_user-datfm.
defaults-timefm = gs_ty_user-timefm.
defaults-spld = gs_ty_user-spld.
defaults-splg = gs_ty_user-splg.
address-title_p = gs_ty_user-title_p.
address-lastname = gs_ty_user-lastname.
address-firstname = gs_ty_user-firstname.
address-langu_p = gs_ty_user-langu_p.
address-function = gs_ty_user-function.
address-department = gs_ty_user-department.
address-tel1_numbr = gs_ty_user-tel1_numbr.
alias-useralias = gs_ty_user-useralias.
*&---------------------------------------------------------------------*
CALL FUNCTION 'BAPI_USER_CREATE1'
EXPORTING
username = gs_ty_user-username
* NAME_IN =
logondata = logondata
password = password
defaults = defaults
address = address
* COMPANY =
* SNC =
* REF_USER =
alias = alias
* EX_ADDRESS =
* UCLASS =
* FORCE_SYSTEM_ASSIGNMENT =
* SELF_REGISTER = ' '
* TECH_USER =
* LOCK_LOCALLY = ' '
* GENERATE_PWD = ' '
* DESCRIPTION =
* IMPORTING
* GENERATED_PASSWORD =
TABLES
* PARAMETER =
return = return
* ADDTEL =
* ADDFAX =
* ADDTTX =
* ADDTLX =
* ADDSMTP =
* ADDRML =
* ADDX400 =
* ADDRFC =
* ADDPRT =
* ADDSSF =
* ADDURI =
* ADDPAG =
* ADDCOMREM =
* GROUPS =
* PARAMETER1 =
* EXTIDHEAD =
* EXTIDPART =
* EXTUID =
.
*&---------------------------------------------------------------------*
APPEND LINES OF return TO gt_alv_table.
CLEAR return.
ENDLOOP.
*&---------------------------------------------------------------------*
***为账号添加权限***
LOOP AT gt_ty_user_assign INTO gs_ty_user_assign.
gs_activitygroups-agr_name = gs_ty_user_assign-agr_name.
gs_activitygroups-from_dat = gs_ty_user_assign-from_dat.
gs_activitygroups-to_dat = gs_ty_user_assign-to_dat.
APPEND gs_activitygroups TO gt_activitygroups.
*&---------------------------------------------------------------------*
AT END OF username.
CALL FUNCTION 'BAPI_USER_ACTGROUPS_ASSIGN'
EXPORTING
username = gs_ty_user_assign-username
TABLES
activitygroups = gt_activitygroups
return = return_1.
CLEAR gt_activitygroups.
APPEND LINES OF return_1 TO gt_alv_table.
CLEAR return_1.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form sub_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM sub_DOWNLOAD_TEMPLATE .
"-----检查系统是否纯在模板
DATA: lv_objname TYPE wwwdata-objid VALUE 'ZFNSD001'.
DATA: ls_objdata TYPE wwwdatatab.
"-----弹出选择存放的路径.
DATA: lv_window_title TYPE string VALUE '文件下载',
lv_default_extension TYPE string VALUE 'xlsx',
lv_default_file_name TYPE string VALUE '销售订单批导模板',
lv_file_filter TYPE string VALUE 'Excel文件(*.xlsx)|*.xlsx|',
lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lv_user_action TYPE i.
DATA: lv_key TYPE wwwdatatab,
lv_destination TYPE rlgrap-filename,
lv_rc TYPE i,
lv_temp TYPE c.
"****----------------------------------------------
CLEAR:ls_objdata.
*从SAP服务器中下载Excel模板
SELECT SINGLE relid
objid
FROM wwwdata "存对象模板的表
INTO CORRESPONDING FIELDS OF ls_objdata
WHERE srtf2 = 0
AND relid = 'MI' "有三种类型 HT MI IT
AND objid = lv_objname. "MONTLYSTOCK
IF sy-subrc <> 0.
MESSAGE 'Excel 模板不存在,请用TCODE:SMW0进行加载' TYPE 'E'.
RETURN.
ENDIF.
IF ls_objdata-objid = space .
MESSAGE 'Excel 模板不存在,请用TCODE:SMW0进行加载' TYPE 'E'.
RETURN.
ENDIF.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = lv_window_title
default_extension = lv_default_extension
default_file_name = lv_default_file_name
file_filter = lv_file_filter
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF lv_user_action = cl_gui_frontend_services=>action_ok .
* 下载模板
SELECT SINGLE *
INTO CORRESPONDING FIELDS OF lv_key
FROM wwwdata
WHERE objid = 'ZFNSD001' .
lv_destination = lv_fullpath.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_key
destination = lv_destination
IMPORTING
rc = lv_rc
CHANGING
temp = lv_temp.
IF lv_rc <> 0.
MESSAGE '下载Excel模板出错' TYPE 'E'.
STOP.
ENDIF.
ELSE.
MESSAGE '已取消选择下载文件!' TYPE 'S'.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form sub_create_fieldcat
*&---------------------------------------------------------------------*
*& 指定 ALV 报表的输出字段目录
*&---------------------------------------------------------------------*
FORM sub_create_fieldcat .
CLEAR gt_fieldcat[].
PERFORM sub_add_fieldcat USING:
'' '' '' '' 'TYPE' '消息类型',
'' '' '' '' 'ID' '消息类',
'' '' '' '' 'NUMBER' '消息编号',
'' '' '' '' 'MESSAGE' '消息文本'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SUB_ADD_FIELDCAT
*&---------------------------------------------------------------------*
* 给ALV字段目录内表添加内容
*----------------------------------------------------------------------*
* -->l_field #字段名称
* -->l_key #是否为KEY
* -->l_edit #编辑状态
* -->l_name #字段描述
*----------------------------------------------------------------------*
FORM sub_add_fieldcat USING lv_key TYPE c
lv_edit TYPE c
lv_reftab TYPE char30
lv_refield TYPE char30
lv_field LIKE gv_field
lv_name TYPE char30.
DATA lv_fieldnm TYPE char50.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = gv_pos.
gs_fieldcat-just = 'C'.
gs_fieldcat-do_sum = 'X'.
gs_fieldcat-tabname = 'RESULT'.
gs_fieldcat-key = lv_key.
gs_fieldcat-edit = lv_edit.
gs_fieldcat-ref_table = lv_reftab.
gs_fieldcat-ref_field = lv_refield.
gs_fieldcat-fieldname = lv_field.
gs_fieldcat-seltext = lv_name. "seltext_l
gs_fieldcat-coltext = lv_name.
CONCATENATE 'GT_RESULT-' lv_field INTO lv_fieldnm.
IF lv_field = 'ICON'.
gs_fieldcat-icon = 'X'.
ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM. "sub_add_fieldcat
*&---------------------------------------------------------------------*
*& Form sub_init_layout
*&---------------------------------------------------------------------*
*& 设置 ALV 的整体布局格式
*&---------------------------------------------------------------------*
FORM sub_init_layout .
CLEAR gs_layout.
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'X'.
gv_repid = sy-repid.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form sub_display_as_alv
*&---------------------------------------------------------------------*
*& 调用FUNCTION输出ALV报表
*&---------------------------------------------------------------------*
FORM sub_display_as_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = gv_repid
i_grid_settings = gs_setting
* i_callback_user_command = 'SUB_USER_COMMAND'
i_callback_pf_status_set = 'SUB_SET_PF_STATUS'
i_save = 'X' "gv_save
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
it_events = gt_events
TABLES
t_outtab = gt_alv_table
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
模板下载链接:
https://download.csdn.net/download/weixin_40289588/63184006
模板
账号数据:
用户名 | 称谓 | 姓 | 名 | 语言(中文1,英文E) | 职能 | 部门 | 电话 | 别名(不可重复) | 新密码 | 有效期自 | 有效期至 | 时区 | 登录语言(中文1,英文E) | 十进制算法 | 日期格式 | 时间格式(12/24h) | 假脱机输出设备 | 立即打印 |
TTTM1 | 0001 | 骏 | 骏骏骏 | 1 | 销售 | 销售信息部 | 12345678901 | SAP1 | Sap123456789 | 20210924 | 99991231 | UTC+8 | 1 | X | 1 | 0 | ZLP01 | X |
TTTM2 | 0002 | 骏 | 骏骏骏2 | 1 | 销售2 | 销售信息部 | 1345678901 | SAP2 | Sap123456789 | 20210924 | 99991231 | UTC+8 | 1 | X | 1 | 0 | ZLP01 | X |
账号角色:
用户名 | 角色名称 | 有效日期从 | 有效日期到 |
TTTM1 | /AIF/CORRECT_DATA | 20210920 | 99991231 |
TTTM1 | /AIF/MSG_STAT_SNAP_SHOT | 20210920 | 99991231 |
TTTM1 | /AIF/PROCESS_OUTB | 20210920 | 99991231 |
TTTM2 | /AIF/CORRECT_DATA | 20210920 | 99991231 |
TTTM2 | /AIF/MSG_STAT_SNAP_SHOT | 20210920 | 99991231 |
TTTM2 | /AIF/PROCESS_OUTB | 20210920 | 99991231 |
TTTM2 | /AIF/ARC_RELOAD | 20210920 | 99991231 |
post SAP-Garson
原文链接:https://blog.csdn.net/weixin_40289588/article/details/121925358文章来自于网络,如果侵犯了您的权益,请联系站长删除!