2016-08-24 6 views
2

私はECCから品質通知データを抽出する小さなプログラムに取り組んでいます。これまでは、標準の "BAPI_QUALNOT_GETDETAIL"を使用して、通知のテキストデータを抽出しました。私がしたいのは、通知に関連する添付ファイルを抽出することです。品質通知添付ファイルを取得する -

この目的のために私は私の要求を満たすことを望む "BAPI_DOCUMENT_GETDETAIL2"を見つけました。私が持っている問題は、BAPIを実行するために必要な以下の情報をどこから入手できるかです。

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

BAPI

私が持っている唯一の情報は、私がから抽出したデータでありますBAPI_QUALNOT_GETDETAILこれまでのところ私はどんなinformatも見つけることができませんでしたイオンは、通知に対してアップロードされた添付ファイルに関連しています。

以下は、通知に関連する3つの添付ファイルを表示するt-code IQS3のドキュメントフローのスクリーンショットです。

Document Flow

+0

BAPI_DOCUMENT_GETDETAIL2を呼び出す方法については、関連する表を参照してください。私がバフィーのソースで見ることができるところから、テーブルDRADは始めるのに適しているかもしれません。 –

+0

DMSドキュメントだけを抽出しようとしていますか、またはObject Services経由で添付されたドキュメントに興味がありますか? Object Servicesの後にいる場合は、単にクラスメソッドcl_binary_relation => read_linksを呼び出すことができます。 –

+0

@StuG 2つの違いは何ですか? – Isuru

答えて

0

あなたがそれらを取得するために、次のFMを使用してみてください添付ファイルを保存するためGOSを使用する場合:

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. 
+0

を参照してください。このコードスニペットは歓迎されていますが、いくつかの助けを与えるかもしれませんが、[説明があれば大幅に改善されます] (//meta.stackexchange.com/q/114762)* how *と* why *これが問題を解決します。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –

+0

ご意見ありがとうございます。添付ファイルがDMSシステムに格納されている場合は、次のコードを使用して取得してください。 –

関連する問題