Может кто-нибудь объяснить, как загружать файлы DMS через службу отдыха. Я использую BAPI_DOCUMENT_CREATE2, как предлагают некоторые руководства, но я не вижу, как получить файл на сервере.
Если вы посмотрите руководство, на которое я ссылаюсь ниже, он передает имя файла, но не содержимое. Кто-нибудь может объяснить, как он получает контент?
Кстати, я не могу использовать шлюз, поэтому я просто использую службу SICF.
https://blogs.sap.com/2016/08/22/upload-document-into-dms-server-using-net-weaver-gateway/
"Variables
DATA: LS_DOCDATA TYPE BAPI_DOC_DRAW2.
DATA: LS_OBJECTLINK TYPE BAPI_DOC_DRAD.
DATA: LT_OBJECTLINKS TYPE TABLE OF BAPI_DOC_DRAD.
DATA: LS_OBJECTDESCR TYPE BAPI_DOC_DRAT.
DATA: LT_OBJECTDESCR TYPE TABLE OF BAPI_DOC_DRAT.
DATA: LS_OBJECTFILE TYPE BAPI_DOC_FILES2.
DATA: LT_OBJECTFILES TYPE TABLE OF BAPI_DOC_FILES2.
DATA: LV_DOCTYPE TYPE DOKAR.
DATA: LV_DOCNUMBER TYPE DOKNR.
DATA: LV_DOCPART TYPE DOKTL_D.
DATA: LV_DOCVERSION TYPE DOKVR.
" SET VALUES
LS_DOCDATA-DOCUMENTTYPE = 'DRW'.
LS_DOCDATA-DOCUMENTVERSION = '00'.
LS_DOCDATA-DOCUMENTPART = '000'.
LS_DOCDATA-LABORATORY = '001'.
LS_OBJECTDESCR-DESCRIPTION = 'test dms doc'.
LS_OBJECTDESCR-LANGUAGE = 'E'.
LS_OBJECTDESCR-LANGUAGE_ISO = 'EN'.
APPEND LS_OBJECTDESCR TO LT_OBJECTDESCR.
LS_OBJECTFILE-ORIGINALTYPE = '1'.
LS_OBJECTFILE-SOURCEDATACARRIER = 'SAP-SYSTEM'.
LS_OBJECTFILE-CREATED_BY = SY-UNAME
LS_OBJECTFILE-DOCFILE = 'test'.
LS_OBJECTFILE-WSAPPLICATION = 'JPG'.
APPEND LS_OBJECTFILE TO LT_OBJECTFILES.
LS_OBJECTLINK-OBJECTTYPE = 'EQUI'.
LS_OBJECTLINK-OBJECTKEY = '000000000210100004'.
APPEND LS_OBJECTLINK TO LT_OBJECTLINKS.
" CREATE ATTACHMENT
CALL FUNCTION 'BAPI_DOCUMENT_CREATE2'
EXPORTING
DOCUMENTDATA = LS_DOCDATA
HOSTNAME = SY-HOST
PF_FTP_DEST = 'SAPFTPA'
PF_HTTP_DEST = 'SAPHTTP'
IMPORTING
DOCUMENTTYPE = LV_DOCTYPE
DOCUMENTNUMBER = LV_DOCNUMBER
DOCUMENTPART = LV_DOCPART
DOCUMENTVERSION = LV_DOCVERSION
RETURN = LT_RETURN
TABLES
DOCUMENTDESCRIPTIONS = LT_OBJECTDESCR
OBJECTLINKS = LT_OBJECTLINKS
DOCUMENTFILES = LT_OBJECTFILES.
IF SY-SUBRC <> 0.
MESSAGE 'Error uploading attachment' TYPE 'E'.
ENDIF.
" COMMIT
COMMIT WORK.
Я пробовал что-то подобное. Но в руководстве он, похоже, не загружает файл или не получает его содержимое.
Я проверил ссылку, которой вы поделились. Служба OData передаст файл, а вы переопределите метод CREATE_STREAM и добавите DMS bapi. Я думаю, вам следует использовать IV_SLUG в качестве параметра для имени файла вместо «test».





