DATA: GT_LIST LIKE SRGBTBREL OCCURS 0 WITH HEADER LINE.
DATA: LS_DOCUMENT_DATA LIKE SOFOLENTI1,
LT_OBJECT_HEADER LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
LT_OBJECT_CONTENT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
LT_OBJECT_PARA LIKE SOPARAI1 OCCURS 0 WITH HEADER LINE,
LT_OBJECT_PARB LIKE SOPARBI1 OCCURS 0 WITH HEADER LINE,
LT_ATTACHMENT_LIST LIKE SOATTLSTI1 OCCURS 0 WITH HEADER LINE,
LT_RECEIVER_LIST LIKE SORECLSTI1 OCCURS 0 WITH HEADER LINE,
LT_CONTENTS_HEX LIKE SOLIX OCCURS 0 WITH HEADER LINE,
OBJCONT_TAB LIKE SOLI OCCURS 0 WITH HEADER LINE.
DATA: LV_DOCID TYPE SOFOLENTI1-DOC_ID,
LV_PATH(255),
LV_STR1(255),
LV_STR2(255),
LV_TYPE(3).
*&---------------------------------------------------------------------*
*& MACRO *
*&---------------------------------------------------------------------*
DEFINE M_CLS.
CLEAR &1. REFRESH &1.
END-OF-DEFINITION.
SELECT * INTO TABLE GT_LIST
FROM SRGBTBREL
WHERE TYPEID_A = 'EQUI'.
LOOP AT GT_LIST.
M_CLS: LT_OBJECT_HEADER,
LT_OBJECT_CONTENT,
LT_OBJECT_PARA,
LT_OBJECT_PARB,
LT_ATTACHMENT_LIST,
LT_RECEIVER_LIST,
LT_CONTENTS_HEX,
OBJCONT_TAB.
CLEAR: LS_DOCUMENT_DATA.
LV_DOCID = GT_LIST-INSTID_B.
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
DOCUMENT_ID = LV_DOCID
* FILTER = 'X '
IMPORTING
DOCUMENT_DATA = LS_DOCUMENT_DATA
TABLES
OBJECT_HEADER = LT_OBJECT_HEADER
OBJECT_CONTENT = LT_OBJECT_CONTENT
OBJECT_PARA = LT_OBJECT_PARA
OBJECT_PARB = LT_OBJECT_PARB
ATTACHMENT_LIST = LT_ATTACHMENT_LIST
RECEIVER_LIST = LT_RECEIVER_LIST
CONTENTS_HEX = LT_CONTENTS_HEX
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.
CHECK LT_OBJECT_CONTENT[] IS NOT INITIAL.
LOOP AT LT_OBJECT_CONTENT.
OBJCONT_TAB-LINE = LT_OBJECT_CONTENT-LINE.
APPEND OBJCONT_TAB. CLEAR OBJCONT_TAB.
ENDLOOP.
LOOP AT LT_OBJECT_HEADER.
IF LT_OBJECT_HEADER-LINE CS 'SO_FILENAME'.
SPLIT LT_OBJECT_HEADER-LINE AT '=' INTO LV_STR1 LV_STR2.
CONCATENATE 'C:\TEMP\' GT_LIST-INSTID_A '\'LV_STR2 INTO LV_PATH.
ELSEIF LT_OBJECT_HEADER-LINE CS 'SO_FORMAT'.
SPLIT LT_OBJECT_HEADER-LINE AT '=' INTO LV_STR1 LV_STR2.
LV_TYPE = LV_STR2.
ENDIF.
ENDLOOP.
IF LV_TYPE IS INITIAL.
LV_TYPE = 'BIN'.
ENDIF.
CALL FUNCTION 'SO_OBJECT_DOWNLOAD'
EXPORTING
* BIN_FILESIZE = 0
* DEFAULT_FILENAME = ' '
FILETYPE = LV_TYPE
PATH_AND_FILE = LV_PATH
* EXTCT = ' '
NO_DIALOG = 'X'
* CODEPAGE =
* IMPORTING
* FILELENGTH =
* F_CANCELLED =
* ACT_FILETYPE =
* ACT_FILENAME =
TABLES
OBJCONT = OBJCONT_TAB
* EXCEPTIONS
* FILE_WRITE_ERROR = 1
* INVALID_TYPE = 2
* X_ERROR = 3
* KPRO_ERROR = 4
* OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDLOOP.