Versuch es einmal damit (habe ich mal im Dezember 2005 geschrieben und ist immer noch im Einsatz):
Beispiel:
Code:
SCRFTP RMTSYS(&SERVER) USER(&USER) PASSWORD(&PWD) +
SCRIPT(&FTPPFAD ('del ' *CAT &TMPNAME) +
'namefmt 1' 'sendepsv 0' ('lcd ' *CAT +
&LCLPFAD) ('put ' *CAT &TMPNAME) ('ren ' +
*CAT &TMPNAME *BCAT &ORGNAME)) +
LOG(*OUTFILE) OUTFILE(USMOD_16/XHYDRA1) +
COMPARE('226 Transfer complete.')
MONMSG MSGID(CPF0000) EXEC(CHGVAR VAR(&ERR) +
VALUE('1'))
Kommando SCRFTP
Code:
CMD PROMPT('Srcipting FTP')
PARM KWD(RMTSYS) TYPE(*CHAR) LEN(256) +
SPCVAL((*INTNETADR *INTNETADR)) MIN(1) +
EXPR(*YES) VARY(*YES *INT2) +
PROMPT('Fernes System')
PARM KWD(USER) TYPE(*CHAR) LEN(30) MIN(1) +
EXPR(*YES) VARY(*YES *INT2) +
PROMPT('Benutzer')
PARM KWD(PASSWORD) TYPE(*CHAR) LEN(30) MIN(1) +
EXPR(*YES) VARY(*YES *INT2) +
DSPINPUT(*PROMPT) PROMPT('Kennwort')
PARM KWD(SCRIPT) TYPE(*CHAR) LEN(80) MIN(1) +
MAX(100) EXPR(*YES) INLPMTLEN(32) +
PROMPT('Auszufhrende FTP-Befehle')
PARM KWD(LOG) TYPE(*CHAR) LEN(10) RSTD(*YES) +
DFT(*PRINT) VALUES(*PRINT *OUTFILE) +
EXPR(*YES) PROMPT('Protokoll')
PARM KWD(OUTFILE) TYPE(FILE) DFT(*NONE) +
SNGVAL((*NONE)) PROMPT('Protokolldatei')
PARM KWD(COMPARE) TYPE(*CHAR) LEN(80) DFT(*NONE) +
SPCVAL((*NONE)) EXPR(*YES) VARY(*YES +
*INT2) PROMPT('Vergleichszeichenfolge')
PARM KWD(INTNETADR) TYPE(*CHAR) LEN(16) VARY(*YES +
*INT2) PMTCTL(*PMTRQS) +
PROMPT('Internet-Adresse')
PARM KWD(CCSID) TYPE(*DEC) LEN(5 0) DFT(*DFT) +
RANGE(1 65533) SPCVAL((*DFT 0)) +
PMTCTL(*PMTRQS) PROMPT(CCSID)
PARM KWD(PORT) TYPE(*DEC) LEN(5 0) DFT(*DFT) +
RANGE(1 65535) SPCVAL((*DFT 21) (*SECURE +
990)) PMTCTL(*PMTRQS) PROMPT('Port')
PARM KWD(SECCNN) TYPE(*CHAR) LEN(10) RSTD(*YES) +
DFT(*DFT) SPCVAL((*DFT) (*NONE) (*SSL) +
(*IMPLICIT)) PMTCTL(*PMTRQS) +
PROMPT('Sichere Verbindung')
PARM KWD(DTAPROT) TYPE(*CHAR) LEN(10) RSTD(*YES) +
DFT(*DFT) SPCVAL((*DFT) (*CLEAR) +
(*PRIVATE)) PMTCTL(*PMTRQS) +
PROMPT('Datenschutz')
FILE: QUAL TYPE(*NAME) LEN(10)
QUAL TYPE(*NAME) LEN(10) PROMPT('Bibliothek')
CLP für SCRFTP
Code:
PGM PARM(&RMTSYS &USER &PASSWORD &SCRIPT &LOG +
&OUTFILE &COMPARE &INTNETADR &CCSID &PORT +
&SECCNN &DTAPROT)
DCL VAR(&RMTSYS) TYPE(*CHAR) LEN(258)
DCL VAR(&USER) TYPE(*CHAR) LEN(32)
DCL VAR(&PASSWORD) TYPE(*CHAR) LEN(32)
DCL VAR(&SCRIPT) TYPE(*CHAR) LEN(2000)
DCL VAR(&LOG) TYPE(*CHAR) LEN(10)
DCL VAR(&OUTFILE) TYPE(*CHAR) LEN(20)
DCL VAR(&COMPARE) TYPE(*CHAR) LEN(82)
DCL VAR(&INTNETADR) TYPE(*CHAR) LEN(16)
DCL VAR(&CCSID) TYPE(*DEC) LEN(5)
DCL VAR(&PORT) TYPE(*DEC) LEN(5)
DCL VAR(&SECCNN) TYPE(*CHAR) LEN(10)
DCL VAR(&DTAPROT) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGL) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(512)
DCL VAR(&SCRINP) TYPE(*CHAR) LEN(10) +
VALUE(SCRFTPINP)
DCL VAR(&SCROUT) TYPE(*CHAR) LEN(10) +
VALUE(SCRFTPOUT)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(FEHLER))
/* BEREINIGEN INPUT-DATEI */
DLTF FILE(QTEMP/&SCRINP)
MONMSG MSGID(CPF0000) EXEC(DO)
RCVMSG MSGTYPE(*EXCP)
ENDDO
/* BEREINIGEN OUTPUT-DATEI */
DLTF FILE(QTEMP/&SCROUT)
MONMSG MSGID(CPF0000) EXEC(DO)
RCVMSG MSGTYPE(*EXCP)
ENDDO
/* ERSTELLEN DATEIEN */
CRTPF FILE(QTEMP/&SCRINP) RCDLEN(80)
CRTPF FILE(QTEMP/&SCROUT) RCDLEN(80)
/* šBERSCHREIBUNGEN SETZEN */
OVRDBF FILE(INPUT) TOFILE(QTEMP/&SCRINP) +
OVRSCOPE(*CALLLVL)
OVRDBF FILE(OUTPUT) TOFILE(QTEMP/&SCROUT) +
OVRSCOPE(*CALLLVL)
/* PROGRAMM-AUSFšHRUNG */
CALL PGM(SCRFTPX) PARM(&RMTSYS &USER &PASSWORD +
&SCRIPT &LOG &OUTFILE &COMPARE &INTNETADR +
&CCSID &PORT &SECCNN &DTAPROT)
IF COND(&LOG = '*PRINT') THEN(DO)
OVRPRTF FILE(QSYSPRT) SPLFNAME(SCRFTP) +
OPNSCOPE(*ACTGRPDFN)
CPYF FROMFILE(QTEMP/&SCROUT) TOFILE(QSYSPRT)
ENDDO
IF COND(&LOG = '*OUTFILE') THEN(DO)
CHKOBJ OBJ(%SST(&OUTFILE 11 10)/%SST(&OUTFILE 1 +
10)) OBJTYPE(*FILE) MBR(*FIRST) AUT(*USE)
MONMSG MSGID(CPF0000) EXEC(DO)
RCVMSG MSGTYPE(*EXCP)
CRTPF FILE(%SST(&OUTFILE 11 10)/%SST(&OUTFILE 1 +
10)) RCDLEN(80) TEXT('Output from SCRFTP')
ENDDO
CPYF FROMFILE(QTEMP/&SCROUT) TOFILE(%SST(&OUTFILE +
11 10)/%SST(&OUTFILE 1 10)) MBROPT(*ADD) +
FMTOPT(*NOCHK)
ENDDO
RCLRSC
IF COND(%BIN(&COMPARE 1 2) = 7 *AND +
%SST(&COMPARE 3 7) = 'CPF9898') THEN(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) +
MSGDTA('Vergleichszeichenfolge nicht +
gefunden') TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
ENDDO
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) +
MSGDTA('FTP-Script erfolgreich +
ausgefhrt') TOPGMQ(*PRV) MSGTYPE(*COMP)
RETURN
FEHLER:
RCVMSG MSGTYPE(*EXCP) RMV(*NO) MSGDTA(&MSGDTA) +
MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGL)
RCLRSC
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGL/&MSGF) +
MSGDTA(&MSGDTA) TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
ENDPGM
RPGLE für SCRFTPX
Code:
h
fINPUT o f 80 disk usropn
foutput if f 80 disk usropn
d RMTSYS s 256 varying
d USER s 30 varying
d PASSWORD s 30 varying
d SCRIPT ds
d AnzZl 5I 0
d ScrLin 80 dim(100)
d LOG s 10
d OUTFILE s 20
d COMPARE s 80 varying
d INTNETADR s 16 varying
d CCSID s 5p 0
d PORT s 5p 0
d SECCNN s 10
d DTAPROT s 10
d AKT s 5I 0
d WKSATZ ds 80
d QCMD s 256
d QCMDL s 15p 5 inz(256)
iOUTPUT bb
i 1 80 WKPROT
c *entry plist
c parm RMTSYS
c parm USER
c parm PASSWORD
c parm SCRIPT
c parm LOG
c parm OUTFILE
c parm COMPARE
c parm INTNETADR
c parm CCSID
c parm PORT
c parm SECCNN
c parm DTAPROT
c open INPUT
c eval WKSATZ = USER + ' ' + PASSWORD
c write INPUT WKSATZ
c do AnzZl AKT
c eval WKSATZ = ScrLin(AKT)
c write INPUT WKSATZ
c enddo
c eval WKSATZ = 'quit'
c write INPUT WKSATZ
c close INPUT
c* aufrufen FTP
c if RMTSYS <> '*INTNETADR'
c eval QCMD = 'FTP RMTSYS(''' + RMTSYS + ''')'
c else
c eval QCMD = 'FTP RMTSYS(' + RMTSYS + ')'
c + ' INTNETADR(''' + INTNETADR
c + ''')'
c endif
c if CCSID <> *zero
c eval QCMD = %trim(QCMD)
c + ' CCSID(' + %char(CCSID) + ')'
c endif
c eval QCMD = %trim(QCMD)
c + ' PORT(' + %char(PORT) + ')'
c + ' SECCNN(' + %trim(SECCNN) + ')'
c + ' DTAPROT(' + %trim(DTAPROT) + ')'
c monitor
c call 'QCMDEXC'
c parm QCMD
c parm QCMDL
c on-error *all
c eval COMPARE = 'CPF9898'
c eval *inlr = *off
c return
c endmon
c if COMPARE <> '*NONE'
c and COMPARE <> *blank
c open OUTPUT
c do *hival
c read OUTPUT
c if %eof
c leave
c endif
c if %scan(%trim(COMPARE):WKPROT) > *zero
c eval COMPARE = 'OK'
c leave
c endif
c enddo
c close OUTPUT
c if COMPARE <> 'OK'
c eval COMPARE = 'CPF9898'
c endif
c endif
c eval *inlr = *off
c return
Bookmarks