Навеяно предыдущей записью. Не все ещё места хранения файлов исследованы. Например, вполне возможно хранить Excel-файлы в так называемом Business Workplace (транзакция SBWP, доступная всем с главного экрана).
Сохранённый файл можно прочитать из программы примерно таким кодом:
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 |
class-methods LOAD_FROM_WP_SHARED_FOLDER importing !IV_FOLDER type STRING !IV_FILENAME type STRING returning value(RX_FILE) type XSTRING . METHOD load_from_wp_shared_folder. DATA lx_file TYPE xstring. DATA: lt_bin TYPE solix_tab, lv_len TYPE i. DATA: ls_user_data TYPE soudatai1. CALL FUNCTION 'SO_USER_READ_API1' EXPORTING prepare_for_folder_access = 'X' IMPORTING user_data = ls_user_data EXCEPTIONS user_not_exist = 1 parameter_error = 2 x_error = 3 OTHERS = 4. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. DATA(lv_sharefol) = ls_user_data-sharedfol. DATA: lt_folders TYPE STANDARD TABLE OF sofolenti1. CALL FUNCTION 'SO_FOLDER_READ_API1' EXPORTING folder_id = lv_sharefol TABLES folder_content = lt_folders EXCEPTIONS folder_not_exist = 1 operation_no_authorization = 2 x_error = 3 OTHERS = 4. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. DATA(lv_folder) = lt_folders[ obj_name = iv_folder ]-object_id. DATA: lt_files TYPE STANDARD TABLE OF sofolenti1. CALL FUNCTION 'SO_FOLDER_READ_API1' EXPORTING folder_id = lv_folder TABLES folder_content = lt_files EXCEPTIONS folder_not_exist = 1 operation_no_authorization = 2 x_error = 3 OTHERS = 4. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. DATA(lv_file) = lt_files[ obj_descr = iv_filename ]-doc_id. DATA(lv_size) = CONV int4( lt_files[ obj_descr = iv_filename ]-doc_size ). DATA: lt_content TYPE STANDARD TABLE OF solix. CALL FUNCTION 'SO_DOCUMENT_READ_API1' EXPORTING document_id = lv_file TABLES contents_hex = lt_content EXCEPTIONS document_id_not_exist = 1 operation_no_authorization = 2 x_error = 3 OTHERS = 4. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_size IMPORTING buffer = lx_file TABLES binary_tab = lt_content EXCEPTIONS failed = 1 OTHERS = 2. IF sy-subrc <> 0. * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. rx_file = lx_file. ENDMETHOD. |
А вот и пример использования:
1 2 3 4 5 6 |
DATA(lx_file) = zcl_file=>load_from_wp_shared_folder( iv_folder = 'Z_TEST_XLSX' iv_filename = 'ZCL_EXCEL_READER' ). DATA(lo_excel) = NEW zcl_excel_reader( lx_file ). |
В каких случаях имеет смысл использовать такой сценарий? Есть предложения?
Например, можно такой подход использовать для регулярной фоновой загрузки больших объёмов данных. Один или несколько пользователей формируют файлы и складывают в общую папку. В планировшике можно оформить задачу, которая будет разбирать файлы и проводить необходимые действия в системе. В таком сценарии испольование SMW0 или OAOR не очень удобно, зато общая папка — милое дело.
Предложение есть
в одном ИП sbwp является хранилищем блюпринтов. там и пдф и xls(х) и *doc etc
как можно выкачать эти тонны добра рекурсивно?
Я так думаю, что проблем с ABAP нет, главное чтобы NDA не было проблемой в данном случае.