ImportExport

From SageDev KB
Jump to navigation Jump to search

Indicazioni per la gestione di un'importazione/esportazione. Va creato un modello di import/export, dove verranno indicate le videate su cui andrà simulato l'inserimento dei dati. In fase di importazione Sage si comporteà come se un utente scrivesse i dati a video, con tutti i controlli e comportamenti del caso. Bisogna quindi valutare attentamente la gestione delle varie situazioni di errore. E' possibile modificare il comportamento delle videate in fase di importazione utilizzando la variabile globale GIMPORT. Per effettuare l'importazione o l' esportazione andare al menu Utilizzo → Import/Export.

Caso semplice[edit]

Nel caso di importazione:

Oggetto[edit]

Da Sviluppo → Dizionario programmi → Oggetti (GESAOB):

selezionare l'oggetto di cui si vuole gestire l'importazione.

  1. Nel riquadro Opzioni della scheda Generale dell'oggetto spuntare la casella Import, poi rivalidare
  2. Nella scheda Ambiente, riquadro Import, inserire le tabelle coinvolte in fase di importazione/esportazione con la relativa videata; la colonna Riquadro rimane vuota. Va inserita una riga per ogni coppia (tabella, videata)
    NB: in fase di importazione Sage simula l'inserimento dei dati nelle videate elencate, e scatena tutti i controlli e programmi come se l'inserimento fosse fatto in modo interattivo dall'utente; se non si riesce a inserire un dato nella videata anche la corrispondente importazione fallirà.

Modello[edit]

Da Parametrizzazione → Utilizzo → Import/Export → Modelli Import/Export (GESAOE):

In testata:

  1. creare un nuovo modello
  2. spuntare la casella Attivo

