본문 바로가기
ABAP/개발Tip

[개발Tip] SAP DMS 사용 예시 (문서생성,첨부,다운,삭제,버전업)

by name_text 2023. 11. 28.

SAP DMS 사용 예시

SAP Document Management Service

 

#2023.12.06 : Binary 파일을 DMS문서에 첨부하는 방법을 추가 하였습니다(바이너리 파일로 첨부 추가)

 

DMS 기능을 이용하여 SAP에 파일을 첨부하고 다운로드 및 삭제하는 방법입니다.

예시 소스를 활용하여 단일 Class나 Function으로 만들어 활용하면 좋을듯 합니다.

 

 

# 사용예시

REPORT YDEMO_DMS.

PARAMETERS: P_DOKNR TYPE  BAPI_DOC_AUX-DOCNUMBER  MEMORY ID CV1,
            P_DOKAR TYPE  BAPI_DOC_AUX-DOCTYPE    MEMORY ID CV2 OBLIGATORY,
            P_DOKTL TYPE  BAPI_DOC_AUX-DOCPART    MEMORY ID CV4 OBLIGATORY,
            P_DOKVR TYPE  BAPI_DOC_AUX-DOCVERSION MEMORY ID CV3 OBLIGATORY,
            P_STORC TYPE  SDOKSTCAE-STOR_CAT DEFAULT 'DMS_C1_ST' OBLIGATORY.

SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TBL2.
  PARAMETERS: P_MATNR TYPE MARA-MATNR,
              P_LIFNR TYPE LFA1-LIFNR.
SELECTION-SCREEN END OF BLOCK BL2.

PARAMETERS: P_CV01 RADIOBUTTON GROUP RB1,   "문서 생성 및 파일 첨부
            P_CV02 RADIOBUTTON GROUP RB1,   "기존 문서에 파일 첨부 추가
            P_BIN  RADIOBUTTON GROUP RB1,   "바이너리 파일로 첨부 추가
            P_VERE RADIOBUTTON GROUP RB1,   "문서 버전 갱신
            P_DOWN RADIOBUTTON GROUP RB1,   "문서의 첨부파일 다운로드
            P_DELE RADIOBUTTON GROUP RB1,   "문서 삭제 표시
            P_DELF RADIOBUTTON GROUP RB1,   "첫번째 파일 삭제
            P_RELE RADIOBUTTON GROUP RB1.   "릴리즈

INITIALIZATION.
  %_P_DOKNR_%_APP_%-TEXT = '문서'.
  %_P_DOKAR_%_APP_%-TEXT = '문서 유형'.
  %_P_DOKTL_%_APP_%-TEXT = '문서 부분'.
  %_P_DOKVR_%_APP_%-TEXT = '문서 버전'.
  %_P_STORC_%_APP_%-TEXT = '저장소 범주'.

  TBL2 = '오브젝트 링크'.
  %_P_MATNR_%_APP_%-TEXT = '자재'.
  %_P_LIFNR_%_APP_%-TEXT = '공급업체'.

  %_P_CV01_%_APP_%-TEXT = '문서 생성 및 파일 첨부'.
  %_P_CV02_%_APP_%-TEXT = '기존 문서에 파일 첨부 추가'.
  %_P_BIN_%_APP_%-TEXT = '바이너리 파일로 첨부 추가'.
  %_P_VERE_%_APP_%-TEXT = '문서 버전 갱신'.
  %_P_DOWN_%_APP_%-TEXT = '문서의 첨부파일 다운로드'.
  %_P_DELE_%_APP_%-TEXT = '문서 삭제 표시'.
  %_P_DELF_%_APP_%-TEXT = '첫번째 파일 삭제'.
  %_P_RELE_%_APP_%-TEXT = '릴리즈'.


START-OF-SELECTION.
  CASE ABAP_TRUE.
    WHEN P_CV01.
      "문서 생성 및 파일 첨부
      PERFORM DOC_CREATE_FILE_SAVE.

    WHEN P_CV02.
      "기존 문서에 첨부 추가
      PERFORM DOC_ATT_FILE.

    WHEN P_BIN.
      "Binary 로 파일 첨부
      PERFORM DOC_BIN_FILE.

    WHEN P_VERE.
      "문서 버전 업
      PERFORM DOC_CREATE_NEW_VERSION.

    WHEN P_DOWN.
      "BINARY로 파일 다운로드
      PERFORM DOC_FILE_DOWNLOAD.

    WHEN P_DELE.
      "문서 삭제
      PERFORM DOC_DELETE.

    WHEN P_DELF.
      "첫번째 파일 삭제
      PERFORM DOC_DELETE_FILE.

    WHEN P_RELE.
      "문서 릴리즈
      PERFORM DOC_STATUS_CHANGE.

  ENDCASE.


CLASS LCL_FILE_DIALOG DEFINITION.
  PUBLIC SECTION.
    TYPES: BEGIN OF TS_FILE,
      FILENAME  TYPE DRAW-FILEP,
      FILEPATH  TYPE FILE_TABLE-FILENAME,
      EXTENSION TYPE C LENGTH 256,
      DAPPL     TYPE DRAW-DAPPL,
      END OF TS_FILE,
      TT_FILES TYPE STANDARD TABLE OF TS_FILE WITH EMPTY KEY.
   CLASS-METHODS: FILE_OPEN RETURNING VALUE(ET_FILES) TYPE TT_FILES,
                  FILE_SAVE IMPORTING IV_DEFAULT_FILE_NAME TYPE ANY
                                      VALUE(IT_DATA_TAB) TYPE STANDARD TABLE,
                  FILE_UPLOAD IMPORTING I_FILEPATH TYPE STRING
                              EXPORTING E_DATA_TAB TYPE STANDARD TABLE
                                        E_LENGTH   TYPE I,
                  IS_ITS RETURNING VALUE(IS_ITS) TYPE ABAP_BOOL.
ENDCLASS.
CLASS LCL_FILE_DIALOG IMPLEMENTATION.
  METHOD FILE_OPEN.
    DATA: LV_RC TYPE I,
          LT_FILETABLE TYPE FILETABLE.

    CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(
      EXPORTING
*        WINDOW_TITLE            =
*        DEFAULT_EXTENSION       =
*        DEFAULT_FILENAME        =
*        FILE_FILTER             = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
*        WITH_ENCODING           =
*        INITIAL_DIRECTORY       =
        MULTISELECTION          = ABAP_TRUE
      CHANGING
        FILE_TABLE              = LT_FILETABLE
        RC                      = LV_RC
*        USER_ACTION             =
*        FILE_ENCODING           =
      EXCEPTIONS
        FILE_OPEN_DIALOG_FAILED = 1
        CNTL_ERROR              = 2
        ERROR_NO_GUI            = 3
        NOT_SUPPORTED_BY_GUI    = 4
        others                  = 5
           ).
    IF SY-SUBRC <> 0.
