获取质量通知附件 - SAP

时间:2016-08-24 13:07:35

标签: sap attachment abap bapi

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

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

  • DOC TYPE
  • DOC NUMBER
  • DOC PART
  • DOC VERSION

BAPI

我所拥有的唯一信息是我从 BAPI_QUALNOT_GETDETAIL 中提取的数据,到目前为止,我找不到与根据通知上传的任何附件相关的任何信息。< / p>

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

Document Flow

2 个答案:

答案 0 :(得分:0)

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

numberOfTrackableResults

质量通知编号以及其他属性保存在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 . 数据库表中。

答案 1 :(得分:-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.