Загрузка документа DMS через веб-службу

Может кто-нибудь объяснить, как загружать файлы 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.

Что ты пробовал? Поделитесь своим кодом

Suncatcher 13.06.2018 11:29

Я пробовал что-то подобное. Но в руководстве он, похоже, не загружает файл или не получает его содержимое.

Matthijs Mennens 13.06.2018 11:41

Я проверил ссылку, которой вы поделились. Служба OData передаст файл, а вы переопределите метод CREATE_STREAM и добавите DMS bapi. Я думаю, вам следует использовать IV_SLUG в качестве параметра для имени файла вместо «test».

Oguz 13.06.2018 14:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
4 595
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны указать путь к файлу и категорию хранилища. Это должно решить проблему.

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-адреса локального файла через веб-службу передает файл на бэкэнд. Я что-то там упускаю?

Matthijs Mennens 13.06.2018 13:53

Обычно вы выбираете файл с операциями SAP GUI. Однако вы собираетесь пользоваться услугами для отдыха. Думаю, в первую очередь следует передать файл на сервер. После этого сохраните его в DMS. Других способов извините :(.

Oguz 13.06.2018 14:04
Ответ принят как подходящий

Я действительно использовал этот фрагмент кода, чтобы решить эту проблему. Нашел здесь: Решение

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.

Другие вопросы по теме