【问题标题】:Uploading a DMS document via a web service通过 Web 服务上传 DMS 文档
【发布时间】:2018-06-13 08:25:17
【问题描述】:

谁能解释一下如何通过休息服务上传 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 作为文件名的参数,而不是“测试”。

标签: abap netweaver


【解决方案1】:

您应该给出文件路径和存储类别。这应该可以解决问题。

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 中。我没有看到任何其他方式抱歉:(。
【解决方案2】:

我其实是用这段代码来解决的。我在这里找到了它:Solution

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.

所以我将我之前的代码与上面的 sn-p 结合起来,它似乎可以工作。

"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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2014-07-17
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多