*&---------------------------------------------------------------------* *& Report Name : /EUTIN/DOWNLOAD_ROLES *& Title : Download Roles *& Developer : EUTINM - 20190521 16:29 *& Development Class : /EUTIN/TOOLS *& Description : *& Download content of roles *& *&---------------------------------------------------------------------* *& CHANGE HISTORY *&---------------------------------------------------------------------* *& Date Description *&---------------------------------------------------------------------* *& *& *& *& *&---------------------------------------------------------------------* REPORT /eutin/download_roles NO STANDARD PAGE HEADING. CONSTANTS: con_title TYPE sy-title VALUE 'Content of Roles', con_agr_name TYPE agr_name VALUE '#'. SELECT-OPTIONS: roles FOR con_agr_name OBLIGATORY. PARAMETERS: prefix TYPE string LOWER CASE, download RADIOBUTTON GROUP sel DEFAULT 'X', upload RADIOBUTTON GROUP sel. INITIALIZATION. PERFORM init. START-OF-SELECTION. PERFORM main. *&---------------------------------------------------------------------* *& Form INIT *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM init. DATA: ls_roles LIKE LINE OF roles. sy-title = con_title. CLEAR: roles[], ls_roles. ls_roles-sign = 'I'. ls_roles-option = 'CP'. ls_roles-low = '*DEVELOP*'. INSERT ls_roles INTO TABLE roles. IF sy-subrc NE 0. MESSAGE e252(s#) WITH 'Unexpected error:' 'FORM INIT' 'INSERT #1' sy-subrc. ENDIF. CONCATENATE sy-sysid sy-datum sy-uzeit 'Role' space INTO prefix SEPARATED BY '_'. ENDFORM. "init *&---------------------------------------------------------------------* *& Form MAIN *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM main. TYPES: BEGIN OF ts_agr_name, agr_name TYPE agr_define-agr_name, END OF ts_agr_name. DATA: lr_data_type TYPE REF TO data, lt_agr_name TYPE STANDARD TABLE OF ts_agr_name WITH DEFAULT KEY, lt_files TYPE filetable, lt_sel_agr_name TYPE RANGE OF agr_define-agr_name, ls_sel_agr_name LIKE LINE OF lt_sel_agr_name, lv_data_type TYPE fupararef-structure, lv_filename TYPE string, lv_path TYPE string, lv_fullpath TYPE string, lv_subrc TYPE sysubrc, lv_agr_uploaded TYPE c LENGTH 1, lv_agr_generated TYPE c LENGTH 1, lv_msgv TYPE c LENGTH 50, lv_message TYPE string, lv_uploaded_agr TYPE agr_define-agr_name, lv_result TYPE char01, lv_number_agrs TYPE i. FIELD-SYMBOLS: LIKE LINE OF lt_agr_name, LIKE LINE OF lt_files, TYPE any. *--- the data type of parameter FILENAME_FOR_AGR variates in function modules *--- PRGN_DOWNLOAD_AGR and PRGN_UPLOAD_AGR depending on the SAP_BASIS release *--- and it's patch level ==> get it assigned dynamically!!! CLEAR lv_data_type. SELECT SINGLE structure INTO lv_data_type FROM fupararef WHERE funcname EQ 'PRGN_DOWNLOAD_AGR' AND r3state EQ 'A' AND parameter EQ 'FILENAME_FOR_AGR' AND paramtype EQ 'I'. IF sy-subrc NE 0 OR lv_data_type IS INITIAL. MESSAGE e252(s#) WITH 'Unexpected error:' 'FORM MAIN' 'FUNC PRGN_DOWNLOAD_AGR' 'Parameter FILENAME_FOR_AGR missing'. ENDIF. TRY. CREATE DATA lr_data_type TYPE (lv_data_type). UNASSIGN . ASSIGN lr_data_type->* TO . IF IS NOT ASSIGNED. MESSAGE e252(s#) WITH 'Unexpected error:' 'FORM MAIN' 'ASSIGN' 'unassigned'. ENDIF. CATCH cx_root. MESSAGE e252(s#) WITH 'Unexpected error:' 'FORM MAIN' 'CREATE DATA' 'CX_ROOT'. ENDTRY. CASE 'X'. WHEN download. CLEAR . cl_gui_frontend_services=>file_save_dialog( * EXPORTING * window_title = * default_extension = * default_file_name = * with_encoding = * file_filter = * initial_directory = * prompt_on_overwrite = 'X' CHANGING filename = lv_filename path = lv_path fullpath = lv_fullpath * user_action = * file_encoding = EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 * invalid_default_file_name = 4 OTHERS = 5 ). IF sy-subrc NE 0. CASE sy-subrc. WHEN 1. lv_msgv = 'CNTL_ERROR'. WHEN 2. lv_msgv = 'ERROR_NO_GUI'. WHEN 3. lv_msgv = 'NOT_SUPPORTED_BY_GUI'. WHEN 4. lv_msgv = 'INVALID_DEFAULT_FILE_NAME'. WHEN OTHERS. lv_msgv = 'OTHERS'. ENDCASE. MESSAGE s252(s#) WITH 'Unexpected error:' 'FORM MAIN' 'METH FILE_SAVE_DIALOG' lv_msgv DISPLAY LIKE 'E'. RETURN. ENDIF. IF lv_fullpath IS INITIAL. MESSAGE 'Abborted by user' TYPE 'S' DISPLAY LIKE 'W'. RETURN. ENDIF. *--- determine requested composite roles and all single roles CLEAR lt_agr_name[]. SELECT agr_name INTO TABLE lt_agr_name FROM agr_define WHERE agr_name IN roles. IF sy-subrc NE 0. MESSAGE 'Nothing selected' TYPE 'S'. RETURN. ENDIF. IF lt_agr_name[] IS NOT INITIAL. SELECT child_agr APPENDING TABLE lt_agr_name FROM agr_agrs WHERE agr_name IN roles. ENDIF. *--- cleanup and condense SORT lt_agr_name ASCENDING BY agr_name. DELETE ADJACENT DUPLICATES FROM lt_agr_name COMPARING agr_name. *--- download determined roles LOOP AT lt_agr_name ASSIGNING . CLEAR lv_message. lv_filename = -agr_name. REPLACE ALL OCCURRENCES OF '/' IN lv_filename WITH '_' IN CHARACTER MODE. CONCATENATE lv_filename '.SAP' INTO lv_filename. IF prefix IS NOT INITIAL. CONCATENATE prefix lv_filename INTO lv_filename. ENDIF. CONCATENATE lv_path lv_filename INTO . CALL FUNCTION 'PRGN_DOWNLOAD_AGR' EXPORTING filename_for_agr = filetype_for_agr = 'ASC' activity_group = -agr_name with_user_assignment = ' ' with_authorization_data = 'X' * IMPORTING * return = * TABLES * FILE_CONTENT = * FILE_ENCODING = EXCEPTIONS activity_group_does_not_exist = 1 file_write_error = 2 file_open_error = 3 file_general_error = 4 not_authorized = 5 OTHERS = 6. lv_subrc = sy-subrc. IF sy-subrc NE 0. CASE sy-subrc. WHEN 1. lv_msgv = 'ACTIVITY_GROUP_DOES_NOT_EXIST'. WHEN 2. lv_msgv = 'FILE_WRITE_ERROR'. WHEN 3. lv_msgv = 'FILE_OPEN_ERROR'. WHEN 4. lv_msgv = 'FILE_GENERAL_ERROR'. WHEN 5. lv_msgv = 'NOT_AUTHORIZED'. WHEN OTHERS. lv_msgv = 'OTHERS'. ENDCASE. MESSAGE e252(s#) WITH 'Unexpected error:' 'FORM MAIN' 'FUNC PRGN_DOWNLOAD_AGR' lv_msgv INTO lv_message. ENDIF. *--- output log SKIP 1. WRITE: /1 'Role ..............:', -agr_name, /5 'File Name .....:', , /5 'Return Code ...:', lv_subrc LEFT-JUSTIFIED. IF lv_message IS NOT INITIAL. WRITE: /5 'Message .......:', /7 lv_message. ENDIF. SKIP 1. ULINE. ENDLOOP. WHEN upload. CLEAR: lt_files[], lv_subrc. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING * window_title = * default_extension = * default_filename = file_filter = 'SAP Roles (*.SAP)|*.SAP|' * with_encoding = * initial_directory = multiselection = 'X' CHANGING file_table = lt_files[] rc = lv_subrc * user_action = * file_encoding = EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. IF sy-subrc NE 0. CASE sy-subrc. WHEN 1. lv_msgv = 'FILE_OPEN_DIALOG_FAILED'. WHEN 2. lv_msgv = 'CNTL_ERROR'. WHEN 3. lv_msgv = 'ERROR_NO_GUI'. WHEN 4. lv_msgv = 'NOT_SUPPORTED_BY_GUI'. WHEN OTHERS. lv_msgv = 'OTHERS'. ENDCASE. MESSAGE s252(s#) WITH 'Unexpected error:' 'FORM MAIN' 'METH FILE_OPEN_DIALOG' lv_msgv DISPLAY LIKE 'E'. RETURN. ENDIF. IF lt_files[] IS INITIAL OR lv_subrc EQ 0. MESSAGE 'Abborted by user' TYPE 'S' DISPLAY LIKE 'W'. RETURN. ENDIF. *--- upload selected files LOOP AT lt_files ASSIGNING . = . CLEAR: lv_uploaded_agr, lv_number_agrs, lv_agr_uploaded, lv_agr_generated. CALL FUNCTION 'PRGN_UPLOAD_AGR' EXPORTING filename_for_agr = filetype_for_agr = 'ASC' upload_user_assignment = ' ' upload_description = 'X' upload_auth_data = 'X' upload_menu_data = 'X' upload_child_agrs = 'X' * SET_TARGET_SYSTEM = ' ' * TARGET_SYSTEM = ' ' * FILE_ENCODING = IMPORTING number_of_agrs = lv_number_agrs single_selected_agr = lv_uploaded_agr EXCEPTIONS file_open_error = 1 file_read_error = 2 invalid_type = 3 no_batch = 4 unknown_error = 5 not_authorized = 6 activity_group_enqueued = 7 illegal_release = 8 no_valid_data = 9 action_cancelled = 10 OTHERS = 11. lv_subrc = sy-subrc. IF sy-subrc NE 0. CASE sy-subrc. WHEN 1. lv_msgv = 'FILE_OPEN_ERROR'. WHEN 2. lv_msgv = 'FILE_READ_ERROR'. WHEN 3. lv_msgv = 'INVALID_TYPE'. WHEN 4. lv_msgv = 'NO_BATCH'. WHEN 5. lv_msgv = 'UNKNOWN_ERROR'. WHEN 6. lv_msgv = 'NOT_AUTHORIZED'. WHEN 7. lv_msgv = 'ACTIVITY_GROUP_ENQUEUED'. WHEN 8. lv_msgv = 'ILLEGAL_RELEASE'. WHEN 9. lv_msgv = 'NO_VALID_DATA'. WHEN 10. lv_msgv = 'ACTION_CANCELLED'. WHEN OTHERS. lv_msgv = 'OTHERS'. ENDCASE. MESSAGE e252(s#) WITH 'Unexpected error:' 'FORM MAIN' 'FUNC PRGN_UPLOAD_AGR' lv_msgv INTO lv_message. ELSE. lv_agr_uploaded = 'X'. ENDIF. *--- generate profile IF lv_agr_uploaded EQ 'X' AND lv_uploaded_agr IS NOT INITIAL. CLEAR: lt_sel_agr_name[], ls_sel_agr_name. ls_sel_agr_name-sign = 'I'. ls_sel_agr_name-option = 'EQ'. ls_sel_agr_name-low = lv_uploaded_agr. INSERT ls_sel_agr_name INTO TABLE lt_sel_agr_name. IF sy-subrc NE 0. MESSAGE e252(s#) WITH 'Unexpected error:' 'FORM MAIN' 'INSERT #1' sy-subrc. ENDIF. SUBMIT sapprofc_new "pragma or pseudo comment CI_SUBMIT: Okay WITH prt_gen EQ space WITH prt_pfl EQ space WITH prt_ber EQ space WITH prt_all EQ 'X' WITH prt_akt EQ space WITH sel_sht IN lt_sel_agr_name WITH chg_on EQ 'X' WITH text_on EQ space WITH auto_gen EQ 'X' AND RETURN. IF sy-subrc NE 0. lv_message = 'Report SAPPROFC_NEW returned with error status'. ELSE. lv_agr_generated = 'X'. ENDIF. ENDIF. *--- output log SKIP 1. WRITE: /1 'File Name uploaed .........:', , /5 'Single role name ......:', lv_uploaded_agr, /5 'Uploaded roles ........:', lv_number_agrs, /7 'Upload ..............:', lv_agr_uploaded, /7 'Profile generated ...:', lv_agr_generated, /5 'Return Code ...........:', lv_subrc LEFT-JUSTIFIED. IF lv_message IS NOT INITIAL. WRITE: /5 'Message .......:', /7 lv_message. ENDIF. SKIP 1. ULINE. ENDLOOP. WHEN OTHERS. MESSAGE 'Unexpected parameter' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDCASE. ENDFORM. "main *--- The End!