zoukankan      html  css  js  c++  java
  • SAP FTP相关

    以下是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.

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

    DATABEGIN OF TAB OCCURS 100,
    LINE(255),
    END OF TAB.

    DATABEGIN OF RESULT OCCURS 0,
    LINE(200TYPE C,
    END OF RESULT.

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

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

    DATA: ITABOUT(1200TYPE C OCCURS 0 WITH HEADER LINE.
    *FTP服务器设置
    SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
    *服务器
    PARAMETERS:P_HOST(16TYPE 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(20TYPE C LOWER CASE,
    P_PASS(20TYPE 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 &2REFRESH &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 切换本地工作目录
    CONCATENATE 'lcd' S_PATH INTO W_80C SEPARATED BY ' '.
    COMMANDS-CMD = W_80C.
    APPEND COMMANDS.
    CLEAR W_80C.

    *&CMD3 切换FTP服务器工作目录
    CONCATENATE 'cd' P_PATH INTO W_80C SEPARATED BY ' ' .
    COMMANDS-CMD = W_80C.
    APPEND COMMANDS.
    CLEAR W_80C.

    *获取遥测数据
    CONCATENATE 'get' 'zsmis_yc.txt' INTO W_80C SEPARATED BY ' ' .
    COMMANDS-CMD = W_80C.
    APPEND COMMANDS.
    CLEAR W_80C.
    *获取遥信数据
    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 ).

    *将密码转换成SAP内部码
    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 '连接FTP服务器失败!'.
    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"GET_FTP_FILE

    *&---------------------------------------------------------------------*
    *& Form FORMAT_DATA
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    FORM FORMAT_DATA.
    DATA: FM_NAME(1000TYPE 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"GET_FTP_FILE
    *&---------------------------------------------------------------------*
    *& Form WRITE_DATA
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    FORM WRITE_DATA.
    WRITE:/(32'名称',(8'等级',(8'编号',(64'间隔名称',(8'量名',(30'量值' .
    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"WRITE_DATA


  • 相关阅读:
    TC2.0库函数大全
    【转帖】2004年度电影作品盘点之好莱坞篇
    C++文件流读写txt文件
    Linux 使用技巧
    最长字符串匹配算法(KMP算法)
    回调函数
    C#中对XML文件的一些基本操作[转载]
    指针与引用的区别
    中文核心期刊目录
    十大最考验演技的角色
  • 原文地址:https://www.cnblogs.com/cnlmjer/p/4099779.html
Copyright © 2011-2022 走看看