Получить приложения для уведомления о качестве - SAP
Поэтому я работаю над небольшой программой, которая будет извлекать данные Уведомления о качестве из ECC. До сих пор я использовал стандартный "BAPI_QUALNOT_GETDETAIL" для извлечения текстовых данных уведомления. Что я хочу сделать, это извлечь вложения, которые также связаны с уведомлением.
Для этого я нашел "BAPI_DOCUMENT_GETDETAIL2", который, я надеюсь, удовлетворит мое требование. Проблема в том, где я могу получить следующую информацию, необходимую для запуска BAPI;
- DOC TYPE
- ДОКУМЕНТ
- DOC PART
- DOC VERSION
Единственная информация, которая у меня есть, это данные, которые я извлек из BAPI_QUALNOT_GETDETAIL, в которых до сих пор я не смог найти никакой информации, связанной с какими-либо вложениями, которые были загружены с уведомлением.
Ниже приведен скриншот из потока документов в t-коде IQS3, на котором показаны 3 приложения, связанные с уведомлением.
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
Таблица БД.
Если вложения хранятся в системе 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.