Для создания приложения попробуйте следующий код:
Для макросов INCLUDE <CNTN01>.
Code:
*&---------------------------------------------------------------------*
*& Form LOAD_FILE_TO_ATTACH
*&---------------------------------------------------------------------*
* Прикрепление файлов к документу
*----------------------------------------------------------------------*
* --> PF_FILE_NAME - имя файла
* --> PF_OBJKEY - ключ объекта
* --> PF_OBJTYPE - тип объекта
* <--> PF_ERROR - признак ошибки
*----------------------------------------------------------------------*
FORM load_file_to_attach USING pf_file_name TYPE string
pf_temp_dir TYPE char128
pf_objkey TYPE swo_typeid
pf_objtype TYPE swo_objtyp
CHANGING pf_error TYPE c.
DATA: ls_object_a TYPE borident,
ls_object_b TYPE borident,
lf_docty LIKE borident-objtype VALUE 'MESSAGE',
lf_str1 TYPE string,
lf_str2 TYPE string,
lf_ext TYPE string,
lo_message TYPE swc_object,
lf_message_key TYPE ts_message_key,
lf_reltyp LIKE breltyp-reltype VALUE 'ATTA',
lf_msgtyp LIKE sofm-doctp VALUE 'PDF',
lt_data_tab TYPE STANDARD TABLE OF ts_blob,
lf_file_length TYPE i,
lf_filetype(10) TYPE c VALUE 'BIN',
lf_result TYPE c,
lf_file(128) TYPE c,
lc_service TYPE REF TO cl_gui_frontend_services,
lf_filename TYPE string,
lf_rc TYPE i,
lf_offset TYPE i,
lf_size TYPE i,
lc_com1 TYPE ole2_object.
pf_error = cc_x.
CREATE OBJECT lc_service.
ls_object_a-objkey = pf_objkey.
ls_object_a-objtype = pf_objtype.
lf_file = pf_file_name.
CONDENSE lf_file.
lf_filename = lf_file.
CALL METHOD lc_service->file_exist
EXPORTING
file = lf_filename
RECEIVING
result = lf_result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
lf_file = lf_filename.
CREATE OBJECT lc_com1 'SAPINFO' NO FLUSH.
IF SY-subrc IS INITIAL.
CALL METHOD OF lc_com1 'GetFileSize' = lf_size
"NO FLUSH
EXPORTING #1 = lf_file.
ENDIF.
CHECK lf_result IS NOT INITIAL.
* Читаем файл с диска
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lf_filename
filetype = lf_filetype
IMPORTING
filelength = lf_file_length
TABLES
data_tab = lt_data_tab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16.
IF sy-subrc IS NOT INITIAL.
MESSAGE s368(00) WITH 'Ошибка открытия файла' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
*----------------------------------------------------------
* First derive the Attachment's ( MESSAGE )document type.
lf_docty = 'MESSAGE'.
lf_ext = pf_file_name.
TRANSLATE lf_ext TO UPPER CASE.
SPLIT lf_ext AT '.' INTO: lf_str1 lf_str2.
lf_offset = STRLEN( pf_temp_dir ).
lf_str1 = lf_str1+lf_offset.
* Take given parameter e.g. 'DOC', 'PDF' etc.
IF lf_str2 = 'DOC' OR lf_str2 = 'XLS' OR lf_str2 = 'PDF' OR lf_str2 = 'RAR' OR
lf_str2 = 'BMP' OR lf_str2 = 'JPG'.
lf_msgtyp = lf_str2.
ELSE.
lf_msgtyp = 'EXT'.
ENDIF.
* Create an initial instance of BO 'MESSAGE' - to call the
* instance-independent method 'Create'.
swc_create_object lo_message 'MESSAGE' lf_message_key.
* define container to pass the parameter values to the method call
* in next step.
swc_container lt_message_container.
* Populate container with parameters for method
swc_set_element lt_message_container 'DOCUMENTTITLE' lf_str1.
swc_set_element lt_message_container 'DOCUMENTLANGU' 'E'.
swc_set_element lt_message_container 'NO_DIALOG' 'X'.
swc_set_element lt_message_container 'DOCUMENTNAME' lf_docty.
swc_set_element lt_message_container 'DOCUMENTTYPE' lf_msgtyp.
* 'DocumentContent' is a multi-line element ( itab ).
swc_set_table lt_message_container 'DocumentContent' lt_data_tab.
* Size is required in case of File attachments
swc_set_element lt_message_container 'DOCUMENTSIZE' lf_file_length.
* Refresh to get the reference of create 'MESSAGE' object for attachment
swc_refresh_object lo_message.
swc_call_method lo_message 'CREATE' lt_message_container.
* Get Key of new object
swc_get_object_key lo_message lf_message_key.
* Now we have attachment as a business object instance. We can now
* attach it to our main business object instance.
* Create attachment BO object_b
ls_object_b-objkey = lf_message_key.
ls_object_b-objtype = lf_docty.
*----------------------------------------------------------
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = ls_object_a
obj_roleb = ls_object_b
relationtype = lf_reltyp
EXCEPTIONS
no_model = 1
internal_error = 2
unknown = 3.
COMMIT WORK AND WAIT.
CALL METHOD lc_service->file_delete
EXPORTING
filename = pf_file_name
CHANGING
rc = lf_rc.
CLEAR pf_error.
ENDFORM. " LOAD_FILE_TO_ATTACH