При работе с файлами в ABAP встает необходимость предоставить пользователю возможность выбора файла на экране выбора, для выбора файла на стороне клиента можно воспользоваться методом класса cl_gui_frontend_services=>file_open_dialog или простой обёрткой над ним cl_salv_test_data=>select_file. Далее будет продемонстрировано как предоставить пользователю выбор файла как на стороне клиента, так и на сервере приложений.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
DATA: l_true TYPE btch0000-char1. DATA: v_file TYPE STRING, l_path TYPE dxlpath, l_abend_flag TYPE dxxabend, file TYPE filename, flag1 TYPE C. DATA: it_fieldvalues TYPE STANDARD TABLE OF dynpread, wa_fieldvalues TYPE dynpread. *----------------------------------------------------------------------* * SELECTION- SCREEN *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: p_file(120) LOWER CASE OBLIGATORY. PARAMETERS: p_appl RADIOBUTTON GROUP g1, p_pres RADIOBUTTON GROUP g1. SELECTION-SCREEN END OF BLOCK b1. *----------------------------------------------------------------------* * AT SELECTION- SCREEN ( F4 functionality ) *----------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM f4_file_name. *----------------------------------------------------------------------* * START-OF-SELECTION. *----------------------------------------------------------------------* START-OF-SELECTION. IF p_appl = 'X'. PERFORM validate_server_file. ELSE. PERFORM validate_presentation_server. ENDIF. *----------------------------------------------------------------------* * END-OF-SELECTION *----------------------------------------------------------------------* END-OF-SELECTION. IF flag1 = 'X'. MESSAGE s777(hk) WITH 'Файл не существует'. CLEAR flag1. ELSE. WRITE 'Файл успешно выбран'. ENDIF. *&---------------------------------------------------------------------* *& Проверка существования файла на сервере приложений *&---------------------------------------------------------------------* FORM validate_server_file. DATA: l_file TYPE tpfht-pffile. CLEAR l_file. l_file = p_file. CALL FUNCTION 'PFL_CHECK_OS_FILE_EXISTENCE' EXPORTING fully_qualified_filename = l_file IMPORTING file_exists = l_true. IF l_true = SPACE. flag1 = 'X'. STOP. ENDIF. ENDFORM. " validate_server_file *&---------------------------------------------------------------------* *& Проверка существования файла на сервере представления (фронтенде) *&---------------------------------------------------------------------* FORM validate_presentation_server . DATA: RESULT, xfile TYPE STRING. xfile = p_file. CALL METHOD cl_gui_frontend_services=>file_exist EXPORTING file = xfile RECEIVING RESULT = RESULT. IF RESULT NE 'X'. flag1 = 'X'. STOP. ENDIF. ENDFORM. "validate_presentation_server *&---------------------------------------------------------------------* *& Обработка F4 для поля с именем файла *&---------------------------------------------------------------------* FORM f4_file_name . wa_fieldvalues-fieldname = 'P_PRES'. APPEND wa_fieldvalues TO it_fieldvalues. CLEAR wa_fieldvalues. wa_fieldvalues-fieldname = 'P_APPL'. APPEND wa_fieldvalues TO it_fieldvalues. CLEAR wa_fieldvalues. " Считаем значения экрана выбора CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr TABLES dynpfields = it_fieldvalues EXCEPTIONS invalid_abapworkarea = 1 invalid_dynprofield = 2 invalid_dynproname = 3 invalid_dynpronummer = 4 invalid_request = 5 no_fielddescription = 6 invalid_parameter = 7 undefind_error = 8 double_conversion = 9 stepl_not_found = 10 OTHERS = 11. READ TABLE it_fieldvalues INTO wa_fieldvalues WITH KEY fieldname = 'P_APPL'. " В зависимости от того что выбрано на экране выбора, будем запрашивать " либо файл на стороне сервера, либо на клиенте. IF wa_fieldvalues-fieldvalue = 'X'. PERFORM get_f4_application. ELSE. PERFORM get_f4_presentation. ENDIF. ENDFORM. " f4_file_name *&---------------------------------------------------------------------* *& Открыть диалог выбора файла на клиенте *&---------------------------------------------------------------------* FORM get_f4_presentation . *-- F4 functionality for file name on Presentation Server DATA: l_file TYPE STRING. CALL METHOD cl_salv_test_data=>select_file IMPORTING filename = l_file. p_file = l_file. ENDFORM. " get_f4_presentation *&---------------------------------------------------------------------* *& Диалог выбора файлов на сервере *&---------------------------------------------------------------------* FORM get_f4_application . *-- F4 functionality for filename on Application Server CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION' EXPORTING i_location_flag = 'A' i_server = ' ' i_path = '/secure_data/data_mig/dev' IMPORTING o_path = l_path abend_flag = l_abend_flag EXCEPTIONS communication_failure = 1 system_failure = 2 rfc_error = 3. IF sy-subrc EQ 0. p_file = l_path. ENDIF. IF l_abend_flag = 'X'. EXIT. ENDIF. ENDFORM. " get_f4_application |
Еще один способ выбора файла на сервере приложений:
1 2 3 4 5 6 7 8 9 10 |
SELECTION-SCREEN BEGIN OF BLOCK 002 WITH FRAME TITLE text-002. PARAMETERS : p_aps LIKE rlgrap-filename MODIF ID pth . SELECTION-SCREEN END OF BLOCK 002. DATA : path_name(150) TYPE C. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_aps. SUBMIT rs_get_f4_dir_from_applserv AND RETURN. IMPORT path_name FROM MEMORY ID 'PATH_NAME_SDL'. p_aps = path_name. |