*     Implement suitable error handling here
    ENDIF.

    IF LT_FILETABLE[] IS INITIAL.
      EXIT.
    ENDIF.

    DATA: LV_PFX_PATH TYPE  DRAW-FILEP,
          LV_PFX_FILE TYPE  DRAW-FILEP,
          LV_PFX_EXTENSION(256) TYPE C.
    DATA: LV_PFX_DAPPL  TYPE  DRAW-DAPPL,
          LT_PTX_TDWP    TYPE TABLE OF  TDWP.

    LOOP AT LT_FILETABLE INTO DATA(LS_FILETABLE).
      CALL FUNCTION 'CV120_SPLIT_PATH'
        EXPORTING
          PF_PATH        = LS_FILETABLE-FILENAME
        IMPORTING
          PFX_FILE       = LV_PFX_FILE
              .

      CALL FUNCTION 'CV120_SPLIT_FILE'
        EXPORTING
          PF_FILE                = LV_PFX_FILE
        IMPORTING
*         PFX_FILE               =
          PFX_EXTENSION          = LV_PFX_EXTENSION
*         PFX_DOTEXTENSION       =
                .

      CALL FUNCTION 'CV120_DOC_GET_APPL'
        EXPORTING
*         PF_DIALOG        =
*         PF_DISPLAY       =
          PF_FILE          = LV_PFX_FILE
          PF_TYPDT         = 'PC'
        IMPORTING
          PFX_DAPPL        = LV_PFX_DAPPL
        TABLES
          PTX_TDWP         = LT_PTX_TDWP
                .

      APPEND VALUE #( FILENAME   = LV_PFX_FILE
                      FILEPATH   = LS_FILETABLE-FILENAME
                      EXTENSION  = LV_PFX_EXTENSION
                      DAPPL      = LV_PFX_DAPPL ) TO ET_FILES.
    ENDLOOP.
  ENDMETHOD.

  METHOD FILE_SAVE.
    DATA: LV_FILENAME TYPE STRING,
          LV_PATH TYPE STRING,
          LV_FULLPATH TYPE STRING.

    CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG(
      EXPORTING
*        WINDOW_TITLE              =
*        DEFAULT_EXTENSION         =
        DEFAULT_FILE_NAME         = CONV #( IV_DEFAULT_FILE_NAME )
*        WITH_ENCODING             =
*        FILE_FILTER               =
*        INITIAL_DIRECTORY         =
*        PROMPT_ON_OVERWRITE       = 'X'
      CHANGING
        FILENAME                  = LV_FILENAME
        PATH                      = LV_PATH
        FULLPATH                  = LV_FULLPATH
*        USER_ACTION               =
*        FILE_ENCODING             =
      EXCEPTIONS
        CNTL_ERROR                = 1
        ERROR_NO_GUI              = 2
        NOT_SUPPORTED_BY_GUI      = 3
        INVALID_DEFAULT_FILE_NAME = 4
        others                    = 5
           ).
    IF SY-SUBRC <> 0.
*     Implement suitable error handling here
    ENDIF.

    IF LV_FULLPATH IS INITIAL.
      EXIT.
    ENDIF.

    CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD(
      EXPORTING
*        BIN_FILESIZE              =
        FILENAME                  = LV_FULLPATH
        FILETYPE                  = 'BIN'
*        APPEND                    = SPACE
*        WRITE_FIELD_SEPARATOR     = SPACE
*        HEADER                    = '00'
*        TRUNC_TRAILING_BLANKS     = SPACE
*        WRITE_LF                  = 'X'
*        COL_SELECT                = SPACE
*        COL_SELECT_MASK           = SPACE
*        DAT_MODE                  = SPACE
*        CONFIRM_OVERWRITE         = SPACE
*        NO_AUTH_CHECK             = SPACE
*        CODEPAGE                  = SPACE
*        IGNORE_CERR               = ABAP_TRUE
*        REPLACEMENT               = '#'
*        WRITE_BOM                 = SPACE
*        TRUNC_TRAILING_BLANKS_EOL = 'X'
*        WK1_N_FORMAT              = SPACE
*        WK1_N_SIZE                = SPACE
*        WK1_T_FORMAT              = SPACE
*        WK1_T_SIZE                = SPACE
*        SHOW_TRANSFER_STATUS      = 'X'
*        FIELDNAMES                =
*        WRITE_LF_AFTER_LAST_LINE  = 'X'
*        VIRUS_SCAN_PROFILE        = '/SCET/GUI_DOWNLOAD'
*      IMPORTING
*        FILELENGTH                =
      CHANGING
        DATA_TAB                  = IT_DATA_TAB
      EXCEPTIONS
        FILE_WRITE_ERROR          = 1
        NO_BATCH                  = 2
        GUI_REFUSE_FILETRANSFER   = 3
        INVALID_TYPE              = 4
        NO_AUTHORITY              = 5
        UNKNOWN_ERROR             = 6
        HEADER_NOT_ALLOWED        = 7
        SEPARATOR_NOT_ALLOWED     = 8
        FILESIZE_NOT_ALLOWED      = 9
        HEADER_TOO_LONG           = 10
        DP_ERROR_CREATE           = 11
        DP_ERROR_SEND             = 12
        DP_ERROR_WRITE            = 13
        UNKNOWN_DP_ERROR          = 14
        ACCESS_DENIED             = 15
        DP_OUT_OF_MEMORY          = 16
        DISK_FULL                 = 17
        DP_TIMEOUT                = 18
        FILE_NOT_FOUND            = 19
        DATAPROVIDER_EXCEPTION    = 20
        CONTROL_FLUSH_ERROR       = 21
        NOT_SUPPORTED_BY_GUI      = 22
        ERROR_NO_GUI              = 23
        others                    = 24
           ).
    IF SY-SUBRC <> 0.
