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_DATA2021092099991231
TTTM1/AIF/MSG_STAT_SNAP_SHOT2021092099991231
TTTM1/AIF/PROCESS_OUTB2021092099991231
TTTM2/AIF/CORRECT_DATA2021092099991231
TTTM2/AIF/MSG_STAT_SNAP_SHOT2021092099991231
TTTM2/AIF/PROCESS_OUTB2021092099991231
TTTM2/AIF/ARC_RELOAD2021092099991231
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值