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
'ABAP > 개발Tip' 카테고리의 다른 글
[개발Tip] WebGUI에서 Excel 업로드(CL_FDT_XL_SPREADSHEET/ABAP2XLSX) (1) | 2023.12.07 |
---|---|
[개발Tip] WebGUI에서 Excel 템플릿의 셀 값 변경 (CL_FDT_XL_SPREADSHEET/ABAP2XLSX) (1) | 2023.12.07 |
[개발Tip] ALV 레이아웃 필드(LVC_S_LAYO) 설명 (0) | 2023.11.17 |
[개발Tip] SYST 필드(SY-) 설명 (0) | 2023.10.30 |
[개발Tip] SY-REPID 와 SY-CPROG 차이 (0) | 2023.10.30 |
댓글