Коллеги, добрый день.
Возникла такая странная потребность, как интеграция SAP систем по OLE, т.к. создание rfc соединения между данными 2мя системами создать не представляется возможным.
Проблема в следующем: мне необходимо в другой системе запустить фм, который должен выгрузить файл на мою локальную машину. Если делать это по rfc - все работает.
Если же делать это по OLE, то все отрабатывает, subrc = 0, но файлов не выгружает.
Если же пытаться передавать содержимое файла, а потом уже у себя его сохранять - то это работает крайне медленно.
Код, может кому-нибудь еще пригодится:
Code:
CREATE OBJECT go_sapfunctions 'SAP.Functions'.
CHECK sy-subrc EQ 0.
CALL METHOD OF
go_sapfunctions
'Connection' = go_connection.
CHECK sy-subrc EQ 0.
* Подключаемся к SAP
CALL METHOD OF
go_connection
'Logon'.
IF sy-subrc = 0.
CALL METHOD OF
go_sapfunctions
'Add' = go_myfunc
EXPORTING
#1 = 'ZFM'.
CHECK sy-subrc EQ 0.
* Импортируем таблицу с информацией
CALL METHOD OF
go_myfunc
'Tables' = go_tables_info
EXPORTING
#1 = 'ET_BT'.
CHECK sy-subrc EQ 0.
CALL METHOD OF
go_myfunc
'Call'. <---- вот здесь мы должны получить выгруженные файлы на компе
CHECK sy-subrc EQ 0.
*Данные же корректно возвращаются, но приходится извращаться для их интерпретации.
*И кусок кода ниже работает крайне медленно
*Может его можно как-то ускорить?
GET PROPERTY OF go_tables_info 'RowCount' = lv_rowcount.
CHECK sy-subrc EQ 0.
IF lv_rowcount > 0.
REFRESH lt_fieldcat[].
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZS_DATA'
CHANGING
ct_fieldcat = lt_fieldcat.
DO lv_rowcount TIMES.
sy_index = sy-index.
CLEAR: ls_bt.
LOOP AT lt_fieldcat INTO ls_fieldcat.
GET PROPERTY OF go_tables_info 'Cell' = lv_data
EXPORTING #1 = sy_index
#2 = ls_fieldcat-col_pos.
ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE ls_bt TO <f>.
CHECK sy-subrc = 0.
<f> = lv_data.
ENDLOOP.
APPEND ls_bt TO lt_bt[].
ENDDO.
endif.
ENDIF.