设为首页 收藏本站
查看: 1868|回复: 0

[经验分享] SAP FTP相关

[复制链接]

尚未签到

发表于 2015-9-21 10:38:28 | 显示全部楼层 |阅读模式
以下是SAP 标准FTP程序。
在使用标准 functions前,确保已经安装SAPFTP.EXE。请先使用程序:RSFTP005 进行SAPFTP 检查。

RSFTP001 - SAPFTP 版本检查
RSFTP002 - 执行 FTP 命令
RSFTP003 - 测试
RSFTP004 - FTP 复制
RSFTP005 - SAPFTP 检查
RSFTP006 - FTP 命令清单
RSFTP007 - TEST FB:FTP_SERVER_TO_R3 / FTP_R3_TO_SERVER 读取FTP数据到R3 / R3数据写入FTP。
RSFTP008 - TEST FB:FTP_CLIENT_TO_R3 / FTP_R3_TO_CLIENT 读取FTP数据到客户端 / 客户端数据写入FTP。

相关的 SAP function module: FTP*。
FTP_CONNECT 连接到FTP。
FTP_COMMAND 执行 FTP 命令。
FTP_DISCONNECT 断开FTP连接
FTP_R3_TO_SERVER 将内表数据写入FTP文件中。
FTP_SERVER_TO_R3 从FTP将文件读取到内表。

FTP程序大致流程为: FTP_CONNECT ,FTP_COMMAND ,FTP_DISCONNECT。
FTP_COMMAND 中输入标准的FTP命令。如:更改 FTP 目录 "cd dir", 更改本地目录 "lcd localdir",上传文件"put file"。
  具体程序实现如下:
  REPORT ZPM_IFSCADA MESSAGE-ID I4.


DATA:BEGIN OF SCADA OCCURS 0,
BDZ TYPE CHAR32,
DY TYPE CHAR8,
JG TYPE CHAR8,
JGMC TYPE CHAR64,
LNAME TYPE CHAR8,
VALUE TYPE CHAR30,
END OF SCADA.

DATA: BEGIN OF COMMANDS OCCURS 0,
CMD(100) TYPE C,
END OF COMMANDS.
DATA:HANDLE TYPE I.

DATA: BEGIN OF TAB OCCURS 100,
LINE(255),
END OF TAB.

DATA: BEGIN OF RESULT OCCURS 0,
LINE(200) TYPE C,
END OF RESULT.

DATA: W_80C(80) TYPE C,
W_PATH(80) TYPE C,
CNS_DIR(60) TYPE C .
DATA: COM(120) .
DATA: FTPFILE LIKE RLGRAP-FILENAME.

DATA:KEY TYPE I VALUE 26101957,
SLEN TYPE I.

DATA: ITABOUT(1200) TYPE C OCCURS 0 WITH HEADER LINE.
*FTP服务器设置
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
*服务器
PARAMETERS:P_HOST(16) TYPE C DEFAULT '192.168.1.10' LOWER CASEOBLIGATORY ,
*服务器文件路径
P_PATH LIKE RLGRAP-FILENAME LOWER CASE OBLIGATORY DEFAULT '/'."'/realdata/'.
SELECTION-SCREEN END OF BLOCK BLK1.
*FTP服务器登录用户信息
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.
PARAMETERS:P_USER(20) TYPE C LOWER CASE,
P_PASS(20) TYPE C LOWER CASE.
SELECTION-SCREEN END OF BLOCK BLK2.
*SAP服务器设置
SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME TITLE TEXT-003.
*SAP服务器文件路径(临时存放文件)
PARAMETERS:S_PATH LIKE RLGRAP-FILENAME LOWER CASE OBLIGATORY
DEFAULT '/usr/sap/trans/public/scada/'.
SELECTION-SCREEN END OF BLOCK BLK3.

AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_PASS'.
SCREEN-INVISIBLE = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

START-OF-SELECTION.

DEFINE UPLOAD_DATA_FROM_SAP.
CLEAR &2. REFRESH &2.
OPEN DATASET &1 FOR INPUT IN TEXT MODE ENCODING NON-UNICODE.

IF SY-SUBRC = 0.
DO.
READ DATASET &1 INTO &2.
IF SY-SUBRC <> 0.
EXIT.
ELSE.
APPEND &2.
CLEAR &2.
ENDIF.
ENDDO.
CLOSE DATASET &1.
ENDIF.
END-OF-DEFINITION.

PERFORM GET_FTP_FILE.
PERFORM FORMAT_DATA.
PERFORM WRITE_DATA.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*& Form GET_FTP_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_FTP_FILE.
*&CMD1
CLEAR:COMMANDS.
REFRESH COMMANDS.
COMMANDS-CMD = 'ascii'.
APPEND COMMANDS.

*&CMD2 &#20999;&#25442;&#26412;&#22320;&#24037;&#20316;&#30446;&#24405;
CONCATENATE 'lcd' S_PATH INTO W_80C SEPARATED BY ' '.
COMMANDS-CMD = W_80C.
APPEND COMMANDS.
CLEAR W_80C.

*&CMD3 &#20999;&#25442;FTP&#26381;&#21153;&#22120;&#24037;&#20316;&#30446;&#24405;
CONCATENATE 'cd' P_PATH INTO W_80C SEPARATED BY ' ' .
COMMANDS-CMD = W_80C.
APPEND COMMANDS.
CLEAR W_80C.

