Daemon

Il Daemon di Nios4 è un software di servizio per sistemi Windows. Questo programma nasce per poter eseguire delle operazioni di importazione ed esportazione dei dati da un database Nios4 in modo automatico e schedulato. Si consiglia di inserire il programma tra quelli lanciati automaticamente all'avvio del computer per il corretto utilizzo. Di seguito i link per scaricare la versione completa e l'update in caso sia già installato:

Setup

Update

Installazione

Eseguita l'installazione e lanciato il programma verrà visualizzata la scherma degli script attualmente attivi. In caso ci fossero script la finestra verrebbe automaticamente nascosta. Per riaprirla premere sull'apposita icona presente nella toolbar di windows.

Interfaccia e comandi

Al centro della schermata vengono riportati gli script attualmente caricati nel demone. Dalla tabella è possibile impostare se questi script sono attivi o attualmente in pausa. Sempre dalla tabella è possibile inserire la data di partenza usata dal sistema per calcolare il prossimo avvio, il tipo di scala da utilizzare per il calcolo (minuti, ore, giorni) e il valore numerico da utilizzare. In base a questi valori il programma visualizzerà nell'ultima colonna la data effettiva del prossimo lancio dello script.

Quando il programma eseguirà lo script la datata di partenza (start date) diventerà la data attuale e la data prossima (next date) verrà aggiornata con il nuovo valore.

Nella parte inferiore è presente la console di log degli script. All'interno di questo spazio il programma visualizzerà i messaggi inviati dagli script, come ad esempio conferme o errori intercettati dal sistema.

Comandi della barra superiore

New Script

Permette di creare o importare gli script da eseguire

Edit Scripts

Apre l'editor dello script attualmente selezionato nella griglia principale

Accounts

Permette di gestire gli account di Nios4 che verranno utilizzati per identificare i database cloud

Run

Esegue lo script attualmente selezionato nella griglia principale

Timer

Indica se il timer del programma è in attivo oppure no

Options

Mostra le opzioni del programma

Close

Chiude definitivamente il programma (in caso si chiuda la finestra il programma sarà comunque attivo e riapribile dalla toolbar)

Esempio di importazione dati automatico da un file esterno

In questo esempio verrà creato uno script per importare da un file excel dei dati direttamente dentro a un database di Nios4.  Questo permette di inserire in modo automatico dei dati provenienti da altri gestionali e inviarli a tutti i dispositivi attraverso il cloud.

Registrazione account Nios4

Come prima cosa occorrerà inserire gli account Nios4 all'interno del programma. Questo servirà in fase di scrittura degli script per ricevere l'autorizzazione a interagire con i propri database cloud. Premendo sul pulsante Accounts comparirà la finestra riportante gli attuali account registrati. Premere sul pulsante aggiungi per inserirne uno nuovo.

Creazione dello script

Premiamo sul pulsante New Script per caricare l'editor e iniziare la scrittura del nostro script. Attraverso il pulsante RUN sarà possibile eseguire direttamente lo Script, mentre dal comando Actions verrà visualizzato il menu con le varie funzioni legate alla editazione. Il pulsante Save salva lo script e aggiorna la griglia principale.

L'editor è impostato esattamente come quella standard di Nios4. Nella parte sinistra vengono riportati i comandi disponibili, in quella centrale l'editor vero e proprio. Nella parte sinistra l'anteprima del codice e nella parte inferiore la console.

Ora creeremo le prime righe dello script

account = daemon.loadaccount("help@d-one.info")

db = account.opendatabasecloud("testxls")

La prima riga crea un oggetto account indicando il nome dell'utente. Questo a sua volta verrà utilizzato per creare l'accesso al database interessato all'importazione dei dati. Il nome del database può essere individuato all'interno di tutti i dispositivi. Ad esempio nella versione windows viene riportato in basso a destra.


tid = daemon.getparm("tidxls")

if tid == nil then

   tid = 0

end

db.tidserver = tid

value= db.sync()

daemon.setparam("tidxls",db.tiserver)


excel = program.loadspreadsheet("c:\\test.xls")

Il primo blocco di codice viene utilizzato per recuperare il valore di tid del database. Questo valore identifica il marker temporale dell'ultima sincronizzazione effettuta. In questo esempio si cerca di recuperare questo valore dai parametri del programma. In caso il valore non esistesse viene fissato a 0. Un tid uguale a 0 indica che in fase di sincronizzazione viene richiesto al server di inviare tutti i dati presenti in cloud. 

