Получить вложения уведомления о качестве

Итак, я работаю над небольшой программой, которая будет извлекать данные уведомления о качестве из ECC. До сих пор я использовал стандартный "BAPI_QUALNOT_GETDETAIL" для извлечения текстовых данных уведомления. Что я хочу сделать, так это извлечь вложения, связанные с уведомлением.

Для этой цели я нашел "BAPI_DOCUMENT_GETDETAIL2", который, я надеюсь, удовлетворит мои требования. Проблема, с которой я столкнулся, заключается в том, где я могу получить следующую информацию, необходимую для запуска BAPI;

  • ТИП ДОКУМЕНТА
  • НОМЕР ДОКУМЕНТА
  • ЧАСТЬ ДОК.
  • ВЕРСИЯ ДОК.

БАПИ

Единственная информация, которая у меня есть, — это данные, извлеченные из BAPI_QUALNOT_GETDETAIL, в которых я пока не смог найти никакой информации, связанной с какими-либо вложениями, которые были загружены вместе с уведомлением.

Ниже приведен снимок экрана из потока документов в t-code IQS3, на котором показаны 3 вложения, связанные с уведомлением.

Поток документов


person Isuru    schedule 24.08.2016    source источник
comment
вы можете взглянуть на задействованные таблицы, чтобы узнать, как вызвать BAPI_DOCUMENT_GETDETAIL2. Из того, что я вижу в исходниках bapi, таблица DRAD может быть хорошей отправной точкой.   -  person Dirk Trilsbeek    schedule 30.08.2016
comment
Вы пытаетесь извлечь только документы DMS или вас интересуют документы, прикрепленные через Object Services? Если вам нужны Object Services, вы можете просто вызвать метод класса cl_binary_relation=›read_links.   -  person Raggedtoad    schedule 26.09.2016
comment
@StuG в чем разница между ними?   -  person Isuru    schedule 27.09.2016
comment
Документы DMS являются более устаревшей концепцией и ведутся в транзакциях CV01N и CV02N. Они требуют ведения всей информационной записи документа, куда вы можете добавить один или несколько оригиналов, которые будут фактическими документами, которые вы загружаете на сервер приложений. Доступ к вложениям документов Object Services можно получить через меню Object Services в верхнем левом углу многих стандартных транзакций SAP. См. help.sap.com/saphelp_nw70/helpdata/en/be /   -  person Raggedtoad    schedule 27.09.2016
comment
Я не согласен с тем, что DMS является устаревшей концепцией. Два разных варианта использования. ГОС не версионная, нет рабочего процесса и т.д. DMS больше похожа на настоящую систему управления документами (как следует из названия) :-)   -  person Tschenser    schedule 08.02.2019


Ответы (2)


Если вы используете 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 таблице БД.

person Suncatcher    schedule 17.10.2016

Если вложения хранятся в системе 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.
person Attila Barcsik    schedule 27.03.2017
comment
Хотя этот фрагмент кода приветствуется и может оказать некоторую помощь, он был бы значительно улучшен, если бы включал объяснение того, как и почему это решает проблему. Помните, что вы отвечаете на вопрос читателей в будущем, а не только того, кто задает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются. - person Toby Speight; 27.03.2017
comment
Спасибо за ваш комментарий. Я добавил следующее: Если вложения хранятся в системе DMS, используйте следующий код для их извлечения. - person Attila Barcsik; 28.03.2017