Вы должны указать путь к файлу и категорию хранилища. Это должно решить проблему.
LS_OBJECTFILE-ORIGINALTYPE = '001'. "**
LS_OBJECTFILE-storagecategory = 'DMS_C1_ST'.. "**
LS_OBJECTFILE-CREATED_BY = SY-UNAME
LS_OBJECTFILE-DOCFILE = IV_SLUG. "path that comes from the OData service.
LS_OBJECTFILE-WSAPPLICATION = 'JPG'.
APPEND LS_OBJECTFILE TO LT_OBJECTFILES.
Я действительно не понимаю, как отправка URL-адреса локального файла через веб-службу передает файл на бэкэнд. Я что-то там упускаю?
Обычно вы выбираете файл с операциями SAP GUI. Однако вы собираетесь пользоваться услугами для отдыха. Думаю, в первую очередь следует передать файл на сервер. После этого сохраните его в DMS. Других способов извините :(.
Я действительно использовал этот фрагмент кода, чтобы решить эту проблему. Нашел здесь: Решение
DATA LV_OUTPUT_LENGTH TYPE I.
DATA LS_SOLIX TYPE SOLIX-LINE.
DATA LT_SOLIX_TAB TYPE TABLE OF SOLIX-LINE.
DATA LV_FILENAME TYPE STRING.
DATA LV_DOCNUM TYPE DOKNR.
CONCATENATE '/usr/sap/' SY-SYSID SY-UNAME SY-DATUM INTO LV_FILENAME.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_FILESOURCE " this is the XSTRING of the file u want to upload
IMPORTING
OUTPUT_LENGTH = LV_OUTPUT_LENGTH
TABLES
BINARY_TAB = LT_SOLIX_TAB.
IF NOT LT_SOLIX_TAB IS INITIAL.
OPEN DATASET LV_FILENAME FOR OUTPUT IN BINARY MODE.
LOOP AT LT_SOLIX_TAB INTO LS_SOLIX.
TRANSFER LS_SOLIX TO LV_FILENAME.
ENDLOOP.
CLOSE DATASET LV_FILENAME.
ENDIF.
Поэтому я объединил свой предыдущий код с приведенным выше фрагментом, и, похоже, он работает.
"Variables
DATA: LS_DOCDATA TYPE BAPI_DOC_DRAW2.
DATA: LS_OBJECTLINK TYPE BAPI_DOC_DRAD.
DATA: LT_OBJECTLINKS TYPE TABLE OF BAPI_DOC_DRAD.
DATA: LS_OBJECTDESCR TYPE BAPI_DOC_DRAT.
DATA: LT_OBJECTDESCR TYPE TABLE OF BAPI_DOC_DRAT.
DATA: LS_OBJECTFILE TYPE BAPI_DOC_FILES2.
DATA: LT_OBJECTFILES TYPE TABLE OF BAPI_DOC_FILES2.
DATA: LV_DOCTYPE TYPE DOKAR.
DATA: LV_DOCNUMBER TYPE DOKNR.
DATA: LV_DOCPART TYPE DOKTL_D.
DATA: LV_DOCVERSION TYPE DOKVR.
" SET VALUES
LS_DOCDATA-DOCUMENTTYPE = 'DRW'.
LS_DOCDATA-DOCUMENTVERSION = '00'.
LS_DOCDATA-DOCUMENTPART = '000'.
LS_DOCDATA-LABORATORY = '001'.
LS_OBJECTDESCR-DESCRIPTION = 'test dms doc'.
LS_OBJECTDESCR-LANGUAGE = 'E'.
LS_OBJECTDESCR-LANGUAGE_ISO = 'EN'.
APPEND LS_OBJECTDESCR TO LT_OBJECTDESCR.
LS_OBJECTFILE-ORIGINALTYPE = '1'.
LS_OBJECTFILE-SOURCEDATACARRIER = 'SAP-SYSTEM'.
LS_OBJECTFILE-CREATED_BY = SY-UNAME.
LS_OBJECTFILE-DOCFILE = LV_FILENAME.
LS_OBJECTFILE-WSAPPLICATION = 'TXT'.
APPEND LS_OBJECTFILE TO LT_OBJECTFILES.
LS_OBJECTLINK-OBJECTTYPE = 'EQUI'.
LS_OBJECTLINK-OBJECTKEY = '000000000210100004'.
APPEND LS_OBJECTLINK TO LT_OBJECTLINKS.
" CREATE ATTACHMENT
CALL FUNCTION 'BAPI_DOCUMENT_CREATE2'
EXPORTING
DOCUMENTDATA = LS_DOCDATA
PF_FTP_DEST = 'SAPFTPA'
PF_HTTP_DEST = 'SAPHTTP'
IMPORTING
DOCUMENTTYPE = LV_DOCTYPE
DOCUMENTNUMBER = LV_DOCNUMBER
DOCUMENTPART = LV_DOCPART
DOCUMENTVERSION = LV_DOCVERSION
RETURN = LT_RETURN
TABLES
DOCUMENTDESCRIPTIONS = LT_OBJECTDESCR
OBJECTLINKS = LT_OBJECTLINKS
DOCUMENTFILES = LT_OBJECTFILES.
IF SY-SUBRC <> 0.
MESSAGE 'Error uploading attachment' TYPE 'E'.
ENDIF.
" COMMIT
COMMIT WORK.
Что ты пробовал? Поделитесь своим кодом