Di solito questo valore viene utilizzato solo alla prima sincronizzazione dato che risulta poco performante inviare o ricevere a ogni esecuzione tutti i dati. Questo valore viene gestito direttamente da Nios4, mentre per il daemon dovremmo essere noi a salvare questo valore su un file o all'interno dei parametri

Se questo valore fosse valido (la data è in formato YYYYMMDDhhmmss) si informa il server di inviare le modifiche ai dati avvenute dopo questa data in modo da ricevere solo le effetive operazioni mancanti al database presente all'interno del dispositivo. Recuperato o impostato il valore imposteremo la variabile tidserver del database.

Eseguita la sincronizzazione il database aggiornerà il valore di tidserver. Questo verrà salvato poi dentro ai parametri di programma in modo da poter essere recuperato al prossimo avvio dello script ed eseguire la sincronizzazione solo sulle ultime modifiche.

L'ultima riga apre il file di Excel interessato e lo trasforma in un oggetto DataTable. Questo significa che è possibile navigarlo come tutte le tabelle del programma. Le operazioni non eseguibili sono quelle di modifica e salvataggio. Il nome delle colonne corrisponde alle lettere delle colonne del file di Excel.

A questo punto eseguiamo il caricamento dei valori dal file controllando se dobbiamo creare un nuovo record o aggiornalo


rows  = excel.getrows()

for i = 1,excel.countrows() do

    row = rows[i]

    

    ritem = nil

    

    --search items

    table_items = db.getsql("SELECT * FROM items WHERE code='" .. row.getvalue("A") .. "'"

    

    if table_item.countrows() > 0 then

       rows_items = table_items.getrows()

       ritem      = rows_item[1] 

    else

       ritem = table_item.adddatarow() 

    end    

     

    ritem.setvalue("code",row.getvalue("A"))

    ritem.setvalue("description",row.getvalue("B"))

    ritem.setvalue("price",row.getvalue("C"))

    ritem.setvalue("tid",tility.tid())

    ritem.save()


end

Come prima cosa viene creato il primo ciclo for per iterare tutte le righe valide presenti all'interno del file di Excel. Quindi per ogni riga si interroga il database per vedere se esiste un record che corrisponde al valore della prima colonna. Se il record non esiste viene creato un nuovo datarow, altrimenti viene impostato quello trovato. In questo modo il sistema gestisce sia l'aggiunta dei nuovi record che il loro aggiornamento. Naturalmente è possibile aggiungere altri sistemi di controllo per vedere se il record trovato va aggiornato oppure no. Infatti il difetto di questo sistema e che comunque aggiornerà sistematicamente tutti i record trovati anche se non ci sono delle effettive modifiche dei valori.

Dopo l'aggiornamento dei dati rieseguiamo le stesse operazioni di sincronizzazione  recuperando il valore di tid da utilizzare per spedire solo le effettive modifiche o aggiunte eseguite rispetto all'ultima sincronizzazione.

tid = daemon.getparm("tidxls")

db.tidserver = tid

value= db.sync()

if value == false then

   output.print(db.errormessage)

end

daemon.setparam("tidxls",db.tiserver)

Eseguita nuovamente la sincronizzazione database aggiornerà nuovamente il valore tidserver in modo da poterlo nuovamente salvare per la prossima volta.

In caso la sincronizzazione sia fallita (value = false) sarà possibile leggere l'errore attraverso la variabile errormessage del database

Creato lo script dal menù Actions è possibile rinominarlo ed esportarlo.

Creazione del task

Salvato lo script e chiuso l'editor sarà possibile impostare il timer di esecuzione di questo impostando la data di inizio, la scala temporale e il valore numerico per calcolare il prossim avvio.

Differenze tra gli oggetti LUA del Daemon e di Nios4

Essendo il Daemon nato per essere indipendente rispetto al programma completo non possiede diversi oggetti di gestione. Ad esempio non è possibile visualizzare e modificare i dati utilizzando le schede standard o generare stampe. Le sue funzioni rimangono sulla gestione massiva dei dati agendo direttamente sul database. D'altra parte possiede dei comandi per il caricamento di file esterni che non sono presenti dall'altra parte.