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

У меня есть этот фрагмент кода для загрузки шестнадцатеричного содержимого файла с идентификатором файла параметров импорта. Я хочу вставить новое вложение для уведомления, но не знаю, как начать.

  METHOD GET_SINGLE_ATTACHMENT_CONTENT.

    " VARIABLES
    DATA: HEXCONT       TYPE TABLE OF SOLIX.
    DATA: DOCDATA       TYPE SOFOLENTI1.
    DATA: LV_LENGTH     TYPE I.

    " CHECK TO CONTINUE FUNCTION MODULE
    IF FILE_ID IS INITIAL. "type = SOFOLENTI1-DOC_ID.
      MESSAGE 'Document ID is empty.' TYPE 'E' RAISING DOC_ID_EMPTY.
    ENDIF.

    " GET BINARY CONTENT OF FILE
    CALL FUNCTION 'SO_DOCUMENT_READ_API1'
      EXPORTING
        DOCUMENT_ID    = FILE_ID
      IMPORTING
        DOCUMENT_DATA  = DOCDATA
      TABLES
        CONTENTS_HEX   = HEXCONT.

    IF SY-SUBRC <> 0.
      MESSAGE 'Error downloading file.' TYPE 'E' RAISING FILE_DOWNLOAD_ERROR.
    ENDIF.

    " CONVERT TO XSTRING
    LV_LENGTH = DOCDATA-DOC_SIZE.

    CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
      EXPORTING
        INPUT_LENGTH = LV_LENGTH
      IMPORTING
        BUFFER       = EV_RETURN "type XSTRING
      TABLES
        BINARY_TAB   = HEXCONT.

     IF SY-SUBRC <> 0.
      MESSAGE 'Error downloading file.' TYPE 'E' RAISING FILE_DOWNLOAD_ERROR.
    ENDIF.
  ENDMETHOD.

Я читал о функциональных модулях, таких как «SO_DOCUMENT_INSERT_API1», и он содержит информацию о файле, но не его содержимое (предпочтительно шестнадцатеричное содержимое). Любая идея о том, как начать с этого?


person Yanana    schedule 31.05.2018    source источник
comment
Извините, но SO_DOCUMENT_INSERT_API1 действительно имеет параметр содержимого файла CONTENTS_HEX. Или вы используете очень старую систему SAP?   -  person Sandra Rossi    schedule 02.06.2018
comment
Я тоже ищу тот же ответ. Не могли бы вы тогда указать, как связать это с уведомлением?   -  person Matthijs Mennens    schedule 03.06.2018


Ответы (2)


Может быть, вы можете что-то сделать с подходом, который я использовал. Проверьте этот пример ниже.

  1. Начните с разбора ваших данных в шестнадцатеричном виде
  2. Вставьте документ с помощью so_document_insert_api1
  3. Свяжите это с вашим уведомлением с помощью fm binary_relation_create


    " TYPES
    TYPES: BEGIN OF TYPE_FILE,
             NAME    TYPE STRING,
             TYPE    TYPE STRING,
             QMNUM   TYPE QMNUM,
             USER    TYPE CHAR64,
             HEXCONT TYPE XSTRING,
           END OF TYPE_FILE.
    
    
    " VARIABLES AND OBJECTS 
    DATA: LT_RETURN             TYPE TABLE OF BAPIRET2.
    DATA: LT_HEXCONT            TYPE TABLE OF SOLIX.
    DATA: LS_DOCDATA            TYPE SODOCCHGI1.
    DATA: LS_DOCINFO            TYPE SOFOLENTI1.
    DATA: LS_FILE               TYPE TYPE_FILE.
    DATA: LV_DOCTYPE            TYPE SOODK-OBJTP.
    DATA: LV_FOLDER_ID          TYPE SOOBJINFI1-OBJECT_ID.
    DATA: LV_LENGTH             TYPE I.
    
    DATA: OBJ_NOTIF             TYPE BORIDENT.
    DATA: OBJ_ATTACH            TYPE BORIDENT.
    
    DATA: P_QMNUM               TYPE QMNUM.
    
    LV_FOLDER_ID = 'FOL40000000000004'.
    
    " CONVERT HEX CONTENT TO BINARY  
    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        BUFFER        = LS_FILE-HEXCONT
      IMPORTING
        OUTPUT_LENGTH = LV_LENGTH
      TABLES
        BINARY_TAB    = LT_HEXCONT.
    
    " SET VALUES  
    LS_DOCDATA-OBJ_DESCR = LS_FILE-NAME.
    LS_DOCDATA-OBJ_LANGU = 'E'.
    LS_DOCDATA-OBJ_NAME  = 'MESSAGE'.
    LS_DOCDATA-DOC_SIZE = XSTRLEN( LS_FILE-HEXCONT ).
    
    LV_DOCTYPE = LS_FILE-TYPE.
    
    UNPACK LS_FILE-QMNUM TO P_QMNUM.
    
    
    " CREATE ATTACHMENT  
    CALL FUNCTION 'SO_DOCUMENT_INSERT_API1'
      EXPORTING
        FOLDER_ID     = LV_FOLDER_ID
        DOCUMENT_DATA = LS_DOCDATA
        DOCUMENT_TYPE = LV_DOCTYPE
      IMPORTING
        DOCUMENT_INFO = LS_DOCINFO
      TABLES
        CONTENTS_HEX  = LT_HEXCONT.
    
    
    " CREATE LINK TO OBJECT (Notification)
    OBJ_NOTIF-OBJKEY   = P_QMNUM.
    OBJ_NOTIF-OBJTYPE  = 'BUS2038'.
    
    OBJ_ATTACH-OBJKEY  = LS_DOCINFO-DOC_ID.
    OBJ_ATTACH-OBJTYPE = 'MESSAGE'.
    
    CALL FUNCTION 'BINARY_RELATION_CREATE'
      EXPORTING
        OBJ_ROLEA    = OBJ_NOTIF
        OBJ_ROLEB    = OBJ_ATTACH
        RELATIONTYPE = 'ATTA'.
    
    
    " COMMIT 
    COMMIT WORK.
    
person Matthijs Mennens    schedule 04.06.2018

Нужно ли открывать контент как шестнадцатеричный?

Вы, вероятно, просто хотите читать/писать в файл. Попробуйте открыть OPEN DATASET

https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abapset_dataset.htm

person Phil    schedule 31.05.2018
comment
OPEN DATASET не отвечает на вопрос Янаны, вставьте новое вложение для уведомления. Я предполагаю, что запрошенный ответ касается только подсказок по использованию SO_DOCUMENT_INSERT_API1 - person Sandra Rossi; 02.06.2018