为质量通知创建HEX附件

时间:2018-05-31 10:07:14

标签: hex sap attachment abap

我有这段代码来下载带有导入参数文件ID的文件的十六进制内容。我想为通知插入新的附件,但我不知道如何开始。

  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 '这样的功能模块,它有文件信息,但没有文件内容(最好是十六进制内容)。关于如何开始这个的任何想法?

2 个答案:

答案 0 :(得分:1)

也许你可以用我使用的方法做点什么。请查看下面的示例。

  1. 首先将数据解析为十六进制
  2. 使用so_document_insert_api1
  3. 插入文档
  4. 使用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.
    

答案 1 :(得分:-1)

是否有必要以十六进制打开协议?

您可能只想读取/写入文件。尝试打开OPEN DATASET

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