Поднимаю старую тему. Возникла необходимость программно создавать attachment к Travel expense (командировочные расходы) - BUS2089. По блогу индуса нашла его же
пример именно для attachment. Упомянутая выше quick reference, к сожалению, не работает - там какой-то PDF файл, который не открывается.
Пока удалось создать attachment (.DOC) и в Attachment List все отлично видно, но открыть файл невозможно. Word либо ругается, что файл не в том формате, либо пытается открыть его как текстовый файл, состоящий из каких-то закорючек. Tакое ощущение, что перед вызовом BINARY_RELATION_CREATE нужен еще какой-то шаг...
В блоге народ тоже жалуется, что не могут файлы открыть, но решения никто что-то не запостил.

Попробовала вариант как
тут у латиноса какого-то. С ним файл открывается, но в нем все равно закорючки. Кто виноват и что делать?
Code:
* Include for BO macros
INCLUDE : <cntn01>.
* Load class.
CLASS cl_binary_relation DEFINITION LOAD.
CLASS cl_obl_object DEFINITION LOAD.
PARAMETERS:
* Object_a
p_botype LIKE obl_s_pbor-typeid, " e.g. 'BUS2012'
p_bo_id LIKE obl_s_pbor-instid, " Key e.g. PO No.
* Object_b
p_docty LIKE obl_s_pbor-typeid DEFAULT 'MESSAGE' NO-DISPLAY,
p_msgtyp LIKE sofm-doctp, " File extension
* Relationship
p_reltyp LIKE breltyp-reltype DEFAULT 'ATTA',
p_file TYPE string.
TYPES: BEGIN OF ty_message_key,
foltp TYPE so_fol_tp,
folyr TYPE so_fol_yr,
folno TYPE so_fol_no,
doctp TYPE so_doc_tp,
docyr TYPE so_doc_yr,
docno TYPE so_doc_no,
fortp TYPE so_for_tp,
foryr TYPE so_for_yr,
forno TYPE so_for_no,
END OF ty_message_key.
DATA : lv_message_key TYPE ty_message_key.
DATA : lo_message TYPE swc_object.
DATA : lt_doc_content TYPE STANDARD TABLE OF soli-line
WITH HEADER LINE.
* Create an initial instance of BO 'MESSAGE' - to call the
* instance-independent method 'Create'.
p_docty = 'MESSAGE'.
swc_create_object lo_message 'MESSAGE' lv_message_key.
swc_container lt_message_container.
swc_set_element lt_message_container 'DOCUMENTTITLE' 'Test Title'.
swc_set_element lt_message_container 'DOCUMENTLANGU' 'E'.
swc_set_element lt_message_container 'NO_DIALOG' 'X'.
swc_set_element lt_message_container 'DOCUMENTNAME' p_docty.
swc_set_element lt_message_container 'DOCUMENTTYPE' p_msgtyp.
OPEN DATASET p_file FOR INPUT IN BINARY MODE.
WHILE sy-subrc = 0.
READ DATASET p_file INTO lt_doc_content.
APPEND lt_doc_content.
ENDWHILE.
CLOSE DATASET p_file.
swc_set_table lt_message_container 'DocumentContent' lt_doc_content.
* Size is required in case of File attachments
DATA : lv_doc_size TYPE i.
DATA : l_file_lines TYPE i.
DESCRIBE TABLE lt_doc_content LINES l_file_lines.
READ TABLE lt_doc_content INDEX l_file_lines.
lv_doc_size = ( 255 * ( l_file_lines - 1 ) ) +
STRLEN( lt_doc_content ).
swc_set_element lt_message_container 'DOCUMENTSIZE' lv_doc_size .
* 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 lv_message_key.
* Create main BO object_a
DATA: lo_is_object_a TYPE borident.
lo_is_object_a-objkey = p_bo_id.
lo_is_object_a-objtype = p_botype.
* Create attachment BO object_b
DATA: lo_is_object_b TYPE borident.
lo_is_object_b-objkey = lv_message_key.
lo_is_object_b-objtype = p_docty.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = lo_is_object_a
obj_roleb = lo_is_object_b
relationtype = p_reltyp
EXCEPTIONS
OTHERS = 1.
COMMIT WORK.