*&#33719;&#21462;&#36965;&#27979;&#25968;&#25454;
CONCATENATE 'get' 'zsmis_yc.txt' INTO W_80C SEPARATED BY ' ' .
COMMANDS-CMD = W_80C.
APPEND COMMANDS.
CLEAR W_80C.
*&#33719;&#21462;&#36965;&#20449;&#25968;&#25454;
CONCATENATE 'get' 'zsmis_yx.txt' INTO W_80C SEPARATED BY ' ' .
COMMANDS-CMD = W_80C.
APPEND COMMANDS.
CLEAR W_80C.


SET EXTENDED CHECK OFF.
SLEN = STRLEN( P_PASS ).

*&#23558;&#23494;&#30721;&#36716;&#25442;&#25104;SAP&#20869;&#37096;&#30721;
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
SOURCE = P_PASS
SOURCELEN = SLEN
KEY = KEY
IMPORTING
DESTINATION = P_PASS.

CALL FUNCTION 'FTP_CONNECT'
EXPORTING
USER = P_USER
PASSWORD = P_PASS
HOST = P_HOST
RFC_DESTINATION = 'SAPFTPA'
IMPORTING
HANDLE = HANDLE.
IF HANDLE EQ 0.
MESSAGE I651 WITH '&#36830;&#25509;FTP&#26381;&#21153;&#22120;&#22833;&#36133;!'.
STOP.
ENDIF.

LOOP AT COMMANDS.
IF COMMANDS-CMD NE ' '.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
HANDLE = HANDLE
COMMAND = COMMANDS-CMD
TABLES
DATA = RESULT
EXCEPTIONS
COMMAND_ERROR = 1
TCPIP_ERROR = 2.

REFRESH RESULT.
ENDIF.
ENDLOOP.


CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
HANDLE = HANDLE.

REFRESH TAB.
CLEAR:CNS_DIR.
CNS_DIR = S_PATH.
CONCATENATE 'dir' CNS_DIR INTO COM SEPARATED BY SPACE.
SET BLANK LINES ON.
CALL 'SYSTEM' ID 'COMMAND' FIELD COM
ID 'TAB' FIELD TAB-*sys*.

* READ TABLE TAB INDEX 1.
* IF SY-SUBRC = 0.
* FTPFILE = TAB-LINE.
FTPFILE = 'zsmis_yc.txt'.
CLEAR:ITABOUT,CNS_DIR.
REFRESH:ITABOUT.
CONCATENATE S_PATH FTPFILE INTO CNS_DIR.

UPLOAD_DATA_FROM_SAP CNS_DIR ITABOUT.
CLOSE DATASET CNS_DIR.
DELETE DATASET CNS_DIR.
* ENDIF.
ENDFORM. &quot;GET_FTP_FILE

*&---------------------------------------------------------------------*
*& Form FORMAT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FORMAT_DATA.
DATA: FM_NAME(1000) TYPE C.
CLEAR:SCADA.REFRESH:SCADA.
* LOOP AT ITABOUT INTO FM_NAME.
* SCADA-BDZ = FM_NAME+0(32).
* SCADA-DY = FM_NAME+33(8).
* SCADA-JG = FM_NAME+42(8).
* SCADA-JGMC = FM_NAME+51(64).
* SCADA-LNAME = FM_NAME+116(8).
* SCADA-VALUE = FM_NAME+125(30).
* APPEND SCADA.
* CLEAR SCADA.
* CLEAR FM_NAME.
* ENDLOOP.

LOOP AT ITABOUT INTO FM_NAME.
CONDENSE FM_NAME.
SPLIT FM_NAME AT SPACE INTO SCADA-BDZ SCADA-DY SCADA-JG SCADA-JGMC SCADA-LNAME SCADA-VALUE.
IF SY-SUBRC = 0.
SHIFT SCADA-DY BY 1 PLACES.
SHIFT SCADA-JG BY 1 PLACES.
SHIFT SCADA-JGMC BY 1 PLACES.
SHIFT SCADA-LNAME BY 1 PLACES.
SHIFT SCADA-VALUE BY 1 PLACES.
APPEND SCADA.
CLEAR SCADA.
ENDIF.
ENDLOOP.

ENDFORM. &quot;GET_FTP_FILE
*&---------------------------------------------------------------------*
*& Form WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM WRITE_DATA.
WRITE:/(32) '&#21517;&#31216;',(8) '&#31561;&#32423;',(8) '&#32534;&#21495;',(64) '&#38388;&#38548;&#21517;&#31216;',(8) '&#37327;&#21517;',(30) '&#37327;&#20540;' .
ULINE.
LOOP AT ITABOUT.
WRITE:/ ITABOUT.
ENDLOOP.
ULINE.
LOOP AT SCADA.
WRITE:/(32) SCADA-BDZ,(8) SCADA-DY,(8) SCADA-JG,(64) SCADA-JGMC,(8) SCADA-LNAME,(30) SCADA-VALUE.
ENDLOOP.
ENDFORM. &quot;WRITE_DATA
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-116650-1-1.html 上篇帖子: 开始接触SAP Basis体会 下篇帖子: 推荐学SAP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表