Importazione - file di definizione dei parametri

Top  Previous  Next

Il file di definizione dei parametri

Il formato dei dati da caricare è specificato nel file contenente i parametri dell’importazione. Questo file è in formato xml ed ha il seguente formato

<import

mode=modalità di importazione

format=formato dei dati di input: vedi note

       <!- significativi solo se il format=“database” -->

       dbType=tipo di database

       DSN=stringa di connessione

       query=query di estrazione dei dati

<!- significativi solo se il format è “fixed” o “xml” -->

       encoding=stringa che identifica la codifica del file (ASCII, UTF8, …)

       <!- significativi solo se il format è “custom” -->

assembly=nome di un assembly .NET esterno

type=nome della classe dellassembly

       <!- altri parametri -->

ignoreKeys=campi ignorati ai fini della modifica di un'anagrafica

primary-key=campo/campi che identificano univocamente i record

primary-key-query=query di ricerca del record (in alternativa a primary-key)

missing-pk=comportamento a fronte di record non presenti in Check&In

missing-fk=comportamento a fronte di una foreign key mancante

selecting=generazione di comandi ai terminali: true/false

       >

<fieldlist> <!-- tag che indica lelenco dei campi -->

   <!-- parametri per un campo in caso di importazione da file di testo --->

   <nome_campo pos=colonna inizio len=lunghezza del campo/>

   <!-- parametri per un campo in caso di importazione da un file xml -->

   <nome_campo alias=nome del tag nel file dati />

   <!-- parametri per un campo non passato ma da valorizzare comunque -->

   <nome_campo default=valore di default/>

   <!-- parametri per un campo il cui valore è letto da una query -->

   <nome_campo query=testo della query/>

</fieldlist>

</import>

 

Più precisamente, il significato dei campi è il seguente:

mode: può valere replace oppure append; nel primo caso se il record anagrafico è già presente nel db questo viene aggiornato mentre se non è presente viene inserito; nel secondo caso è possibile solo inserire nuovi record; record già presenti vengono ignorati
format: può valere fixed, xml, database, custom; indica se i dati sono letti da un file con formato a colonne fisse, con formato xml, da un database, oppure da  un modulo assembly esterno;
se format="database":
odbType: è una stringa che indica il tipo di database e può essere una fra "MSDE", "SQLSERVER", "ORACLE";
oDSN: è la stringa di connessione, la sua struttura dipende dal tipo di database;
oquery: è il comando SQL per l’estrazione dei dati che sono oggetto dell’importazione;
opost: è il comando SQL che viene eseguito dopo l'importazione di una riga
se format="fixed" o format="xml":
oencoding: stringa con la descrizione della codifica usata per produrre il file dei dati: non è un dato obbligatorio , se non è indicato è il valore di default di Windows, in genere UTF-8;
se format="custom":
oassembly: è il nome di un assembly .NET, esterno a Check&In, che implementa le procedure necessarie per leggere in successione i dati da elaborare durante l’importazione; es.: “Importazione.dll”;
otype: è il nome della classe che esegue l’importazione e che è implementata nel modulo indicato, es.: “Importazione.MyImporter”.
primary-key: indica il nome del campo che identifica univocamente l’anagrafica, solitamente il codice fiscale oppure la matricola. Deve essere un campo omonimo di un campo dell’archivio "ANAGRAFICO" di Check&In (non sono ammessi i campi con nome composto, cioè badge-codice, badge-datainizio, ecc). Può indicare una sequenza di nomi di campo separati da ","; in questo caso il significato è provare a usare in sequenza tutti i campi indicati come campo chiave finché non si trova il dipendente.

Es.:

Valore di "primary-key"

Significato

codfisc

Si usa il campo "codfisc" dei dati di input per cercare se esiste un dipendente con campo "codfisc" nella tabella Anagrafico di Check&In.

codfisc,matricola

Come sopra, ma prima si usa "codifsc" e se la ricerca non ha successo si passa a usare "matricola".