*     Implement suitable error handling here
    ENDIF.
  ENDMETHOD.

  METHOD FILE_UPLOAD.

    CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD(
      exporting
        FILENAME                = I_FILEPATH
        FILETYPE                = 'BIN'
*        HAS_FIELD_SEPARATOR     = SPACE    " Columns Separated by Tabs in Case of ASCII Upload
*        HEADER_LENGTH           = 0    " Length of Header for Binary Data
*        READ_BY_LINE            = 'X'    " File Written Line-By-Line to the Internal Table
*        DAT_MODE                = SPACE    " Numeric and date fields are in DAT format in WS_DOWNLOAD
*        CODEPAGE                =     " Character Representation for Output
*        IGNORE_CERR             = ABAP_TRUE    " Ignore character set conversion errors?
*        REPLACEMENT             = '#'    " Replacement Character for Non-Convertible Characters
*        VIRUS_SCAN_PROFILE      =     " Virus Scan Profile
      importing
        FILELENGTH              = E_LENGTH    " File Length
*        HEADER                  =     " File Header in Case of Binary Upload
      changing
        DATA_TAB                = E_DATA_TAB    " Transfer table for file contents
*        ISSCANPERFORMED         = SPACE    " File already scanned
      exceptions
        FILE_OPEN_ERROR         = 1
        FILE_READ_ERROR         = 2
        NO_BATCH                = 3
        GUI_REFUSE_FILETRANSFER = 4
        INVALID_TYPE            = 5
        NO_AUTHORITY            = 6
        UNKNOWN_ERROR           = 7
        BAD_DATA_FORMAT         = 8
        HEADER_NOT_ALLOWED      = 9
        SEPARATOR_NOT_ALLOWED   = 10
        HEADER_TOO_LONG         = 11
        UNKNOWN_DP_ERROR        = 12
        ACCESS_DENIED           = 13
        DP_OUT_OF_MEMORY        = 14
        DISK_FULL               = 15
        DP_TIMEOUT              = 16
        NOT_SUPPORTED_BY_GUI    = 17
        ERROR_NO_GUI            = 18
        OTHERS                  = 19
    ).
    if sy-subrc <> 0.
*     message id sy-msgid type sy-msgty number sy-msgno
*                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    endif.
  ENDMETHOD.

  METHOD IS_ITS.
    DATA LV_RETURN TYPE C.
    CALL FUNCTION 'GUI_IS_ITS'
     IMPORTING
       RETURN        = LV_RETURN
              .
    IS_ITS = COND #( WHEN LV_RETURN IS NOT INITIAL THEN ABAP_TRUE ELSE ABAP_FALSE ).
  ENDMETHOD.
ENDCLASS.

*&---------------------------------------------------------------------*
*&      Form  DOC_CREATE_FILE_SAVE
*&---------------------------------------------------------------------*
*       문서 생성 및 파일 첨부
*----------------------------------------------------------------------*
FORM DOC_CREATE_FILE_SAVE.
  DATA: LS_DOCUMENTDATA TYPE  BAPI_DOC_DRAW2.
  DATA: LV_DOCUMENTTYPE     TYPE  BAPI_DOC_AUX-DOCTYPE,
        LV_DOCUMENTNUMBER   TYPE  BAPI_DOC_AUX-DOCNUMBER,
        LV_DOCUMENTPART     TYPE  BAPI_DOC_AUX-DOCPART,
        LV_DOCUMENTVERSION  TYPE  BAPI_DOC_AUX-DOCVERSION,
        LS_RETURN           TYPE  BAPIRET2.
  DATA: LT_DOCUMENTDESCRIPTIONS  TYPE TABLE OF BAPI_DOC_DRAT,
        LT_OBJECTLINKS          TYPE TABLE OF BAPI_DOC_DRAD,
        LT_DOCUMENTFILES        TYPE TABLE OF BAPI_DOC_FILES2.

  CLEAR: LV_DOCUMENTTYPE, LV_DOCUMENTNUMBER, LV_DOCUMENTPART, LV_DOCUMENTVERSION, LS_RETURN.
  CLEAR: LT_DOCUMENTDESCRIPTIONS, LT_OBJECTLINKS, LT_DOCUMENTFILES.

  DATA(LT_FILES) = LCL_FILE_DIALOG=>FILE_OPEN( ).  "파일 선택
  IF LT_FILES[] IS INITIAL.
    EXIT.
  ENDIF.

  DATA LV_DESCRIPTION TYPE BAPI_DOC_DRAW2-DESCRIPTION.
  LV_DESCRIPTION = |{ LT_FILES[ 1 ]-FILENAME }{ COND #( WHEN LINES( LT_FILES ) > 1 THEN |{ LINES( LT_FILES ) - 1 }| ) }|.
  "문서 정보
  LS_DOCUMENTDATA = VALUE #(  DOCUMENTTYPE    = P_DOKAR   "Document Type : SPRO > Cross-Application Components > Document Management > Control Data > Define Document Types
                              DOCUMENTPART    = P_DOKTL
                              DOCUMENTVERSION = P_DOKVR
                              DESCRIPTION     = LV_DESCRIPTION ).

  "문서의 언어별 내역
  APPEND VALUE #( LANGUAGE    = SY-LANGU
                  DESCRIPTION = LV_DESCRIPTION ) TO LT_DOCUMENTDESCRIPTIONS.
  IF SY-LANGU NE '3'.
    APPEND VALUE #( LANGUAGE    = '3'
                    DESCRIPTION = LV_DESCRIPTION ) TO LT_DOCUMENTDESCRIPTIONS.
  ENDIF.

  "문서가 연결되는 오브젝트
  IF P_MATNR IS NOT INITIAL.
    APPEND VALUE #( OBJECTTYPE  = 'MARA'
                    OBJECTKEY   = P_MATNR
                    DOCUMENTDIRECTION = 'X' ) TO LT_OBJECTLINKS.
  ENDIF.
  IF P_LIFNR IS NOT INITIAL.
    APPEND VALUE #( OBJECTTYPE  = 'LFA1'
                    OBJECTKEY   = P_LIFNR
                    DOCUMENTDIRECTION = 'X' ) TO LT_OBJECTLINKS.
  ENDIF.

  "문서에 첨부할 파일
  LOOP AT LT_FILES INTO DATA(LS_FILE).
    APPEND VALUE #( STORAGECATEGORY = P_STORC    "Storage Category : T-Code OACT
                    DOCFILE         = LS_FILE-FILEPATH
                    WSAPPLICATION   = LS_FILE-DAPPL
                    ) TO LT_DOCUMENTFILES.
  ENDLOOP.

  CALL FUNCTION 'BAPI_DOCUMENT_CREATE2'
    EXPORTING
      DOCUMENTDATA               = LS_DOCUMENTDATA