Nella scheda Testata:

  1. impostare codice attività
  2. impostare l'oggetto da trattare nell'importazione/esportazione
  3. per un file CSV, nel riquadro Struttura:
    • come tipo file mettere "Separatore record"
    • come separatore di campo mettere ";" o altro carattere necessario
    • come separatore record mettere \013\010 (013=carriage return; 010=line feed o new line, corrispondenti a \r\n in c#)
  4. se il modello serve per esportare spuntare la casella Export nell'omonimo riquadro. Fare un'export è utile per vedere come deve essere il file da importare.
  5. Nel riquadro Import
    • spuntare la casella Import se il modello serve per importare;
    • spuntare la casella Aggiorn.Autorizzato se in fase di importazione si vuole permettere che i record siano aggiornati/sovrascritti.
  6. nel riquadro Identificatori:
    • inserire il livello ( mettere "1" se i record da inserire corrispondono 1 a 1 con l'oggetto di riferimento del modello)
    • lasciare vuoto il campo Flag
    • inserire la tabella in cui i record andranno inseriti
    • inserire nella colonna chiave l'indice attraverso cui individuare i record (uno degli indici della tabella appena inserita)

Nella scheda Campi:

  1. Inserire l'elenco dei campi gestiti nell'importazione/esportazione
  2. lasciare il campo Flag vuoto
  3. nel caso in fase di esportazione si voglia permettere di filtrare un intervallo in base ad un campo, impostare nella corrispondente colonna Intervallo il valore Inserito (vedi menu Utilizzo → I/E → Export )
  4. nel Riquadro Generazione del file indicare la locazione predefinita del file da iportare/esportare; per gestire un file su server:
    • impostare "Server"
    • specificare il percorso (per es. c:\SAGE\SAGEX3V6\InOutData\in\provaYCE.txt)
    • specificare il percorso dove verrà messo il file in caso di importazione riuscita

Pulsanti:

  1. utilizzare il pulsante Export per definire i valori di default dei filtri (saranno disponibili solo i campi in cui si è impostato il valore "Inserito" nella colonna Intervallo

Caso testata/dettaglio[edit]

Procedere come nel caso semplice a differenza di:

Oggetto[edit]

Nella scheda Ambiente, riquadro Import inserire una seconda riga con la tabella di dettaglio, in cui il valore nella colonna Riquadro sarà NBLIG

Modello[edit]

  1. nel riquadro Identificatori : andranno inserite due righe, una per ciascuna tabella:
    • inserire una prima riga per la testata: livello 1, un identificativo nel campo Flag (per es. "A"), nome tabella e indice come per il caso semplice
    • inserire una seconda riga per il dettaglio: livello 2, un identificativo nel campo Flag (per es. "B"), nome tabella dei dettagli e indice della tabella dettaglio
    • aggiungere alla riga del dettaglio il campo Legame, in cui inserire la parte della chiave che lega la tabella di testata a quella di dettaglio;
      per esempio se l'indice del dettaglio è YID0=CAMPO1TESTATA;CAMPO2TESTATA;CAMPO3IDRIGADETTAGLIO, inserire "CAMPO1TESTATA;CAMPO2TESTATA"


Nella scheda Campi:

  1. Inserire una prima riga con:
    • campo Flag pari al corrispondente valore Flag della tabella di testata
    • campo Tabella con valore la tabella di testata
    • campo Campo il valore "/" (senza apici)
  2. Per ciascun campo della tabella di testata:
    • Inserire nel campo Flag il corrispondente valore Flag messo nel riquadro "Identificatori" della scheda "Testata" per la tabella di testata;
      NB: i valori chiave di testata, che sono presenti anche nella tabella di dettaglio, vanno riferiti alla tabella di testata e non alla tabella di dettaglio
    • tutti gli altri campi come nel caso semplice
  3. Inserire una riga con:
    • campo Flag pari al corrispondente valore Flag della tabella di dettaglio
    • campo Tabella con valore la tabella di dettaglio
    • campo Campo il valore "/" (senza apici)
  4. Per ciascun campo della tabella di dettaglio:
    • Inserire nel campo Flag il corrispondente valore Flag messo nel riquadro "Identificatori" della scheda "Testata" per la tabella di dettaglio;
      NB: i valori chiave di testata, che sono presenti anche nella tabella di dettaglio, vanno riferiti alla tabella di testata e non alla tabella di dettaglio
    • tutti gli altri campi come nel caso semplice

Programmazione[edit]

Modifica dell'import/export da codice[edit]

In caso di specifiche necessità è possibile specificare nel modello un programma in cui inserire gli interventi necessari in fase di importazione o esportazione.

Nominare il file con suffisso YIMP, per esempio YIMPYCE. Qui riportiamo l'elenco degli eventi utilizzabili, con un esempio di cancellazione di alcune tabelle appena prima dell'importazione.

Un esempio di programma di importazione già presente a livello X3 è IMPSOH.

######################################################################
$ACTION
# Infbox ACTION
Case ACTION
 When "IMP_COMPILE"   : maxmem=max(maxmem/1024,5120)
 When "IMP_TRTSUP"    : Gosub YPROVA
 When "IMP_OUVRE"     : Gosub IMP_OUVRE     # all'inizio dell'importazione
 When "AP_IMPORT"     : Gosub YPROVA
 When "IMPORT"        : Gosub YPROVA
 When "IMP_ZONE"      : Gosub IMP_ZONE      # quando entra in un campo lista
 When "IMP_TAB"       : Gosub IMP_TAB       # quando entra in un campo riquadro (tabella)
 When "IMP_AVANT_MODFIC"  : Gosub YPROVA
 When "IMP_INICRE"    : Gosub YPROVA   
 When "IMP_INIMOD"    : Gosub YPROVA   
 When "INICRE_LIG"    : Gosub YPROVA   
 When "INIMOD_LIG"    : Gosub YPROVA   
 When "VALLIG"        : Gosub YPROVA   
 When "IMP_FERME"     : Gosub YPROVA
 When "EXP_OUVRE"     : Gosub YPROVA
 When "EXPORT"        : Gosub YPROVA
 When "EXP_ZONE"      : Gosub YPROVA

Endcase
Return

$IMP_OUVRE
    #cancello la tabella YCC
    If !clalev([F:YCC]) : Local File YCERTPRODT [YCC] : Endif    
    If !clalev([F:YCD]) : Local File YCERTPRODD [YCD] : Endif    
    Delete [F:YCD] Where 1 = 1
    Delete [F:YCC] Where 1 = 1
Return


E' possibile modificare il comportamento della simulazione dell'inserimento dei dati nelle videate utilizzando la variabile globale GIMPORT.

Inoltre, se nei campi del modello invece di un nome (nella colonna Campo della scheda Campi) inseriamo *1, *2 ... *99, nel programma potremo fare riferimento a tali campi con le variabili globali GIMP(1), GIMP(2)...GIMP(99).

Per le famiglie statistiche in ITM nella colonna Campo si scriverà TSICOD(0),TSICOD(1) ecc.

Esecuzione import tramite modello[edit]

Per eseguire un'importazione si usa la chiamata Call IMPORTSIL(MODELLO,FILEDAIMPORTARE) FROM GIMPOBJ.

Per un esempio concreto vedi il sorgente YIMPDAS.

If (func XIMPORT(NOMEMODELLO,PATHFILE)) <= 0  OR XERR > 0
  Call ECR_TRACE("ERRORI NELL'IMPORTAZIONE",0) From GESECRAN
Endif

Funprog XIMPORT(MODELLO,FILEIMP)
VALUE CHAR MODELLO, FILEIMP

    Call IMPORTSIL(MODELLO,FILEDAIMPORTARE) FROM GIMPOBJ

    #TESTO SE E' PRESENTE IL FILE DI ERRORE FILEDAIMPORTARE.ERR
    If FILINFO(FILEDAIMPORTARE+".ERR", 1) <0 #SE L' IMPORT E' ANDATO A BUON FINE
        End 1
    Else        
        End 0
    Endif

End

Esecuzione export tramite modello[edit]

Per eseguire un'esportazione si può usare la chiamata Call EXPORTSIL From GEXPOBJ, preparando adeguatamente tutte le variabili e le maschere di cui necessita.

Per un esempio concreto vedi il sorgente SPEPOH, all'azione scatenata dal bottone y.

    If BOUT = "y" Then
        Call OUVRE_TRACE("Estrazione file Ordine Diretto ODV - dati per MRP AS400") From LECFIC
        Call ECR_TRACE  ("Scritta di log1",0)  From GESECRAN
        Call ECR_TRACE  ("Scritta di log2",0)  From GESECRAN
        Gosub OUVRE From GEXPOBJ
        Local Mask EXPOBJ [DIA]
        Local Integer STAT
        # Imposto il modello di export e carico i valori dei parametri export definiti nel modello        
        [M:DIA]MODELE="YSOH"
        Call CHARGE_MODELE ([M:DIA]MODELE,STAT) From GEXPOBJ
        [M:DIA]=[M:EXP1]
        [M:DIA]NOMEXP   = "\\SAGEDEV.IT\XXX\odv\PPP123456.txt"
        [M:DIA]BDEB(0)     = [M:POH3]OCNNUM         ## 1^  parametro di estrazione
        [M:DIA]BFIN(0)     = [M:POH3]OCNNUM
        [M:DIA]CODDEB(0)   = [M:POH3]OCNNUM 
        [M:DIA]CODFIN(0)   = [M:POH3]OCNNUM 
        Call ECR_TRACE("Generazione File",0)  From GESECRAN
        [M:EXP2]=[M:DIA] 
        Call EXPORTSIL From GEXPOBJ
        Call ECR_TRACE("Fine estrazione dati ",0)    From GESECRAN 
        If !GSERVEUR
            Call FERME_TRACE From LECFIC
            Call LEC_TRACE From LECFIC
        Endif
    Endif


Entry points[edit]

Import: Entry point FILTER_WR[edit]

Permette di evitare di scrivere un record: vedi help Entry Points > Modulo Supervisore > Script standard TRTIMPV3

Import: Entry point DELTRT_EXE/DELTRT_END[edit]

Ad ogni import viene generato un file sorgente WWIMP*.

Questi entry point permettono di evitare che venga cancellato: basta impostare GPE=1.

Uno alla fine di ogni file importato, l'altro alla fine di tutto l'import.

(vedi help Entry Points > Modulo Supervisore > Script standard TRTIMPOBJ )


Export: Entry point DELFIC[edit]

Questo Entry point (vedi help Entrypoint, Modulo supervisore, Script TRTEXPOBJ ) viene chiamato appena finito l'export; utile per esempio per cancellare il file se vuoto.

  • FICDON nome del file generato
  • NBEXP numero record esportati

Export: Entry point TRTX3IMP.IMPZONINV[edit]

Questo è un po' particolare, vedi help: Entry Points > Modulo Modulo base > Script standard TRTX3IMP

Dall'help: permette di importare dei campi specifici nascosti o visualizzati alimentando la classe [M].

Batch di Import/Export[edit]

Vengono qui riportate a titolo di esempio le azioni svolte per gestire l'importazione schedulata delle certificazioni da As400 a Sage.

  1. Copiare eseguibile in cartella: \\serverX3\c$\SAGE\SAGEX3V6\scriputility\SyncX3As400_Cert
  2. Creare Concatenamento di import:
    Dal menu Parametrizzazione → Utilizzo → Import/Export → Concatenamenti (funzione GESAEN):
    Nuovo YCE ("Import Certificazioni")
    In ordine cronologico modello e nome file da importare
  3. Creo file batch (\\serverX3\c$\SAGE\SAGEX3V6\scriputility\SyncX3As400_Cert.cmd) che crea file da importare; (del file inserire anche cd C:\SAGE\SAGEX3V6\scriputility\SyncX3As400_Certificazioni
  4. Creo gruppo di jobs (GESABG):
    utilizzo SYNCANAG già esistente; ha due job:
    SYSTEME Comando sistema
    IMPENCH Concatenamento imports
  5. Gestione schedulazioni (GESABA):
    Mettere Attivo
    Nuovo UPDYCE Dossier SAAGEDEV
    gruppo SyNCANAG

    Impostare orari e giorni (NB: il server di batch è uno solo per tutti i dossier e può gestire al massimo 7 task alla volta, altrimenti non ha licenze sufficienti).
    Pulsante in basso a destra PARAMETRI, SYSTEME, inserisco:
    c:\SAGE\SAGEX3V6\scriputility\SyncX3As400_Certificazioni.cmd

    Pulsante in basso a destra PARAMETRI, IMPENCH, selezione: YCE

c:\SAGE\SAGEX3V6\InOutData\in\YCE.txt


Export e crono[edit]

Se si schedula (GESABA) il job EXPENCH (concatenamento report), nei parametri è possibile spuntare la voce "crono": tale impostazione permette di esportare solo le voci create o modificate dopo l'ultima esportazione; ma nelle tabelle deve esserci il campo EXPNUM.