La ricerca del dipendente è fatta tenendo anche conto che il dipendente deve essere attualmente in forza, cioè avere un profilo valido. Quindi la condizione di ricerca contiene la condizione sul campo chiave più una condizione implicita sulla validità del profilo.

Quando la ricerca di un dipendente ha successo, allora si produce una modifica dei dati o si salta il dipendente, a seconda del valore di "mode"; se la ricerca non ha successo allora il dipendente viene inserito o ignorato a seconda del valore di "mode" e di "missing-pk".

primary-key-query: si può usare in alternativa a primary-key, cioè o si mette uno o l'altro. Deve contenere una query per selezionare il dipendente, partendo dal record di dati che si sta elaborando per l'importazione. E' sufficiente che la query selezioni il campo Anagrafico.Id. Con questo parametro si può fare una ricerca del dipendente su più campi. Questa è per esempio una query valida:.

Ad esempio, questa è una query valida:

primary-key-query="select a.id from anagrafico a join profilo p on a.id=p.idutilizzatore where a.codfisc=@codfisc and p.datainizio=@_dtDataInizio"

missing-pk: indica il comportamento a fronte di un record non presente nel db: può valere skip oppure insert; nel primo caso il record viene ignorato, nel secondo viene creata la nuova anagrafica
missing-fk: indica il comportamento a fronte di una foreign key non presente nel db: può valere skip, ignore oppure insert; nel primo caso l’intero record viene ignorato, nel secondo viene ignorato il campo, nel terzo creato un record con valori di default e chiave uguale al valore passato
selecting: indica se a fronte di aggiornamenti delle anagrafiche e dei badge devono essere generati dei comandi di aggiornamento per i terminali dell’impianto; può valere true o false; se vale full alla fine dell'importazione non vengono inviati ai terminali gli aggiornamenti delle tabelle ma le tabelle complete

 

Definizione dell’elenco dei campi

Ogni campo facente parte dell’aggiornamento è definito nel seguente formato:

nome del campo: il nome del tag xml corrisponde al nome del campo nel db di Check&In. Sono inoltre ammessi i seguenti valori per identificare i dati del badge:
obadge-codice
obadge-datainizio
obadge-datafine
obadge-idpolicyaccesso

Se il badge oppure il valore per il titolo specificato non sono presenti in archivio si applica il comportamento definito dal parametro missing-fk nell’intestazione;

Altri dati legati all’anagrafica definiti dall’utente vengono modellati mediante i concetti di titoli ed elementi; questi valori si possono passare identificando il campo come titolo-codice_del_titolo, si veda il paragrafo di seguito;

Caso particolare è l’indicazione della policy di accesso, che è il contenuto del campo idpolicyaccesso oppure nel campo badge-idpolicyaccesso: si veda il paragrafo di seguito;

pos e len: in caso di importazione da file di testo a posizioni fisse vanno valorizzati i parametri pos e len che indicano la posizione del primo carattere (a partire dalla colonna 0) e la lunghezza del campo
alias: si può usare per importazione da file xml o da database, indica il nome originario del campo, rispettivamente come elemento xml nel file dei dati oppure come nome di campo nella query di selezione; se non è presente si utilizza il nome del campo per Check&In
format: per valori di tipo data, questo attributo indica il formato per la conversione da stringa; sono valide tutte le stringhe che contengono le sequenze GG, MM, AA, AAAA, HH, NN, SS, dove AAAA è l’anno a 4 cifre, MM è il mese a 2 cifre o i minuti, NN sono i minuti; ad esempio: GGMMAAAA (giorno mese anno), GGMMAAAAHHNNSS (giorno, mese, anno, ore, minuti, secondi), GG/MM/AA/HH:MM:SS (giorno, mese, anno, ore, minuti, secondi);
default: si usa per indicare un valore fisso che si vuole dare ad un campo, ma solo se nel database il campo ha valore nullo. Se si indica un default non ha senso indicare la posizione del campo nel file di input perché il valore non viene considerato.
query: questo attributo contiene il testo di una query che viene utilizzata per leggere il valore del campo. La query può utilizzare come parametri tutti i campi del record corrente che precedono questo campo nella lista <fieldlist>. La query viene eseguita e si prende il primo campo del primo record. Dovrebbe essere quindi una query di tipo scalare, cioè che seleziona un solo valore o nessuno. Esempio

