获取质量通知附件

问题描述 投票:2回答:2

所以我正在研究一个小程序,该程序将从ECC中提取质量通知数据。到目前为止,我已经使用标准的“ BAPI_QUALNOT_GETDETAIL”来提取通知的文本数据。我要做的是也提取与通知相关的附件。

为此,我找到了“ BAPI_DOCUMENT_GETDETAIL2”,希望可以满足我的要求。我的问题是,在哪里可以获取运行BAPI所需的以下信息;

  • DOC TYPE
  • DOC NUMBER
  • DOC PART
  • DOC版本

BAPI

我仅有的信息是我从BAPI_QUALNOT_GETDETAIL提取的数据,到目前为止,我找不到与根据通知上传的任何附件相关的任何信息。

以下是t代码IQS3中文档流的屏幕快照,显示了与通知相关的3个附件。

Document Flow

sap attachment abap bapi
2个回答
0
投票

如果使用GOS存储附件,请尝试使用以下FM来获取附件:

CALL FUNCTION 'BDS_GOS_CONNECTIONS_GET'
 IMPORTING
  logical_system  = <system name> * << optional parameter       
  classname       = BUS2078       * << object type for quality notification    
  objkey          = 1014866112016 * << quality notification number + year        
  client          = XXX
 TABLES
  gos_connections = lt_attachments
.

[质量通知编号以及其他属性,都保存在VIQMEL DB表中。


-2
投票

如果附件存储在DMS系统中,请使用以下代码进行检索。

REPORT qn_attachments.

  DATA ls_docfile TYPE bapi_doc_files2.
  DATA lv_objkey  TYPE objky.
  DATA lv_objekt  TYPE dokob.
  DATA lt_drad    TYPE TABLE OF drad.
  DATA lt_docfiles TYPE bapi_tt_doc_files2.
  DATA lv_msg     TYPE string.
  DATA lt_content_bin TYPE sdokcntbins.
  DATA lt_access_info TYPE STANDARD TABLE OF scms_acinf.
  DATA ls_access_info TYPE scms_acinf.
  DATA ls_packing_list TYPE sopcklsti1.
  DATA lv_xstring     TYPE xstring.
  DATA lv_type                  TYPE string.
  DATA lv_name                  TYPE string.
  DATA lv_dot_offset TYPE i.
  DATA lv_extension TYPE mimetypes-extension.
  DATA lv_mimetype TYPE mimetypes-type.
  data lv_qmnum type qmnum.

  lv_objkey = lv_qmnum." QMNUM

  lv_objekt = 'QMQMEL'.
  CALL FUNCTION 'DOKUMENTE_ZU_OBJEKT'
    EXPORTING
      key           = lv_objkey
      objekt        = lv_objekt
    TABLES
      doktab        = lt_drad
    EXCEPTIONS
      kein_dokument = 1
      OTHERS        = 2.
  IF sy-subrc <> 0.
  ENDIF.

  LOOP AT lt_drad INTO DATA(ls_drad).
    CLEAR: lt_docfiles, ls_docfile.

  CALL FUNCTION 'BAPI_DOCUMENT_GETDETAIL2'  
    EXPORTING                               
      documenttype    = ls_drad-dokar       
      documentnumber  = ls_drad-doknr       
      documentpart    = ls_drad-doktl       
      documentversion = ls_drad-dokvr       
      getactivefiles  = 'X'                 
    TABLES                                  
      documentfiles   = lt_docfiles.        

    LOOP AT lt_docfiles INTO ls_docfile.
* Get binary content for documents
      REFRESH lt_access_info.
      REFRESH lt_content_bin.
      CALL FUNCTION 'SCMS_DOC_READ'
        EXPORTING
          stor_cat              = ls_docfile-storagecategory
          doc_id                = ls_docfile-file_id
        TABLES
          access_info           = lt_access_info
          content_bin           = lt_content_bin
        EXCEPTIONS
          bad_storage_type      = 1
          bad_request           = 2
          unauthorized          = 3
          comp_not_found        = 4
          not_found             = 5
          forbidden             = 6
          conflict              = 7
          internal_server_error = 8
          error_http            = 9
          error_signature       = 10
          error_config          = 11
          error_format          = 12
          error_parameter       = 13
          error                 = 14
          OTHERS                = 15.
      IF sy-subrc EQ 0.
        APPEND LINES OF: lt_access_info TO lt_access_info,
                         lt_content_bin TO lt_content_bin.
      ELSE.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_msg.
      ENDIF.

      READ TABLE lt_access_info INTO ls_access_info INDEX 1.
      IF sy-subrc = 0.

        CLEAR ls_packing_list.

        "Convert DMS document content to XSTRING
        CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
          EXPORTING
            input_length = ls_access_info-comp_size
            first_line   = ls_access_info-first_line
            last_line    = ls_access_info-last_line
          IMPORTING
            buffer       = lv_xstring
          TABLES
            binary_tab   = lt_content_bin
          EXCEPTIONS
            failed       = 1
            OTHERS       = 2.
        IF sy-subrc <> 0.
          DELETE lt_content_bin FROM ls_access_info-first_line TO ls_access_info-last_line.
          CONTINUE.
        ENDIF.
        DELETE lt_content_bin FROM ls_access_info-first_line TO ls_access_info-last_line.
* File extension
        FIND FIRST OCCURRENCE OF REGEX '\.[^\.]+$'
          IN ls_access_info-comp_id MATCH OFFSET lv_dot_offset.
        lv_extension = ls_access_info-comp_id+lv_dot_offset.
        TRANSLATE lv_extension TO LOWER CASE.
        lv_type    = ls_access_info-mimetype.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
© www.soinside.com 2019 - 2024. All rights reserved.