*     HOSTNAME                   =
*     DOCBOMCHANGENUMBER         =
*     DOCBOMVALIDFROM            =
*     DOCBOMREVISIONLEVEL        =
*     CAD_MODE                   = ' '
*     PF_FTP_DEST                = ' '
*     PF_HTTP_DEST               = ' '
*     DEFAULTCLASS               = 'X'
    IMPORTING
      DOCUMENTTYPE               = LV_DOCUMENTTYPE
      DOCUMENTNUMBER             = LV_DOCUMENTNUMBER
      DOCUMENTPART               = LV_DOCUMENTPART
      DOCUMENTVERSION            = LV_DOCUMENTVERSION
      RETURN                     = LS_RETURN
    TABLES
*     CHARACTERISTICVALUES       =
*     CLASSALLOCATIONS           =
      DOCUMENTDESCRIPTIONS       = LT_DOCUMENTDESCRIPTIONS
      OBJECTLINKS                = LT_OBJECTLINKS
*     DOCUMENTSTRUCTURE          =
      DOCUMENTFILES              = LT_DOCUMENTFILES
*     LONGTEXTS                  =
*     COMPONENTS                 =
            .
  IF LS_RETURN-TYPE NE 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT          = 'X'
*     IMPORTING
*       RETURN        =
              .
    WRITE:/ LV_DOCUMENTTYPE, LV_DOCUMENTNUMBER, LV_DOCUMENTPART, LV_DOCUMENTVERSION.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*     IMPORTING
*       RETURN        =
              .
  ENDIF.
  IF LS_RETURN-ID IS NOT INITIAL.
    MESSAGE ID LS_RETURN-ID TYPE 'S' NUMBER LS_RETURN-NUMBER
    WITH LS_RETURN-MESSAGE_V1 LS_RETURN-MESSAGE_V2 LS_RETURN-MESSAGE_V3 LS_RETURN-MESSAGE_V4 DISPLAY LIKE LS_RETURN-TYPE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOC_ATT_FILE
*&---------------------------------------------------------------------*
*       기존 문서에 파일 첨부
*----------------------------------------------------------------------*
FORM DOC_ATT_FILE .
  DATA: LS_RETURN           TYPE  BAPIRET2,
        LT_DOCUMENTFILES        TYPE TABLE OF BAPI_DOC_FILES2.

  DATA(LT_FILES) = LCL_FILE_DIALOG=>FILE_OPEN( ).  "파일 선택
  IF LT_FILES[] IS INITIAL.
    EXIT.
  ENDIF.

  "문서에 첨부할 파일
  LOOP AT LT_FILES INTO DATA(LS_FILE).
    APPEND VALUE #( STORAGECATEGORY = P_STORC    "Storage Category : T-Code OACT
                    DOCFILE         = LS_FILE-FILEPATH
                    WSAPPLICATION   = LS_FILE-DAPPL
                    ) TO LT_DOCUMENTFILES.
  ENDLOOP.

  CALL FUNCTION 'BAPI_DOCUMENT_CHECKIN2'
    EXPORTING
      DOCUMENTTYPE            = P_DOKAR
      DOCUMENTNUMBER          = P_DOKNR
      DOCUMENTPART            = P_DOKTL
      DOCUMENTVERSION         = P_DOKVR
*     HOSTNAME                = ' '
*     STATUSINTERN            = ' '
*     STATUSEXTERN            = ' '
*     STATUSLOG               = ' '
*     REVLEVEL                = ' '
*     AENNR                   = ' '
*     PF_HTTP_DEST            = ' '
*     PF_FTP_DEST             = ' '
    IMPORTING
      RETURN                  = LS_RETURN
    TABLES
      DOCUMENTFILES           = LT_DOCUMENTFILES
*     COMPONENTS              =
*     DOCUMENTSTRUCTURE       =
            .
  IF LS_RETURN-TYPE NE 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT          = 'X'
*     IMPORTING
*       RETURN        =
              .
    WRITE:/ 'OK'.
    WRITE:/5 LS_FILE-FILENAME.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*     IMPORTING
*       RETURN        =
              .

    MESSAGE ID LS_RETURN-ID TYPE LS_RETURN-TYPE NUMBER LS_RETURN-NUMBER
    WITH LS_RETURN-MESSAGE_V1 LS_RETURN-MESSAGE_V2 LS_RETURN-MESSAGE_V3 LS_RETURN-MESSAGE_V4 INTO DATA(LV_MSG).

    WRITE:/ 'ERR', LV_MSG.
  ENDIF.
  IF LS_RETURN-ID IS NOT INITIAL.
    MESSAGE ID LS_RETURN-ID TYPE 'S' NUMBER LS_RETURN-NUMBER
    WITH LS_RETURN-MESSAGE_V1 LS_RETURN-MESSAGE_V2 LS_RETURN-MESSAGE_V3 LS_RETURN-MESSAGE_V4 DISPLAY LIKE LS_RETURN-TYPE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_CHECKOUTVIEW2
*&---------------------------------------------------------------------*
*       C:\SAP_TEMP 로 파일 다운로드
*----------------------------------------------------------------------*
FORM GET_CHECKOUTVIEW2.
  DATA: LS_DOCUMENTDATA TYPE  BAPI_DOC_DRAW2,
        LS_RETURN       TYPE  BAPIRET2.
  DATA: LT_OBJECTLINKS  TYPE TABLE OF BAPI_DOC_DRAD,
        LT_DOCUMENTDESCRIPTIONS  TYPE TABLE OF  BAPI_DOC_DRAT,
        LT_LONGTEXTS  TYPE TABLE OF BAPI_DOC_TEXT,
        LT_STATUSLOG  TYPE TABLE OF BAPI_DOC_DRAP,
        LT_DOCUMENTFILES  TYPE TABLE OF BAPI_DOC_FILES2,
        LT_COMPONENTS  TYPE TABLE OF  BAPI_DOC_COMP,
        LT_CHARACTERISTICVALUES  TYPE TABLE OF  BAPI_CHARACTERISTIC_VALUES,
        LT_CLASSALLOCATIONS  TYPE TABLE OF  BAPI_CLASS_ALLOCATION,
        LT_DOCUMENTSTRUCTURE  TYPE TABLE OF BAPI_DOC_STRUCTURE,
        LT_WHEREUSEDLIST  TYPE TABLE OF BAPI_DOC_STRUCTURE.

  CALL FUNCTION 'BAPI_DOCUMENT_GETDETAIL2'
    EXPORTING
      DOCUMENTTYPE               = P_DOKAR
      DOCUMENTNUMBER             = P_DOKNR
      DOCUMENTPART               = P_DOKTL
      DOCUMENTVERSION            = P_DOKVR
