Ci troviamo spesso a condividere file e informazioni tramite Ftp.
Diverse applicazioni rendono disponibili aree Ftp dove depositare file xml, txt e altro ancora.
Nella Supply Chain, per esempio, vengono messe a disposizione collegamenti via Ftp per eseguire download e upload di file Xml ,Txt o Csv per scambiare le informazioni da trattare con gli ERP proprietari o nei processi di gestione degli agenti per sincronizzare via Ftp cataloghi, ordini e quant’altro con gli strumenti a disposizione della forza vendita.
In questo articolo vediamo come fare un Ftp di trasferimento, che consente di inviare rapidamente anche file di grosse dimensioni (…giga byte)
Questo metodo può essere usato per eseguire dei salvataggi su un disco nas esterno, che si trova nella propria rete, trasferendo gli oggetti di tipo *Savf dall’ asp dell’Ibm-I all’ubicazione Ftp disponibile.
Nell’esempio a seguire, si descrive come trasferire gli oggetti di tipo *Savf da Ibm-I ad un’area Ftp della intranet aziendale o esterna. Lo stesso processo può essere facilmente replicato per eseguire funzionalità di invio e ricezione di qualsiasi oggetto trattabile con Ftp.
Index
Generiamo una semplice applicazione rpg full free che scrive i comandi in un file sorgente temporaneo che chiamiamo FTPCMD con membro FTP. L’applicazione legge la tabella “SALVA_FTP” che contiene le librerie che saranno salvate come savf.
I comandi scritti sono tipici di Ftp : user , password , BIN, PUT ,GET, QUOTE,….
CREATE TABLE LIBRERIA.SALVA_FTP ( LIBRERIA CHAR(10) CCSID 280 NOT NULL DEFAULT '' ) RCDFMT SALVA_FTP ;
// **************************************************** // PGM: FTP01 // comando da eseguire per compilare il pgm: // CRTSRCPF FILE(LIBRERIA/FTPCMD) RCDLEN(100) MBR(FTP) // **************************************************** CTL-Opt OPTION(SRCSTMT:NODEBUGIO) DFTACTGRP(No); dcl-f salva_ftp usage(input) rename(salva_ftp:salva) dcl-f ftpcmd usage(*output) rename(ftpcmd:ftprec); dcl-s userf2 char(10); dcl-s passf2 char(10); dcl-ds CmdRec; srcseq packed(6:2); SRCDAT packed(6:0); SRCDTA char(88); END-DS; userf2 ='qpgmr01'; // record user e password passf2 ='qpgmr01'; srcdta = userf2+passf2; srcdat=0 ; srcseq=+1; write ftprec ; srcseq=+1; srcdta= 'BIN'; // record BIN write ftprec ; dow not(%eof) ; read salva_ftp ; // read tabella if %eof ; leave ; endif ; srcseq=+1; srcdta='PUT'+' QGPL/'+ // record BIN %TRIM(LIBRERIA) ; write ftprec ; enddo ; *Inlr=*On;
Eseguo in un clle i comandi per l’aggiornamento delle tabelle nella qtemp.
La tabella FTPCMD conterrà i comandi FTP generati dall’applicazione del punto precedente.
La tabella FTPLOG conterrà il log delle transazioni eseguite.
Il comando STRTCPFTP verrà lanciato con il parametro che indica l’ubicazione FTP a cui si accederà con user e password memorizzati dalla funzione descritta in precedenza.
/* FTP_CL */ PGM PARM(&TGTSYS) /* parametro che contiene l'indirizzo ftp di destinazione ftp.xxxx.xx*/ DCL VAR(&TGTSYS) TYPE(*CHAR) LEN(30) DLTF FILE(QTEMP/FTPCMD) MONMSG MSGID(CPF2105) CRTSRCPF FILE(QTEMP/FTPCMD) RCDLEN(100) MBR(FTP) OVRDBF FILE(FTPCMD) TOFILE(QTEMP/FTPCMD) MBR(FTP) CALL PGM(FTP01) DLTF FILE(QTEMP/FTPLOG) MONMSG MSGID(CPF0000) CRTPF FILE(QTEMP/FTPLOG) RCDLEN(132) MBR(FTPLOG) OVRDBF FILE(INPUT) TOFILE(QTEMP/FTPCMD) MBR(FTP) OVRDBF FILE(OUTPUT) TOFILE(QTEMP/FTPLOG) MBR(FTPLOG) STRTCPFTP RMTSYS(&TGTSYS) DLTOVR FILE(*ALL)
Ed ecco il lancio finale che include il salvataggio delle librerie inserite nella tabella e l’invio ftp dei savf
/* SALVA_CL */ PGM DCLF FILE(LIBL/SALVA_FTP) DCL VAR(&LIBRERIA) TYPE(CHAR) LEN(10) /** salva le librerie su disco Iseries / LOOP: RcvF MonMsg MsgId(CPF0864) Exec(GoTo EOF) CRTSAVF FILE(&LIBRERIA) MONMSG MSGID(CPF5813 CPF7302) SAVLIB LIB(&LIBRERIA) DEV(SAVF) SAVF(&LIBRERIA) + CLEAR(ALL) SAVACT(SYSDFN) DTACPR(MEDIUM) MONMSG MSGID(CPF9812) GOTO CMDLBL(LOOP) EOF: /* ftp dei savf su nas * / CALL FTP_CL ('xxx.xxx.xxx.xxx)
Esempio del log memorizzato nella tabella qtemp/ftplog
……………..
> PUT QGPL/LIBRERIA
229 Entering Extended Passive Mode (!!!24775!).
150 Sending file to member LIBRERIA in file LIBRERIA in library QGPL.
226 File transfer completed successfully
22176 byte trasferiti in 0,062 secondi. Velocità di trasf. 354,816 KB/sec.
….
La tecnica descritta consente di scrivere applicazioni veloci, strutturate e brillanti per inviare e ricevere informazioni via ftp per la piattaforma IBM-I.
Riceviamo e pubblichiamo ben volentieri questo "tip & trick" di Patrick Rizzi che presenta una tecnica che permette di intervenire…
Prendo spunto da una risposta di Michael Mayer sulle mailing list di Midrange.com a chi chiedeva come monitorare i messaggi…
Le imprese sono sempre più alla ricerca di strumenti che possano migliorare l'efficienza, la collaborazione e la gestione delle risorse.…
I primi di Aprile è uscita la "Spring Version" di ACS Access Client Solution, versione 1.1.9.5 Interessanti novità soprattutto in…
Se non vi bastava la ricca agenda delle sessioni del Common Europe Congress 2024, 3-6 Giugno Milano, ecco un altro…
Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…