STRTCPFTP come usarlo per eseguire FTP veloci

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.

Introduzione

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; 

Lancio del comando STRTCPFTP

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)                                                                                           

Applicazione Finale

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)                                         

Log

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.

….

Conclusioni

La tecnica descritta consente di scrivere applicazioni veloci, strutturate e brillanti per inviare e ricevere informazioni via ftp per la piattaforma IBM-I.

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

Recent Posts

Gestione dei file video bloccati su IBM i: una soluzione efficace

Riceviamo e pubblichiamo ben volentieri questo "tip & trick" di Patrick Rizzi che presenta una tecnica che permette di intervenire…

2 settimane ago

Monitoraggio Messaggi QSYSOPR: SQL per Ottenere Messaggi e Reply

Prendo spunto da una risposta di Michael Mayer sulle mailing list di Midrange.com a chi chiedeva come monitorare i messaggi…

2 settimane ago

Perché l’ERP è la Chiave del Successo per le Imprese Moderne

Le imprese sono sempre più alla ricerca di strumenti che possano migliorare l'efficienza, la collaborazione e la gestione delle risorse.…

2 mesi ago

ACS Access Client Solution 1.1.9.5

I primi di Aprile è uscita la "Spring Version" di ACS Access Client Solution, versione 1.1.9.5 Interessanti novità soprattutto in…

7 mesi ago

Tim Rowe and Scott Forstie – Promo video for CEC 2024 – Milan

Se non vi bastava la ricca agenda delle sessioni del Common Europe Congress 2024, 3-6 Giugno Milano, ecco un altro…

7 mesi ago

Code for IBM i 2.10.0 – Debug IBM i con Visual Studio Code

Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…

7 mesi ago