*     GETOBJECTLINKS             = ' '
*     GETCOMPONENTS              = ' '
*     GETSTATUSLOG               = ' '
*     GETLONGTEXTS               = ' '
*     GETACTIVEFILES             = 'X'
*     GETDOCDESCRIPTIONS         = 'X'
*     GETDOCFILES                = 'X'
*     GETCLASSIFICATION          = ' '
*     GETSTRUCTURE               = ' '
*     GETWHEREUSED               = ' '
*     HOSTNAME                   = ' '
*     INHERITED                  = 'X'
*     PF_BAPI_CALL               =
    IMPORTING
      DOCUMENTDATA               = LS_DOCUMENTDATA
      RETURN                     = LS_RETURN
    TABLES
      OBJECTLINKS                = LT_OBJECTLINKS
      DOCUMENTDESCRIPTIONS       = LT_DOCUMENTDESCRIPTIONS
      LONGTEXTS                  = LT_LONGTEXTS
      STATUSLOG                  = LT_STATUSLOG
      DOCUMENTFILES              = LT_DOCUMENTFILES
      COMPONENTS                 = LT_COMPONENTS
      CHARACTERISTICVALUES       = LT_CHARACTERISTICVALUES
      CLASSALLOCATIONS           = LT_CLASSALLOCATIONS
      DOCUMENTSTRUCTURE          = LT_DOCUMENTSTRUCTURE
      WHEREUSEDLIST              = LT_WHEREUSEDLIST
            .
  IF SY-SUBRC EQ 0.
  ENDIF.
  IF LT_DOCUMENTFILES[] IS INITIAL.
    EXIT.
  ENDIF.

  DATA(LS_DOCUMENTFILES) = LT_DOCUMENTFILES[ 1 ].

  CALL FUNCTION 'BAPI_DOCUMENT_CHECKOUTVIEW2'
    EXPORTING
      DOCUMENTTYPE              = P_DOKAR
      DOCUMENTNUMBER            = P_DOKNR
      DOCUMENTPART              = P_DOKTL
      DOCUMENTVERSION           = P_DOKVR
      DOCUMENTFILE              = LS_DOCUMENTFILES
*     GETSTRUCTURE              = '1'
*     GETCOMPONENTS             = 'X'
*     ORIGINALPATH              = ' '
*     HOSTNAME                  = ' '
*     GETHEADER                 = 'X'
*     DOCBOMCHANGENUMBER        =
*     DOCBOMVALIDFROM           =
*     DOCBOMREVISIONLEVEL       =
*     PF_HTTP_DEST              = ' '
*     PF_FTP_DEST               = ' '
    IMPORTING
      RETURN                    = LS_RETURN
*   TABLES
*     DOCUMENTSTRUCTURE         =
*     DOCUMENTFILES             =
*     COMPONENTS                =
            .

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOC_FILE_DOWNLOAD
*&---------------------------------------------------------------------*
*       BINARY로 파일 다운로드
*----------------------------------------------------------------------*
FORM DOC_FILE_DOWNLOAD.
*  DATA: LS_DOCUMENTDATA TYPE  BAPI_DOC_DRAW2,
*        LS_RETURN       TYPE  BAPIRET2.
*  DATA: LT_OBJECTLINKS  TYPE TABLE OF BAPI_DOC_DRAD,
*        LT_DOCUMENTDESCRIPTIONS  TYPE TABLE OF BAPI_DOC_DRAT,
*        LT_LONGTEXTS  TYPE TABLE OF BAPI_DOC_TEXT,
*        LT_STATUSLOG  TYPE TABLE OF BAPI_DOC_DRAP,
*        LT_DOCUMENTFILES  TYPE TABLE OF BAPI_DOC_FILES2,
*        LT_COMPONENTS  TYPE TABLE OF BAPI_DOC_COMP,
*        LT_CHARACTERISTICVALUES  TYPE TABLE OF BAPI_CHARACTERISTIC_VALUES,
*        LT_CLASSALLOCATIONS  TYPE TABLE OF BAPI_CLASS_ALLOCATION,
*        LT_DOCUMENTSTRUCTURE  TYPE TABLE OF BAPI_DOC_STRUCTURE,
*        LT_WHEREUSEDLIST  TYPE TABLE OF BAPI_DOC_STRUCTURE.
*
*  CALL FUNCTION 'BAPI_DOCUMENT_GETDETAIL2'
*    EXPORTING
*      DOCUMENTTYPE               = P_DOKAR
*      DOCUMENTNUMBER             = P_DOKNR
*      DOCUMENTPART               = P_DOKTL
*      DOCUMENTVERSION            = P_DOKVR
**     GETOBJECTLINKS             = ' '
**     GETCOMPONENTS              = ' '
**     GETSTATUSLOG               = ' '
**     GETLONGTEXTS               = ' '
**     GETACTIVEFILES             = 'X'
**     GETDOCDESCRIPTIONS         = 'X'
**     GETDOCFILES                = 'X'
**     GETCLASSIFICATION          = ' '
**     GETSTRUCTURE               = ' '
**     GETWHEREUSED               = ' '
**     HOSTNAME                   = ' '
**     INHERITED                  = 'X'
**     PF_BAPI_CALL               =
*    IMPORTING
*      DOCUMENTDATA               = LS_DOCUMENTDATA
*      RETURN                     = LS_RETURN
*    TABLES
*      OBJECTLINKS                = LT_OBJECTLINKS
*      DOCUMENTDESCRIPTIONS       = LT_DOCUMENTDESCRIPTIONS
**      LONGTEXTS                  = LT_LONGTEXTS
**      STATUSLOG                  = LT_STATUSLOG
*      DOCUMENTFILES              = LT_DOCUMENTFILES
**      COMPONENTS                 = LT_COMPONENTS
**      CHARACTERISTICVALUES       = LT_CHARACTERISTICVALUES
**      CLASSALLOCATIONS           = LT_CLASSALLOCATIONS
**      DOCUMENTSTRUCTURE          = LT_DOCUMENTSTRUCTURE
**      WHEREUSEDLIST              = LT_WHEREUSEDLIST
*            .
*  IF SY-SUBRC EQ 0.
*  ENDIF.
*  IF LT_DOCUMENTFILES[] IS INITIAL.
*    EXIT.
*  ENDIF.

  SELECT
    A~DOKAR,
    A~DOKNR,
    A~DOKVR,
    A~DOKTL,
    A~FILE_IDX,
    A~DAPPL,
    A~FILENAME,
    C~PHIO_ID   AS FILE_ID,
    C~STOR_CAT  AS STORAGECATEGORY
  FROM DMS_DOC_FILES AS A
    INNER JOIN DMS_DOC2LOIO AS B ON A~DOKAR EQ B~DOKAR
                                AND A~DOKNR EQ B~DOKNR
                                AND A~DOKVR EQ B~DOKVR
                                AND A~DOKTL EQ B~DOKTL
                                AND A~FILE_IDX EQ B~LO_INDEX
    INNER JOIN DMS_PH_CD1 AS C ON B~LO_OBJID EQ C~LOIO_ID
  WHERE A~DOKAR EQ @P_DOKAR
    AND A~DOKNR EQ @P_DOKNR
    AND A~DOKVR EQ @P_DOKVR
    AND A~DOKTL EQ @P_DOKTL
    AND B~LO_TYPE EQ '01'
    AND C~PH_CLASS EQ 'DMS_PCD1'
    AND C~LO_CLASS EQ 'DMS_LCD1'
  INTO TABLE @DATA(LT_DOCUMENTFILES).
  DATA(LS_DOCUMENTFILE) = LT_DOCUMENTFILES[ 1 ].

  IF LCL_FILE_DIALOG=>IS_ITS( ).
    DATA LV_URL TYPE C LENGTH 1024.
    LV_URL = |{ CL_HTTP_SERVER=>GET_LOCATION( ) }/rest/mm/dms/{ LS_DOCUMENTFILE-FILE_ID }|.

    CALL FUNCTION 'CALL_BROWSER'
      EXPORTING
        URL                    = LV_URL
      EXCEPTIONS
        FRONTEND_NOT_SUPPORTED = 1
        FRONTEND_ERROR         = 2
        PROG_NOT_FOUND         = 3
        NO_BATCH               = 4
        UNSPECIFIED_ERROR      = 5
        OTHERS                 = 6
      .
    IF SY-SUBRC EQ 0.
      EXIT.
    ENDIF.
  ENDIF.

  DATA: LT_ACCESS_INFO  TYPE TABLE OF  SCMS_ACINF,
        LT_CONTENT_TXT  TYPE TABLE OF  SDOKCNTASC,
        LT_CONTENT_BIN  TYPE TABLE OF  SDOKCNTBIN.

  CALL FUNCTION 'SCMS_DOC_READ'
    EXPORTING
