REPORT zexport_progs.
TABLES: trdir.
DATA: BEGIN OF gt_data OCCURS 0,
name LIKE trdir-name,
cnam LIKE trdir-cnam,
END OF gt_data.
RANGES: r_users FOR sy-uname.
SELECTION-SCREEN: BEGIN OF BLOCK b0 WITH FRAME TITLE text-000.
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_name FOR trdir-name.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS p_create AS CHECKBOX DEFAULT 'X' USER-COMMAND mod.
SELECTION-SCREEN COMMENT 2(25) text-011 FOR FIELD p_create.
SELECTION-SCREEN POSITION 28.
SELECT-OPTIONS s_cnam FOR trdir-cnam DEFAULT sy-uname.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS p_change AS CHECKBOX USER-COMMAND mod.
SELECTION-SCREEN COMMENT 2(25) text-012 FOR FIELD p_change.
SELECTION-SCREEN POSITION 28.
SELECT-OPTIONS s_unam FOR trdir-unam DEFAULT sy-uname.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK b1.
PARAMETERS: p_path LIKE ibipparms-path DEFAULT 'C:\temp\'.
SELECTION-SCREEN: END OF BLOCK b0.
INITIALIZATION.
APPEND 'ICPZ*' TO s_name.
APPEND 'ICPLZ*' TO s_name.
LOAD-OF-PROGRAM.
IF NOT sy-uname IN r_users.
MESSAGE s999(re) WITH 'You are not authorized to run this program'.
LEAVE PROGRAM.
ENDIF.
AT SELECTION-SCREEN OUTPUT.
PERFORM sel_screen_processing.
START-OF-SELECTION.
PERFORM get_data.
CHECK NOT gt_data[] IS INITIAL.
PERFORM export_programs.
FORM sel_screen_processing.
LOOP AT SCREEN.
IF screen-name = 'S_CNAM-LOW'
OR screen-name = 'S_CNAM-HIGH'
OR screen-name = '%_S_CNAM_%_APP_%-VALU_PUSH'.
IF p_create = 'X'.
screen-active = '1'.
ELSE.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ELSEIF screen-name = 'S_UNAM-LOW'
OR screen-name = 'S_UNAM-HIGH'
OR screen-name = '%_S_UNAM_%_APP_%-VALU_PUSH'.
IF p_change = 'X'.
screen-active = '1'.
ELSE.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM.
FORM get_data.
IF p_create = 'X' AND p_change = 'X'.
SELECT * FROM trdir
INTO CORRESPONDING FIELDS OF TABLE gt_data
WHERE name IN s_name
AND ( cnam IN s_cnam OR unam IN s_unam ).
ELSEIF p_create = 'X'.
SELECT * FROM trdir
INTO CORRESPONDING FIELDS OF TABLE gt_data
WHERE name IN s_name
AND cnam IN s_cnam.
ELSEIF p_change = 'X'.
SELECT * FROM trdir
INTO CORRESPONDING FIELDS OF TABLE gt_data
WHERE name IN s_name
AND unam IN s_unam.
ENDIF.
IF gt_data[] IS INITIAL.
MESSAGE i999(re) WITH 'No program meet selection criteria'.
ENDIF.
ENDFORM.
FORM export_programs.
TYPES: BEGIN OF t_rep,
line(72),
END OF t_rep.
DATA: ls_rep TYPE t_rep,
lt_rep LIKE TABLE OF ls_rep,
l_fname TYPE string,
l_ptype TYPE char10,
l_len TYPE i,
l_cnt TYPE i.
l_len = strlen( p_path ).
SUBTRACT 1 FROM l_len.
IF p_path+l_len(1) <> '\'.
ADD 1 TO l_len.
p_path+l_len(1) = '\'.
ENDIF.
SORT gt_data BY cnam.
LOOP AT gt_data.
FREE lt_rep[].
IF gt_data-name(1) = 'L'.
l_ptype = 'FUNC'.
ELSE.
l_ptype = 'PROG'.
ENDIF.
READ REPORT gt_data-name INTO lt_rep.
IF sy-subrc = 0.
CONCATENATE p_path gt_data-cnam '\' l_ptype '\'
gt_data-name '.abp' INTO l_fname.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = l_fname
filetype = 'ASC'
append = ' '
CHANGING
data_tab = lt_rep
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 24.
IF sy-subrc = 0.
ADD 1 TO l_cnt.
ENDIF.
ENDIF.
ENDLOOP.
IF l_cnt = 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
MESSAGE s000(xt) WITH l_cnt 'program(s) exported successfully'.
ENDIF.
ENDFORM.