Le tabelle aggiuntive sono tabelle di dati collegate ad altre tabelle con una relazione padre/figlio. Ad esempio una tabella aggiuntiva potrebbero essere gli indirizzi di spedizione associati a un cliente. Ogni cliente può avere più indirizzi di spedizione e quindi per ogni record occorre poter associare altri record proveniente da un'altra tabella, in questo caso gli indirizzi.
Potrebbe essere necessario esporre i dati di queste tabelle aggiuntive all'interno di una sezione in modo da poter gestire o trovare i suoi record in modo più semplice.
In questo esempio vedremo come i database di Dtec gestiscono gli impianti sia come tabella aggiuntiva associata al cliente, sia come sezione direttamente esposta nella barra di navigazione.
Creazione della tabella aggiuntiva e dei campi necessari
Dato per scontato che siano già state create la tabella dei clienti, quella degli impianti e che quest'ultima sia stata imposta come tabella aggiuntiva occorrerà creare un campo di tipo sotto tabella che richiami la tabella clienti.
Questo campo potrebbe sembrare una ripetizione visto che riportarà lo stesso nome del cliente della scheda attualmente aperta. Il suo compito in realtà è essenziale visto che servirà ad identificare il cliente dell'impianto quando questo record verrà aperto dalla sezione e quindi non direttamente dal cliente.
Inserito il campo procederemo poi alla creazione degli script che dovranno compilare e modificare automaticamente il valore di quest'ultimo.
Gli script della tabella clienti
Il primo script che verrà creato sarà di tipo valore cambiato su scheda. Questo verrà utilizzato quando verrà selezionato il cliente (o cambiato) per riallineare tutti i valori del campo cliente sulla tabella impianti
if datafield.name() ~= "nome" then
do return end
end
table = dataview.getatable("impianti")
rows = table.getrows()
for i=1,table.countrows() do
row = rows[i]
if row.getvalue("cliente") ~= dataview.getvalue("nome") then
row.setvalue("cliente",dataview.getvalue("nome"))
end
end
Come si può vedere lo script agisce solo se è il campo nome ad essere stato modificato. In caso recupera la tabella degli impianti e riallinea i valori per ogni riga,
Il secondo script avrà il compito in post salvataggio di controllare i valori di ogni riga per garantire che siano allineati con il nome del cliente e con il suo id
table = dataview.getatable("impianti")
rows = table.getrows()
for i = 1,table.countrows() do
row = rows[i]
if row.getvalue("gguid_cliente") ~= dataview.getvalue("gguid") or row.getvalue("cliente") ~= dataview.getvalue("nome") then
row.setvalue("gguid_cliente", gguid_cliente)
row.setvalue("cliente", dataview.getvalue("nome"))
row.save()
database.addsyncbox("impianti",row.getvalue("gguid"))
end
end
program.refreshsection("impianti")
Lo script sulla tabella impianti
Su questa tabella occorrerà creare uno script di tipo post salvataggio. Questo creerà il collegamento effettivo tra il record impianti e il suo cliente attraverso il match che viene eseguito sulle tabelle aggiuntive. Ossia tra il campo gguid e il campo gguidp.
gguid_cliente = dataview.getvalue("gguid_cliente")
if (gguid_cliente ~= nil and gguid_cliente ~= "") then
if dataview.getvalue("gguidp") ~= gguid_cliente then
dataview.setvalue("gguidp", gguid_cliente)
database.setsql("UPDATE impianti set gguidp='" ..gguid_cliente.."',tid=" .. tostring(utility.tid()) .. " WHERE gguid='" .. dataview.getvalue("gguid") .. "'")
database.addsyncbox("impianti",dataview.getvalue("gguid"))
program.refreshsection("impianti")
end
end
In questo modo, creando un nuovo impianto direttamente dalla sua sezione e selezionando il cliente. Aprendo la scheda di quest'ultimo l'impianto sarà presente nella tabella aggiuntiva.
Creazione sezione impianti
Come ultima cosa occorrerà creare la sezione che faccia riferimento alla tabella impianti per poterli modificarli e aggiungerli anche senza dover aprire le schede dei clienti.
Commenti
Posta un commento