*     MANDT                       = SY-MANDT
      STOR_CAT                    = LS_DOCUMENTFILE-STORAGECATEGORY
*     CREP_ID                     = ' '
      DOC_ID                      = LS_DOCUMENTFILE-FILE_ID
*     PHIO_ID                     =
*     SIGNATURE                   = 'X'
*     SECURITY                    = ' '
*     NO_CACHE                    = ' '
*     RAW_MODE                    = ' '
*   IMPORTING
*     FROM_CACHE                  =
*     CREA_TIME                   =
*     CREA_DATE                   =
*     CHNG_TIME                   =
*     CHNG_DATE                   =
*     STATUS                      =
*     DOC_PROT                    =
    TABLES
      ACCESS_INFO                 = LT_ACCESS_INFO
      CONTENT_TXT                 = LT_CONTENT_TXT
      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 <> 0.
* Implement suitable error handling here
  ENDIF.
  IF LT_ACCESS_INFO[] IS INITIAL.
    EXIT.
  ENDIF.

  "파일 다운로드
  LCL_FILE_DIALOG=>FILE_SAVE( IV_DEFAULT_FILE_NAME = CL_HTTP_UTILITY=>UNESCAPE_URL( CONV #( LT_ACCESS_INFO[ 1 ]-COMP_ID ) )
                              IT_DATA_TAB          = LT_CONTENT_BIN[] ).
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOC_DELETE
*&---------------------------------------------------------------------*
*       문서 삭제
*----------------------------------------------------------------------*
FORM DOC_DELETE .
  DATA: LS_RETURN       TYPE  BAPIRET2.

  CALL FUNCTION 'BAPI_DOCUMENT_DELETE'
    EXPORTING
      DOCUMENTTYPE          = P_DOKAR
      DOCUMENTNUMBER        = P_DOKNR
      DOCUMENTPART          = P_DOKTL
      DOCUMENTVERSION       = P_DOKVR
    IMPORTING
      RETURN                = LS_RETURN
            .
  IF LS_RETURN-TYPE NE 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT          = 'X'
*     IMPORTING
*       RETURN        =
              .
    WRITE:/ 'OK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*     IMPORTING
*       RETURN        =
              .
  ENDIF.
  IF LS_RETURN-ID IS NOT INITIAL.
    MESSAGE ID LS_RETURN-ID TYPE 'S' NUMBER LS_RETURN-NUMBER
    WITH LS_RETURN-MESSAGE_V1 LS_RETURN-MESSAGE_V2 LS_RETURN-MESSAGE_V3 LS_RETURN-MESSAGE_V4 DISPLAY LIKE LS_RETURN-TYPE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOC_CREATE_NEW_VERSION
*&---------------------------------------------------------------------*
*       문서 버전 갱신
*----------------------------------------------------------------------*
FORM DOC_CREATE_NEW_VERSION .
  DATA: LV_DOCUMENTTYPE     TYPE  BAPI_DOC_AUX-DOCTYPE,
        LV_DOCUMENTNUMBER   TYPE  BAPI_DOC_AUX-DOCNUMBER,
        LV_DOCUMENTPART     TYPE  BAPI_DOC_AUX-DOCPART,
        LV_DOCUMENTVERSION  TYPE  BAPI_DOC_AUX-DOCVERSION,
        LS_RETURN           TYPE  BAPIRET2.

  CALL FUNCTION 'BAPI_DOCUMENT_CREATENEWVRS2'
    EXPORTING
      REFDOCUMENTTYPE               = P_DOKAR
      REFDOCUMENTNUMBER             = P_DOKNR
      REFDOCUMENTPART               = P_DOKTL
      REFDOCUMENTVERSION            = P_DOKVR
*     NEWDOCUMENTVERSION            =
*     STATUSINTERN                  =
*     STATUSEXTERN                  =
*     STATUSLOG                     =
*     REVLEVEL                      =
*     AENNR                         =
*     COPYCLASSIFICATION            =
*     COPYORIGINALS                 = 'X'
*     COPYDOCBOM                    = 'X'
*     DOCBOMCHANGENUMBERREAD        =
*     DOCBOMVALIDFROMREAD           =
*     DOCBOMREVLEVELREAD            =
*     DOCBOMCHANGENUMBERWRITE       =
*     DOCBOMVALIDFROMWRITE          =
*     DOCBOMREVLEVELWRITE           =
    IMPORTING
      DOCTYPE                       = LV_DOCUMENTTYPE
      DOCNUMBER                     = LV_DOCUMENTNUMBER
      DOCPART                       = LV_DOCUMENTPART
      DOCVERSION                    = LV_DOCUMENTVERSION
      RETURN                        = LS_RETURN
*   TABLES
*     COPYOBJECTLINKS               =
            .
  IF LS_RETURN-TYPE NE 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT          = 'X'
*     IMPORTING
*       RETURN        =
              .
    WRITE:/ LV_DOCUMENTTYPE, LV_DOCUMENTNUMBER, LV_DOCUMENTPART, LV_DOCUMENTVERSION.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*     IMPORTING
*       RETURN        =
              .
  ENDIF.
  IF LS_RETURN-ID IS NOT INITIAL.
    MESSAGE ID LS_RETURN-ID TYPE 'S' NUMBER LS_RETURN-NUMBER
    WITH LS_RETURN-MESSAGE_V1 LS_RETURN-MESSAGE_V2 LS_RETURN-MESSAGE_V3 LS_RETURN-MESSAGE_V4 DISPLAY LIKE LS_RETURN-TYPE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOC_DELETE_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM DOC_DELETE_FILE .
  DATA: LS_DOCUMENTDATA   TYPE  BAPI_DOC_DRAW2,
        LS_DOCUMENTDATAX  TYPE  BAPI_DOC_DRAWX2.
  DATA: LS_RETURN           TYPE  BAPIRET2.
  DATA: LT_DOCUMENTFILES  TYPE TABLE OF BAPI_DOC_FILES2.


  CALL FUNCTION 'BAPI_DOCUMENT_GETDETAIL2'
    EXPORTING
      DOCUMENTTYPE               = P_DOKAR
      DOCUMENTNUMBER             = P_DOKNR
      DOCUMENTPART               = P_DOKTL
      DOCUMENTVERSION            = P_DOKVR
*     GETOBJECTLINKS             = ' '
*     GETCOMPONENTS              = ' '
*     GETSTATUSLOG               = ' '
*     GETLONGTEXTS               = ' '
*     GETACTIVEFILES             = 'X'
*     GETDOCDESCRIPTIONS         = 'X'
*     GETDOCFILES                = 'X'
*     GETCLASSIFICATION          = ' '
*     GETSTRUCTURE               = ' '
*     GETWHEREUSED               = ' '
*     HOSTNAME                   = ' '
*     INHERITED                  = 'X'
*     PF_BAPI_CALL               =
    IMPORTING
      DOCUMENTDATA               = LS_DOCUMENTDATA
      RETURN                     = LS_RETURN
    TABLES
*      OBJECTLINKS                = LT_OBJECTLINKS
*      DOCUMENTDESCRIPTIONS       = LT_DOCUMENTDESCRIPTIONS
*      LONGTEXTS                  = LT_LONGTEXTS
*      STATUSLOG                  = LT_STATUSLOG
      DOCUMENTFILES              = LT_DOCUMENTFILES
*      COMPONENTS                 = LT_COMPONENTS
*      CHARACTERISTICVALUES       = LT_CHARACTERISTICVALUES
*      CLASSALLOCATIONS           = LT_CLASSALLOCATIONS
*      DOCUMENTSTRUCTURE          = LT_DOCUMENTSTRUCTURE
*      WHEREUSEDLIST              = LT_WHEREUSEDLIST
            .
  IF SY-SUBRC EQ 0.
  ENDIF.
  IF LT_DOCUMENTFILES[] IS INITIAL.
    EXIT.
  ENDIF.

  DATA(LS_DOCUMENTFILE) = LT_DOCUMENTFILES[ 1 ].
  CLEAR LT_DOCUMENTFILES.
  LS_DOCUMENTFILE-DELETEVALUE = 'X'.
  APPEND LS_DOCUMENTFILE TO LT_DOCUMENTFILES.

  CALL FUNCTION 'BAPI_DOCUMENT_CHANGE2'
    EXPORTING
      DOCUMENTTYPE               = P_DOKAR
      DOCUMENTNUMBER             = P_DOKNR
      DOCUMENTPART               = P_DOKTL
      DOCUMENTVERSION            = P_DOKVR
      DOCUMENTDATA               = LS_DOCUMENTDATA
      DOCUMENTDATAX              = LS_DOCUMENTDATAX
*     HOSTNAME                   =
*     DOCBOMCHANGENUMBER         =
*     DOCBOMVALIDFROM            =
*     DOCBOMREVISIONLEVEL        =
*     SENDCOMPLETEBOM            = ' '
*     PF_FTP_DEST                = ' '
*     PF_HTTP_DEST               = ' '
*     CAD_MODE                   = ' '
*     ACCEPT_EMPTY_BOM           = ' '
    IMPORTING
      RETURN                     = LS_RETURN
    TABLES
*     CHARACTERISTICVALUES       =
*     CLASSALLOCATIONS           =
*     DOCUMENTDESCRIPTIONS       =
*     OBJECTLINKS                =
*     DOCUMENTSTRUCTURE          =
      DOCUMENTFILES              = LT_DOCUMENTFILES
*     LONGTEXTS                  =
*     COMPONENTS                 =
            .

  IF LS_RETURN-TYPE NE 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT          = 'X'
*     IMPORTING
*       RETURN        =
              .
    WRITE:/ 'OK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*     IMPORTING
*       RETURN        =
              .
  ENDIF.
  IF LS_RETURN-ID IS NOT INITIAL.
    MESSAGE ID LS_RETURN-ID TYPE 'S' NUMBER LS_RETURN-NUMBER
    WITH LS_RETURN-MESSAGE_V1 LS_RETURN-MESSAGE_V2 LS_RETURN-MESSAGE_V3 LS_RETURN-MESSAGE_V4 DISPLAY LIKE LS_RETURN-TYPE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOC_STATUS_CHANGE
*&---------------------------------------------------------------------*
*       상태 변경
*----------------------------------------------------------------------*
FORM DOC_STATUS_CHANGE .
  DATA: LV_STATUSEXTERN LIKE  BAPI_DOC_DRAW-STATUSEXTERN VALUE 'RE',
        LV_STATUSINTERN LIKE  BAPI_DOC_DRAW-STATUSINTERN.
  DATA: LS_RETURN           TYPE  BAPIRET2.

  CALL FUNCTION 'BAPI_DOCUMENT_SETSTATUS'
    EXPORTING
      DOCUMENTTYPE          = P_DOKAR
      DOCUMENTNUMBER        = P_DOKNR
      DOCUMENTPART          = P_DOKTL
      DOCUMENTVERSION       = P_DOKVR
      STATUSEXTERN          = LV_STATUSEXTERN
      STATUSINTERN          = LV_STATUSINTERN
*     STATUSLOG             = ' '
    IMPORTING
      RETURN                = LS_RETURN.
            .
  IF LS_RETURN-TYPE NE 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT          = 'X'
*     IMPORTING
*       RETURN        =
              .
    WRITE:/ 'OK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*     IMPORTING
*       RETURN        =
              .
  ENDIF.
  IF LS_RETURN-ID IS NOT INITIAL.
    MESSAGE ID LS_RETURN-ID TYPE 'S' NUMBER LS_RETURN-NUMBER
    WITH LS_RETURN-MESSAGE_V1 LS_RETURN-MESSAGE_V2 LS_RETURN-MESSAGE_V3 LS_RETURN-MESSAGE_V4 DISPLAY LIKE LS_RETURN-TYPE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOC_BIN_FILE
*&---------------------------------------------------------------------*
*       Binary 파일 업로드
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOC_BIN_FILE .
  DATA: LS_RETURN   TYPE  MESSAGES,
        LS_API_CONTROL TYPE CVAPI_API_CONTROL,
        LT_FILES_X  TYPE STANDARD TABLE OF  CVAPI_DOC_FILE,
        LT_CONTENT  TYPE STANDARD TABLE OF  DRAO,
        LT_BINTAB   TYPE STANDARD TABLE OF  ORBLK.

  DATA(LT_FILES) = LCL_FILE_DIALOG=>FILE_OPEN( ).  "파일 선택
  IF LT_FILES[] IS INITIAL.
    EXIT.
  ENDIF.

  DATA LV_INDEX TYPE I.

  SELECT SINGLE
    MAX( LO_INDEX ) AS INDEX
  FROM DMS_DOC2LOIO
  WHERE DOKAR EQ @P_DOKAR
    AND DOKNR EQ @P_DOKNR
    AND DOKVR EQ @P_DOKVR
    AND DOKTL EQ @P_DOKTL
    AND LO_TYPE EQ '01'
  INTO @LV_INDEX.

  "문서에 첨부할 파일
  LOOP AT LT_FILES INTO DATA(LS_FILE).
    ADD 1 TO LV_INDEX.

    LT_FILES_X = VALUE #( ( APPNR = LV_INDEX
                            DAPPL = LS_FILE-DAPPL
                            FILENAME = LS_FILE-FILENAME
                            STORAGE_CAT = P_STORC ) ).

    LCL_FILE_DIALOG=>FILE_UPLOAD(
      exporting
        I_FILEPATH = CONV #( LS_FILE-FILEPATH )
      importing
        E_DATA_TAB = LT_BINTAB
        E_LENGTH   = DATA(LV_LENGTH)
    ).

    LT_CONTENT = VALUE #( FOR I = 1 THEN I + 1 WHILE I <= LINES( LT_BINTAB )
                          ( DOKAR = P_DOKAR
                            DOKNR = P_DOKNR
                            DOKVR = P_DOKVR
                            DOKTL = P_DOKTL
                            APPNR = 1
                            ZAEHL = I
                            ORLN  = LV_LENGTH
                            ORBKL = XSTRLEN( LT_BINTAB[ I ] )
                            ORBLK = LT_BINTAB[ I ] ) ).

    CALL FUNCTION 'CVAPI_DOC_CHECKIN'
      EXPORTING
        PF_DOKAR                 = P_DOKAR
        PF_DOKNR                 = P_DOKNR
        PF_DOKVR                 = P_DOKVR
        PF_DOKTL                 = P_DOKTL
