01 - Programmazione01e - Varie Programmazione IBM i

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.

About author

Project manager, consulente aziendale gestionale, sviluppo applicazioni con Rpgfree , Python, JavaScript. Sono entrato nel mondo IT quando è nato l'As400 , sono un sostenitore della piattaforma Ibm-I e delle sue enormi potenzialità e credo nelle risorse offerte dalla comunità dell'open source. Sono grato di collaborare con FAQ400 perchè condivido pienamente gli obiettivi.

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: