글..
원래 글을 많이 안 쓰고 사진이나 예제를 통해서 하는데 이번에는 어쩔 수 없이 많이 썼어요...
SAP OLE란
OLE( Object Linking and Embedding )를 사용해서 응용 프로그램을 추가로 열지 않고 보고서 내에서 그래픽과 기타 개체를 편집하는 방법
사용하는 이유?
# 엑셀을 사용하지 않는 회사가 없고, 사용자가 엑셀로 다운로드하고 분석을 할 수 있기 때문에 SAP 데이터를 엑셀로 보고 싶을 때 사용한다.
SAP -> Excel
결국 Excel 매크로를 사용하는 것이기 때문에 Excel 매크로에 대해서 잘 알면 이해하기 쉽다.
ALV -> EXCEL 옮기는 작업이라고 보면 된다.
OLE을 통해서 데이터를 넣는 2가지 방법이 있다.
1. 하나하나 데이터 옮기기
2. 복사/붙여놓기로 옮기기
3. Excel or Word에서 사용되는 Macro 사용하기( 추가 예정 )
여기서 하려고 하는 것은 1, 2번이다.
많은 데이터를 다운로드할 경우에는 많은 시간이 걸리는데 복사/붙여놓기를 사용하면 시간이 상당히 많이 줄어든다.
템플릿에 따라서 달라지겠지만 참고용으로 보면 좋을 것 같다.
# 시나리오는 SFLIGHT Table 사용해서 EXCEL 저장하는 것까지 하려고 한다.
# 전체적인 틀 잡기
1. Excel OLE 활성화
2. Excel에 Table 정보 입력하기
3. 클립보드에 복사/붙여놓기 하기 or 해당하는 Cell Value 값 넣기
4. 추가적인 기능
5. OLE 기능 사용하는 방법
또한 CELL에 대한 글꼴, 색상, 배경, 테두리, 크기 등등 설정할 수 있다.
설정을 하는 방식은 크게 3가지로 나눠진다.
# 예를 들어 폰트에 대한 설정을 변경하고 싶을 때)
1. Cell 선택
2. 변경하고 싶은 "폰트"를 지정한다.
3. 크기, 글꼴, 색상을 설정하고 변경해 준다.
예제를 보면서 천천히 이해해 보자.
# 여기서 사용되는 모든 TYPE은 OLE2_OBJECT이다.
참고자료.
# 1. Excel OLE 활성화
1. OLE 객체와 Workbook 생성을 해보자.
# 쉽게 생각하면 ALV 만들 때 생각해보면 OBJECT을 생성하고 CALL METHOD 하는 것 처럼 비슷한 흐름이고 단계라고 생각하면 이해가 잘 된다.
# 또한 'EXCEL.APPLICATION' or 'WORKBOOKS' 이러한 변수?들은 마음대로 지정해주는 것이 아닌 Excel 매크로이기 때문에 마음대로 변경해서는 안된다.
이해가 안된다면 맨 밑에 있는 OLE 기능 사용하는 방법부터 읽어보자.
# 만약 기본 템플릿이 있다고 가정 하에 로직을 짜보면 다음과 같이 변경하면 된다.( 상황에 따라서 경로를 Parameter 값에 받으면 된다 ).
Workbook은 빨간 상자 부분이라고 보면 된다.
DATA:
LV_APPLICATION TYPE OLE2_OBJECT,
LV_WORKBOOK TYPE OLE2_OBJECT.
CREATE OBJECT LV_APPLICATION 'EXCEL.APPLICATION'.
CALL METHOD OF LV_APPLICATION 'WORKBOOKS' = LV_WORKBOOK.
CALL METHOD OF LV_WORKBOOK 'ADD' = LV_WORKBOOK.
" 0 or 1 Excel을 화면에 띄울 것인지 안 띄울 것인지 정한다."
SET PROPERTY OF LV_APPLICATION 'VISIBLE' = 1.
2. WorkSeet( 워크시트 )를 활성화시켜 보자.
다음과 같이 워크시트 활성화와 이름이 변경된 것을 볼 수가 있다.
GET PROPERTY OF LV_APPLICATION 'ACTIVESHEET' = LV_WORKBOOK.
SET PROPERTY OF LV_WORKBOOK 'Name' = 'SFLIGHT'.
# 2. Excel에 Table 정보 입력하기
1. Excel Header Title 생성과 Internal Table 타입 -> CHAR 타입으로 변경하기.
# 변경하는 이유는 클립보드에 복사/붙여놓기를 사용하려면 CHAR 타입으로 변경해야지만 사용 가능하다.
# DELI은 #을 통해서 Excel Cell을 구별할 수 있다.
GT_EXCEL 디버깅을 보면 # 값이 들어간 걸 볼 수 있다.
GT_EXCEL TYPE
TYPES : BEGIN OF TY_S_EXCEL,
MANDT TYPE S_MANDT,
CARRID TYPE S_CARR_ID,
CARRNAME TYPE S_CARRNAME,
CONNID TYPE S_CONN_ID,
FLDATE TYPE S_DATE,
PRICE TYPE S_PRICE,
CURRENCY TYPE S_CURRCODE,
PLANETYPE TYPE S_PLANETYE,
SEATSMAX TYPE S_SEATSMAX,
SEATSOCC TYPE S_SEATSOCC,
PAYMENTSUM TYPE S_Sum,
SEATSMAX_B TYPE S_SMAX_B,
SEATSOCC_B TYPE S_SOCC_B,
SEATSMAX_F TYPE S_SMAX_F,
SEATSOCC_F TYPE S_SOCC_F,
END OF TY_S_EXCEL.
DATA:GT_LIST01 TYPE TABLE OF TY_S_EXCEL.
TYPES: t_C(1500) TYPE C,
T_DATA TYPE TABLE OF T_C.
DATA:GT_EXCEL TYPE T_DATA,
GS_EXCEL TYPE LINE OF T_DATA,
DELI TYPE C.
DELI = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
LOOP AT GT_LIST01 INTO DATA(LS_LIST).
" Header Title 생성 "
AT FIRST.
GS_EXCEL = |항공사 코드 { DELI } 항공편 연결 번호 { DELI } 항공편 일자 { DELI } 항공 요금 { DELI } 항공사의 현지통화 { DELI } 항공기 유형 {
DELI } 일반석의 최대 정원 { DELI } 일반석으로 예약된 좌석 { DELI } 현재 예약 총계 { DELI } 비즈니스석의 최대 정원 { DELI } 비즈니스석 점유 좌석 {
DELI } 일등석의 최대 정원 { DELI } 일등석의 점유 좌석 |.
APPEND GS_EXCEL TO GT_EXCEL.
CLEAR
GS_EXCEL.
ENDAT.
" Internal Table -> CHAR TYPE "
GS_EXCEL = |{ LS_LIST-CARRID } { DELI } { LS_LIST-CONNID } { DELI } { LS_LIST-FLDATE } {
DELI } { LS_LIST-PRICE } { DELI } { LS_LIST-CURRENCY } { DELI } { LS_LIST-PLANETYPE } {
DELI } { LS_LIST-SEATSMAX } { DELI } { LS_LIST-SEATSOCC } { DELI } { LS_LIST-PAYMENTSUM } {
DELI } { LS_LIST-SEATSMAX_B } { DELI } { LS_LIST-SEATSOCC_B } { DELI } { LS_LIST-SEATSMAX_F } {
DELI } { LS_LIST-SEATSOCC_F } |.
APPEND GS_EXCEL TO GT_EXCEL.
CLEAR
GS_EXCEL.
ENDLOOP.
# 3. 해당하는 Cell의 Value 값 넣기
# 예시로 A = 1 위치에 "GAMJA" 값을 넣어보겠다.
1. 해당하는 Cell을 선택한다.
2. Value 값 넣기
결과화면
이 방법을 통해 LOOP문 안에 넣고 반복문을 돌면서 값을 하나하나 넣을 수 있게 된다.
# 3. 클립보드에 복사/붙여놓기 하기
1. 우리는 클립보드를 통해서 데이터를 옮겨보자. ( GT_EXCEL -> 클립보드 )
# 클립보드를 통해서 하면 더욱 코드가 간결해진다.
복사
DATA: LV_RC TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
EXPORTING
NO_AUTH_CHECK = SPACE " Switch off Check for Access Rights "
IMPORTING
DATA = GT_EXCEL " Data "
CHANGING
RC = LV_RC " Return Code "
EXCEPTIONS
CNTL_ERROR = 1 " Control error "
ERROR_NO_GUI = 2 " No GUI available "
NOT_SUPPORTED_BY_GUI = 3 " GUI does not support this "
NO_AUTHORITY = 4 " Authorization check failed "
OTHERS = 5.
2. 해당하는 Cell에 커서를 찍어보자.
# 예시로 Excel 2B 위치를 찍어보겠다.
1. 해당하는 Cell을 선택한다.
2. SELECT을 통해서 커서를 찍는다.
2-1. 만약 값의 자릿수가 넘어가면 Excel처럼 보이게 된다. 특정 열의 너비를 변경해 보자.
1. 해당하는 Cell을 선택한다.
2. Columnwidth을 통해서 너비를 변경한다.
3. Excel에 붙여놓기를 해보자.
DATA:
W_CELL1 TYPE OLE2_OBJECT.
" Cell 선택 "
CALL METHOD OF LV_WORKBOOK 'CELLS' = W_CELL1
EXPORTING
#1 = 2 "Row
#2 = 2. "Column
CALL METHOD OF W_CELL1 'SELECT'.
CALL METHOD OF LV_WORKBOOK 'PASTE'.
이런 식으로 해당하는 Cell 위치에 맞게 값을 설정할 수 있다. 위에서 말했듯이 엑셀 템플릿마다 다른기 때문에 템플릿에 맞춰서 값을 설정하고 기능을 추가해 주면 되는 것이다.
# 4. 부가적인 기능 추가하기( 5가지만 예를 들겠다 )
# 저장 or 나가기
# PA_FILE은 해당 경로를 설정해 주면 된다.
# File Format을 지정해주는 1이다.
# 모든 테두리 그리기
해당 데이터에 맞게 테두리를 추가 또는 라인 추가 하려면 CELL에 대한 하나하나씩 테두리를 그려야 한다.
로직
DATA:
BORDERS TYPE OLE2_OBJECT,
RANGE TYPE OLE2_OBJECT.
" ROW값에 따라서 변경하면 된다. "
DATA(I) = 1.
LOOP AT GT_EXCEL INTO GS_EXCEL.
I = I + 1.
DATA(FIRST) = |B{ I }|. " 컬럼 시작하는 부분 "
DATA(SECOND) = |N{ I }|. " 컬럼 끝나는 부분 "
CALL METHOD OF LV_WORKBOOK 'Range' = RANGE
EXPORTING
#1 = FIRST
#2 = SECOND.
" 왼쪽 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 7. "7 for left side
SET PROPERTY OF BORDERS 'LineStyle'= 1. " 라인 타입 "
" 오른쪽 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 8.
SET PROPERTY OF BORDERS 'LineStyle'= 1.
" 위쪽 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 9.
SET PROPERTY OF BORDERS 'LineStyle'= 1.
" 아래쪽 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 10.
SET PROPERTY OF BORDERS 'LineStyle'= 1.
" 가운데 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 11.
SET PROPERTY OF BORDERS 'LineStyle'= 1.
ENDLOOP.
# 셀의 크기 변경하기
1. 변경할 Cell을 선택한다.
2."폰트"를 지정한 후 변경을 해주어야 한다.
3. 해당하는 폰트 사이즈를 변경해 준다.
# 변경하고 싶은 Cell을 동적으로 선택한 후 변경 해주면 된다.
결과 화면
로직
" Header 갯수만큼 DO문 돌린다. "
DO 14 TIMES.
" Cell 선택 "
CALL METHOD OF LV_WORKBOOK 'CELLS' = W_CELL1
EXPORTING
#1 = 2 "Row
#2 = SY-INDEX.
GET PROPERTY OF W_CELL1 'Font' = W_FONT.
SET PROPERTY OF W_FONT 'SIZE' = 14.
ENDDO.
Columns 자동맞춤 설정( AutoFit )
다음과 같이
1. Paste에 따른 데이터 컬럼을 잡는다.
2. Columns을 설정
2. AutoFit을 통해서 자동맞춤을 설정한다.
로직
" Columns 자동맞춤 설정 "
CALL METHOD OF LV_WORKBOOK 'Columns' = W_COLUMNS.
CALL METHOD OF W_COLUMNS 'AutoFit' NO FLUSH.
특정 Columns 자동맞춤 설정( AutoFit ) -- 추가 --
1. 시작하는 Column 위치 설정
2. 끝나는 Column 위치 설정
3. 시작하는 위치와 끝나는 위치에 대한 Column 범위 설정
4. Column 병합
DATA: H_ENTIRECOL TYPE OLE2_OBJECT.
" autofit "
CALL METHOD OF
LV_WORKBOOK
'Columns' = W_COLUMNS
EXPORTING
#1 = 'B:C'.
GET PROPERTY OF W_COLUMNS 'EntireColumn' = H_ENTIRECOL.
SET PROPERTY OF H_ENTIRECOL 'Autofit' = 1.
Cell(셀) 병합 설정
1. 시작하는 Cell 위치 설정
2. 끝나는 Cell 위치 설정
3. 시작하는 위치와 끝나는 위치에 대한 Cell 범위 설정
4. Cell 병합
DATA
RANGE TYPE OLE2_OBJECT.
CALL METHOD OF LV_WORKBOOK 'CELLS' = W_CELL1
EXPORTING
#1 = 1 "Row
#2 = 1. "Column
CALL METHOD OF LV_WORKBOOK 'CELLS' = W_CELL2
EXPORTING
#1 = 2 "Row
#2 = 1. "Column
" Cell 범위설정 "
CALL METHOD OF LV_WORKBOOK 'Range' = RANGE
EXPORTING
#1 = W_CELL1
#2 = W_CELL2.
" Cell 병합 "
CALL METHOD OF RANGE 'Merge' .
이런 식으로 설정하면 되는 것이다.
중요한 것
5. OLE 기능 사용하는 방법
# Excel Macro(스크립트)을 통해서 실행이 되는 건 이해가 됐다고 생각하고 넘어가겠다.
# Excel에 대한 기능들은 엄청 많아서 그것에 대해서 정리를 하진 못 할 것이다. 그러므로 우리가 어느 기능을 사용하고 싶을 때 어떻게 사용해야 하는지 방법을 알아야 한다.
1. 예를 들어보면 Excel 기능 중에 가운데 맞춤이라는 기능을 OLE을 통해서 만들고 싶다 하면 우선 Excel Macro(스크립트)을 봐야 한다.
# TEST 텍스트를 가운데 맞춤 하려고 한다.
2. 상단에 [자동화] -> [작업 리코딩]을 클릭하자.
3. 녹음/녹화를 클릭한 후 TEST 선택 -> 가운데 맞춤을 눌러보자. 그다음 중지를 눌러보면 다음과 같은 화면이 나올 것이다.
4. 녹화가 되어서 해당 리코딩의 코드 편집기를 보게 되면 다음과 같이 스크립트가 따져있는 걸 볼 수 있다.
5. setHoriz... 커서를 올리면 다음과 같이 Quick Info (빨간 상자)를 보시면 HorizontalAlignmnet 메서드를 사용했다는 것을 볼 수 있다. 이것을 통해서 ABAP에서 기능을 사용하면 되는 것이다.
6. 가운데 맞춤을 사용하고 싶은 Cell을 선택한 후, 값을 설정해 주면 끝이 난다.
참고
Columns인지 Cell인지 확인을 하고 값을 넣어줘야 덤프가 안 뜬다.
Excel 스크립트에서는 Center 되어있지만 ABAP에서는 3으로 되어있는 점,
이런 식으로 Excel에서는 True or False , ABAP에서는 1,2 이런 식으로 되어있을 수 있으니 참고해야 한다.
이런 식으로 내가 사용하고 싶은 기능을 OLE 짜고 싶을 때에는 Excel 스크립트를 보면서 로직을 짜면 되는 것이다.
# 기능 넣어보면서 테스트하면서 하면 금방 이해 갈 것이다.
도움이 되셨으면 하단에 있는 광고 한번씩 눌러주세유!!
전체로직( ALV 화면은 없지만 Excel 화면까지 볼 수 있다 )
DATA:
GT_LIST01 TYPE TABLE OF SFLIGHT.
SELECT *
FROM SFLIGHT
INTO CORRESPONDING FIELDS OF TABLE GT_LIST01
UP TO 50 ROWS.
TYPES: t_C(1500) TYPE C,
T_DATA TYPE TABLE OF T_C.
DATA:GT_EXCEL TYPE T_DATA,
GS_EXCEL TYPE LINE OF T_DATA,
DELI TYPE C.
DATA:
LV_APPLICATION TYPE OLE2_OBJECT,
LV_WORKBOOK TYPE OLE2_OBJECT,
LV_RC TYPE I,
W_CELL1 TYPE OLE2_OBJECT,
W_CELL2 TYPE OLE2_OBJECT,
BORDERS TYPE OLE2_OBJECT,
RANGE TYPE OLE2_OBJECT,
W_FONT TYPE OLE2_OBJECT,
W_COLUMNS TYPE OLE2_OBJECT.
CREATE OBJECT LV_APPLICATION 'EXCEL.APPLICATION'.
CALL METHOD OF LV_APPLICATION 'WORKBOOKS' = LV_WORKBOOK.
CALL METHOD OF LV_WORKBOOK 'ADD' = LV_WORKBOOK.
" 0 or 1 Excel을 화면에 띄울 것인지 안 띄울 것인지 정한다. "
SET PROPERTY OF LV_APPLICATION 'VISIBLE' = 1.
GET PROPERTY OF LV_APPLICATION 'ACTIVESHEET' = LV_WORKBOOK.
SET PROPERTY OF LV_WORKBOOK 'Name' = 'SFLIGHT'.
DELI = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
LOOP AT GT_LIST01 INTO DATA(LS_LIST).
" Header Title 생성 "
AT FIRST.
GS_EXCEL = |항공사 코드 { DELI } 항공편 연결 번호 { DELI } 항공편 일자 { DELI } 항공 요금 { DELI } 항공사의 현지통화 { DELI } 항공기 유형 {
DELI } 일반석의 최대 정원 { DELI } 일반석으로 예약된 좌석 { DELI } 현재 예약 총계 { DELI } 비즈니스석의 최대 정원 { DELI } 비즈니스석 점유 좌석 {
DELI } 일등석의 최대 정원 { DELI } 일등석의 점유 좌석 |.
APPEND GS_EXCEL TO GT_EXCEL.
CLEAR
GS_EXCEL.
ENDAT.
" Internal Table -> CHAR TYPE "
GS_EXCEL = |{ LS_LIST-CARRID } { DELI } { LS_LIST-CONNID } { DELI } { LS_LIST-FLDATE } {
DELI } { LS_LIST-PRICE } { DELI } { LS_LIST-CURRENCY } { DELI } { LS_LIST-PLANETYPE } {
DELI } { LS_LIST-SEATSMAX } { DELI } { LS_LIST-SEATSOCC } { DELI } { LS_LIST-PAYMENTSUM } {
DELI } { LS_LIST-SEATSMAX_B } { DELI } { LS_LIST-SEATSOCC_B } { DELI } { LS_LIST-SEATSMAX_F } {
DELI } { LS_LIST-SEATSOCC_F } |.
APPEND GS_EXCEL TO GT_EXCEL.
CLEAR
GS_EXCEL.
ENDLOOP.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
EXPORTING
NO_AUTH_CHECK = SPACE " Switch off Check for Access Rights "
IMPORTING
DATA = GT_EXCEL " Data "
CHANGING
RC = LV_RC " Return Code "
EXCEPTIONS
CNTL_ERROR = 1 " Control error "
ERROR_NO_GUI = 2 " No GUI available "
NOT_SUPPORTED_BY_GUI = 3 " GUI does not support this "
NO_AUTHORITY = 4 " Authorization check failed "
OTHERS = 5.
" Cell 선택 "
CALL METHOD OF LV_WORKBOOK 'CELLS' = W_CELL1
EXPORTING
#1 = 2 "Row
#2 = 2. "Column
CALL METHOD OF W_CELL1 'SELECT'.
CALL METHOD OF LV_WORKBOOK 'PASTE'.
* CALL METHOD OF LV_WORKBOOK 'CELLS' = W_CELL1
* EXPORTING
* #1 = 1 "Row
* #2 = 1. "Column
*
*
* CALL METHOD OF LV_WORKBOOK 'CELLS' = W_CELL2
* EXPORTING
* #1 = 2 "Row
* #2 = 1. "Column
*
* " Cell 범위설정 "
* CALL METHOD OF LV_WORKBOOK 'Range' = RANGE
* EXPORTING
* #1 = W_CELL1
* #2 = W_CELL2.
*
* " Cell 병합 "
* CALL METHOD OF RANGE 'Merge' .
" ROW값에 따라서 변경하면 된다. "
DATA(I) = 1.
LOOP AT GT_EXCEL INTO GS_EXCEL.
I = I + 1.
DATA(FIRST) = |B{ I }|. " 컬럼 시작하는 부분 "
DATA(SECOND) = |N{ I }|. " 컬럼 끝나는 부분 "
CALL METHOD OF LV_WORKBOOK 'Range' = RANGE
EXPORTING
#1 = FIRST
#2 = SECOND.
" 왼쪽 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 7. "7 for left side
SET PROPERTY OF BORDERS 'LineStyle'= 1. "type of line.
" 오른쪽 테두리
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 8.
SET PROPERTY OF BORDERS 'LineStyle'= 1.
" 위쪽 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 9.
SET PROPERTY OF BORDERS 'LineStyle'= 1.
" 아래쪽 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 10.
SET PROPERTY OF BORDERS 'LineStyle'= 1.
" 가운데 테두리 "
CALL METHOD OF RANGE 'Borders' = BORDERS NO FLUSH
EXPORTING #1 = 11.
SET PROPERTY OF BORDERS 'LineStyle'= 1.
ENDLOOP.
" Header 갯수만큼 DO문 돌린다. "
DO 14 TIMES.
" Cell 선택 "
CALL METHOD OF LV_WORKBOOK 'CELLS' = W_CELL1
EXPORTING
#1 = 2 "Row
#2 = SY-INDEX.
SET PROPERTY OF W_CELL1 'HorizontalAlignment' = 3.
GET PROPERTY OF W_CELL1 'Font' = W_FONT.
SET PROPERTY OF W_FONT 'SIZE' = 14.
" Columns 자동맞춤 설정 "
CALL METHOD OF LV_WORKBOOK 'Columns' = W_COLUMNS.
CALL METHOD OF W_COLUMNS 'AutoFit' NO FLUSH.
FREE OBJECT W_CELL1.
FREE OBJECT W_FONT.
ENDDO.
또한 엑셀로 받아온 값을 메일로 보낼 수 있기 때문에 메일에 대해서 궁금하다면
2023.04.14 - [.SAP/..ABAP] - SAP E-Mail(메일) 발송 , 첨부파일( EXCEL, PDF )
파일 경로 or 파일 선택 하는 방법에 대해서 알고싶으면
2023.07.10 - [분류 전체보기] - SAP 파일 선택 or 파일 경로 알아보기
참고문헌.
'.ABAP > ..Excel, EMail' 카테고리의 다른 글
SAP AbapGit 설치 (1) | 2024.09.03 |
---|---|
SAP Excel Upload( Web GUI ) 정리 (4) | 2024.08.13 |
SAP Excel Upload 정리 (2) | 2023.07.25 |
SAP Web Repository( 웹 저장소 ) 정리( 로직, 저장, 덮어쓰기 ) (0) | 2023.04.23 |
SAP E-Mail(이메일) 발송 (0) | 2023.04.14 |