<idpolicyaccesso query="select top 1 idpolicyaccesso from anagrafico where idpolicyaccesso is not null and a.codfisc=@codfisc order by datainserimento desc"  />

Si può utilizzare questa tecnica per risolvere situazioni particolaril. Ad esempio, nel caso sopra, la policy non è contenuta nei dati di input e viene recuperata dall'anagrafica che ha lo stesso codice fiscale.

missing: non è un attributo obbligatorio è presente può valere solo “skip”. In questo caso indica che, se il campo non è contenuto nei dati originari oppure è nullo è vuoto, allora viene ignorato: è come se non fosse presente nel record letto. Non va usato assieme all’attributo default, perché in tal caso non viene mai applicato (la proprietà "default" si analizza per prima e fa in modo che campo abbia sempre un valore).

 

Importazione da file di testo a spaziature fisse

Durante l’elaborazione di un file di testo a spaziature fisse (format=“fixed”), si seguono le seguenti regole:

si ignorano le righe vuote o che contengono solo caratteri di spaziatura;
se la riga letta è più corta di quanto prevede il tracciato dei campi, prima di procedere si allunga la riga del numero di spazi necessari a raggiungere la lunghezza corretta.

Importazione da database

Ecco un file di configurazione per l’importazione dal database Northwind di SqlServer.

<import mode="replace" format="database"

dbType="SQLSERVER"

DSN="Persist Security Info=True;User ID=sa;Password=;Initial Catalog=Northwind;Data Source=."

query="SELECT * FROM Employees ORDER BY EmployeeID"

primary-key="matricola" missing-pk="insert" missing-fk="insert" selecting="true">

<fieldlist>

<matricola alias="EmployeeID" len="9" />

<cognome alias="LastName" len="30" />

<nome alias="FirstName" len="30" />

<datanasc alias="BirthDate" />

<comunenasc alias="City" len="40" />

<provnasc alias="Region" len="2" missing="skip" />

<telefono alias="HomePhone" len="14" />

<note alias="Notes" />

<classe default="D" />

<tipoorarioaccessi default="A" />

<idazienda default="1" />

<idpolicyaccesso default="2003" />

<idpianta default="1" />

<idclasseanagrafico default="1" />

<datalicenz alias="FireDate" missing="skip" />

<badge-codice alias="EmployeeID" len="8" />

<badge-datainizio alias="HireDate" />

<badge-datafine alias="FireDate" missing="skip" />

<badge-idpolicyaccesso default="2003" />

</fieldlist>

</import>

 

Importazione da file xml

In questo formato, l’input è rappresentato da un file in formato xml in cui:

i record sono tutti gli elementi figli del nodo principale del documento;
i campi di un record sono i sottoelementi dell’elemento record;
il valore di un campo è il testo di un elemento;
se nel tracciato per il campo campo1 è indicato l’alias alias1, significa che nel file xml il campo campo1 si legge nell’elemento di nome alias1;
eventuali campi non presenti nel file xml vengono letti con valore vuoto;
i campi di tipo data e ora vengono convertiti in data e ora secondo il formato indicato.

Esempio: (nota: il campo CF è definito alias di codfisc)

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<lista>

   <record>

       <cognome>Anzi</ cognome >

       <nome>Aldo</nome>

       <matricola>0000000122</matricola>

            <CF>ABCIZO66I14L4830</CF>

   </record>

       <cognome>Bianchi</ cognome >

       <nome>Gianni</nome>

       <matricola>0000000125</matricola>

       <CF>ABCIZO66I14L483P</CF>

   <record>

   ...

   </record>

...

</lista>