*       PS_DOC_STATUS            =
*       PF_FTP_DEST              = ' '
*       PF_HTTP_DEST             = ' '
*       PF_HOSTNAME              = ' '
*       PS_API_CONTROL           = LS_API_CONTROL
*       PF_REPLACE               = ' '
        PF_CONTENT_PROVIDE       = 'TBL'
      IMPORTING
        PSX_MESSAGE              = LS_RETURN
      TABLES
        PT_FILES_X               = LT_FILES_X
*       PT_COMP_X                =
        PT_CONTENT               = LT_CONTENT
              .
    IF LS_RETURN-MSG_TYPE EQ 'E'.
      LV_INDEX = LV_INDEX - 1.

      MESSAGE ID LS_RETURN-MSG_ID TYPE LS_RETURN-MSG_TYPE NUMBER LS_RETURN-MSG_NO
      WITH LS_RETURN-MSG_V1 LS_RETURN-MSG_V2 LS_RETURN-MSG_V3 LS_RETURN-MSG_V4 INTO DATA(LV_MSG).

      WRITE:/ 'ERR', LV_MSG.
      WRITE:/5 LS_FILE-FILENAME.
    ELSE.
      WRITE:/ 'OK'.
      WRITE:/5 LS_FILE-FILENAME.
    ENDIF.
  ENDLOOP.

  IF LS_RETURN-MSG_ID IS NOT INITIAL.
    MESSAGE ID LS_RETURN-MSG_ID TYPE 'S' NUMBER LS_RETURN-MSG_NO
    WITH LS_RETURN-MSG_V1 LS_RETURN-MSG_V2 LS_RETURN-MSG_V3 LS_RETURN-MSG_V4 DISPLAY LIKE LS_RETURN-MSG_TYPE.
  ENDIF.
ENDFORM.
ABAP

 

 

참고. DMS Configuration

Document Management System | SAP Blogs

 

Document Management System | SAP Blogs

8 27 97,976 Hi, Hope this document on DMS (Document Management System) helps you with some insight on how to set up basic configuration to run business. More emphasis has been given to its usage in Production Planning & Process Industries, its incorporatio

blogs.sap.com

댓글