반응형
SAP에서는 직접적으로 SFTP 연결이 안된다고 알고 있습니다. (아니면 댓글 달아주세요.)
그래서 SAP 서버에 shell파일을 만들어놓고 실행하는 방법으로 우회할 수 있습니다.
1. Shell 파일 생성 후 SAP서버에 업로드
#!/bin/bash
USER="id"
PASS="password"
TARGET="ip"
PORT="port"
DIR_SOURCE="/local/directory"
DIR_TARGET="/remote"
## If filename is exist, then execute sftp.
if [ -n "$1" ];
then
FILE="$1"
expect << EOF
spawn sftp -oPort=${PORT} ${USER}@${TARGET}
expect "password:" { send "${PASS}\r"}
expect "sftp>" { send "lcd ${DIR_SOURCE}\r"}
expect "sftp>" { send "cd ${DIR_TARGET}\r"}
expect "sftp>" { send "put ${FILE}\r"}
expect "sftp>" { send "bye\r"}
expect eof
EOF
else
echo "Please give me the filenames."
fi
2. 위 파일을 업로드한 경로를 SM69에서 설정

3. ABAP 소스 작성
REPORT YEDIT.
DATA: LV_FILE(255), " 보낼 FILE
LV_FILEN(255), " 보낼 FILE 이름 (확장자포함)
LV_LODIR(255) TYPE C, " 보낼 FILE 저장 DIRECTORY
LV_FPATH(255). " PATH + FILE 이름
" 파일명
CONCATENATE 'TESTFILE_' SY-DATUM '_' SY-UZEIT INTO LV_FILE.
"파일저장 경로
CONCATENATE '/sapmnt/' SY-SYSID '/ftp/' INTO LV_LODIR.
CONDENSE LV_LODIR NO-GAPS.
"파일명.TXT
CONCATENATE LV_FILE '.txt' INTO LV_FILEN.
"보낼 FILE 경로 + 이름
CONCATENATE LV_LODIR LV_FILEN INTO LV_FPATH.
"파일 생성
OPEN DATASET LV_FPATH IN TEXT MODE FOR OUTPUT ENCODING DEFAULT.
SELECT * INTO TABLE @DATA(ITAB)
FROM T001.
" 파일 쓰기
LOOP AT ITAB ASSIGNING FIELD-SYMBOL(<FS>).
TRANSFER <FS> TO LV_FPATH.
ENDLOOP.
" 파일생성 종료
CLOSE DATASET LV_FPATH.
" SFTP 전송
DATA : LV_CMAND LIKE SXPGCOLIST-NAME,
LV_PARAM TYPE BTCXPGPAR,
LT_CONTENT TYPE TABLE OF BTCXPM WITH HEADER LINE.
LV_CMAND = 'ZSFTPTEST'. " SM69에서 설정한 이름
LV_PARAM = LV_FILEN. " 파일명
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
COMMANDNAME = LV_CMAND
ADDITIONAL_PARAMETERS = LV_PARAM
TABLES
EXEC_PROTOCOL = LT_CONTENT.
위 설정은 매번 파일명만 바뀐다는 가정하에 작성된 것이다. 만일 디렉토리까지 변경이 되면 다음과 같이 하면 된다.
우선 shell에서 DIR_SOURCE를 변수로 선언하지 말고 파라미터 1에 할당
DIR_SOURCE = "$1"
#!/bin/bash
USER="id"
PASS="password"
TARGET="ip"
PORT="port"
DIR_TARGET="/remote"
DIR_SOURCE = "$1"
FILE="$2"
## If filename is exist, then execute sftp.
if [ -n "$2" ];
then
expect << EOF
spawn sftp -oPort=${PORT} ${USER}@${TARGET}
expect "password:" { send "${PASS}\r"}
expect "sftp>" { send "lcd ${DIR_SOURCE}\r"}
expect "sftp>" { send "cd ${DIR_TARGET}\r"}
expect "sftp>" { send "put ${FILE}\r"}
expect "sftp>" { send "bye\r"}
expect eof
EOF
else
echo "Please give me the filenames."
fi
Parameter에 SPACE로 $1, $2을 구분해서 넣어준다.
LV_CMAND = 'ZSFTPTEST'. " SM69에서 설정한 이름
" LV_LODIR: 디렉토리 LV_FILEN: 파일
CONCATENATE LV_LODIR LV_FILEN INTO LV_PARAM SEPARATED BY SPACE.
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
COMMANDNAME = LV_CMAND
ADDITIONAL_PARAMETERS = LV_PARAM
TABLES
EXEC_PROTOCOL = LT_CONTENT.
반응형
'IT WORK > SAP FI and ABAP' 카테고리의 다른 글
[SAP FI] 환율차이에 대한 계정결정 (1) | 2024.12.03 |
---|---|
[FI-PS] PS 프로젝트 투자 건설중자산 고정자산 클래스 지정 (0) | 2024.11.29 |
[SAP FI] 고정자산 전기 유효성 확인 안 되는 이유 (0) | 2024.05.27 |
[FI/ABAP] 고정자산 감가상각 영역 네거티브 값 허용 BDC (0) | 2024.05.22 |
[공통] 프로그램별 SAP 공식 문서 조회 (0) | 2024.04.23 |