I datasource sono una collezione di classi PHP create per gestire i dati ossia
leggere, modificare, inserire ed eliminare dati da una determinata fonte, per ogni tipologia di sorgente
dati esiste una classe dedicata. Il datasource può essere considerato come una sorta di
interfaccia tra la fonte di dati e gli oggetti, lo scopo principale è quello di rendere trasparente
al controllo l'interazione con la fonte di dati.
Per poter utilizzare i datasource bisogna:
- Creare una stringa di connessione nel file conf/conn.inc.php con relativi parametri
di connessione, per dettagli clicca qui
- Istanziare la classe tramire l'oggetto ds come mostrato
<idtag typeobj="ds" conn="conn6" dsdefault="jamp" dstable="partite" dskey="id" />
Un attributo importante e comune a tutte le diverse tipologie di datasource è dssavetype(Tipo di salvataggio), tramite questo attributo è possibile stabilire la politica con la quale gestire il salvataggio dei dati, i valori possibili sono:
- table: salva tutti i dati della tabella.
- row: salva solo il record corrente.
- live: salva automaticamente i dati ad ogni cambiamento del record.
LEGARE UN OGGETTO AD UN DATASOURCE
Per legare un oggetto ad un datasource in generale lo si fa specificando nell'oggetto gli attributi dsobj e dsitem. Per l'attributo dsitem contenete il nome del campo sono ammissibili caratteri speciali.
Esempio:
<idtag typeobj="label" label="\nLabel:" dsobj="dsname" dsitem="fieldname" />
Il valore visualizzato nella label sarà il primo valore restituito dal datasource, per spostarsi tra i record o per generiche operazioni di modifica(inserimento, cancellazione, salvataggio) si può utilizzare l'oggetto dsnav
ACCESSO AL DATASOURCE LATO SERVER
Per poter accedere al datasource lato server è possibile inserendo nella pagina PHP gli eventi, nell'esempio sotto mostra come sia possibile accedere al datasource chiamato ds1 subito dopo che esso è stato istanziato per mezzo dell'evento data_select_before il quale ha come parametro della funzione l'oggetto datasource stesso:
<?php
function data_select_before($ds)
{
global $xml;
if ($ds->getPropertyName("id") == "ds1")
{
$result = array();
$result[0]["field1"] = "value1";
$result[0]["field2"] = "value2";
$result[1]["field1"] = "value3";
$result[1]["field2"] = "value4";
$ds->setProperty("xml", $xml->dataJSON($result)); // se output dei datasource è JSON(attributo out della pagina)
//$ds->setProperty("xml", $xml->dataXML($result)); // dati restituiti in formato XML
return false; // interrompe l'esecuzione del codice
}
}(
?>
Tale esempio serve a popolare partendo da zero il datasource, il risultato del datasource restituito dalla pagina sarà:
<?xml version="1.0" encoding="utf-8"?>
<data>
<script>
<![CDATA[
$('ds1').DSresult = [
{field1:"value1",field2:"value2"},
{field1:"value3",field2:"value4"}];
AJAX.setDsJSON('ds1',0,0,2,0);
]]>
</script>
</data>
Se invece non si vuole popolare il datasource partendo da zero, ma si deve modificare qualche suo valore in base a determinate condizioni, si utilizza l'evento data_select_after, in questo caso il datasource oltre ad essere stato instanziato e anche stato popolato con i dati secondo quanto specificato nel datasource stesso:
<?php
function data_select_after($ds)
{
global $xml;
$i=0;
$result = array();
while($ds->ds->dsGetRow())
{
$result[$i]['field1'] = $ds->ds->property["row"]->field1;
$result[$i]['field2'] = $ds->ds->property["row"]->field2;
if ($result[$i++]['field1']=="value1") $result[$i]['field3'] = "YES";
else $result[$i++]['field3'] = "NO";
}
$out = $xml->dataJSON($result);
$ds->setProperty("xml", $out);
}
?>
In questo caso il datasource non viene completamente ricreato ma viene aggiunto un campo ai due originariamente presenti.
<?xml version="1.0" encoding="utf-8"?>
<data>
<script>
<![CDATA[
$('ds1').DSresult = [
{field1:"value1",field2:"value2", field3:"YES"},
{field1:"value3",field2:"value4", field3:"NO"}];
AJAX.setDsJSON('ds1',0,0,2,0);
]]>
</script>
</data>
ACCESSO AL DATASOURCE LATO CLIENT
Altrettanto utile è poter accedere alle proprietà ed attributi del datasource anche lato client ossia tramite javascript.
$('ds1').DSresult[row][fieldname] // array bidimensionale contenente i dati
$('ds1').DSchange // indica se i campi del DS sono stati modificati dall'utente flag(true|false)
$('ds1').DSMultipos // Multi selezione di record(esempio nella gridds quando clicco sui più record tenendo premuto SHIFT)
$('ds1').DSpos // posizione cursore di record
$('ds1').DSsearch // Permette di impostare un filtro
$('ds1').DSpre // Posizione cursore record prededente
$('ds1').DSrow // Numero totale di righe(comprese anche quelle non restituite perchè impostato il dslimit)
$('ds1').DSlimit // Equivale all'attributo dslimit impostato nel XML(se non modificato dinamicamente)
$('ds1').DSstart // Posizione primo record
$('ds1').DSend // Posizione dell'ultimo record
$('ds1').p.DSaction // Pagina di destinazione della richiesta
$('ds1').p.DSengine // Tipo di engine(es. mysql, xml, ldap, ecc)
$('ds1').p.DSkey // Nome campo chiave
$('ds1').p.DSorder // Nome campo/i per l'ordinamento
$('ds1').p.DSreferences // Nome del ds padre
$('ds1').p.DSreferenceskey // Nome del campo del ds padre relazionato con ds corrente
$('ds1').p.DSforeignkey // Nome del campo del ds corrente relazionato con ds padre
$('ds1').p.DSsavetype // moldalità di salvataggio row, table, live
$('ds1').p.typeObj // tipo di oggetto ds
Per storizzazione del DS si intende il salvataggio del nome della chiave e del suo valore nella sessione. La storizzazione è una tecnica valida solo per i datasource relazionali.
Per effettuare la storizzazione bisogna chiamare la funzione in javascript:
var post = 'data=store&dsobjname=ds1&keyname=key&keyvalue=1;
AJAX.request('POST', 'selezione.php', post, true, true);
E' possibile storizzare i dati direttamente dal php:
<?php
$_SESSION["store"]['ds1']['keyname'] = "key";
$_SESSION["store"]['ds1']['keyvalue'] = "1";
?>
Una volta storizzati i valori è possibile utilizzare i dati nelle altre pagine, impostando la proprietà "store".
Se in un DS viene settata la proprietà store="ds1", il DS andra a recuperare i valori storizzati con il nome "ds1" e gli userà per filtrare i propri risultati.
Dal php è possibile specificare l'operatore di uguaglianza usato per filtrare i dati.
<?php
$_SESSION["store"]['ds1']['condition'] = ">";
?>
Questa procedure è utile,per esempio, per memorizzare il tipo di menù da visualizzare, oppure per memorizzare una scelta.
Dal php è possibile storizzare anche array:
<?php
$_SESSION["store"]['ds1']['keyname'] = array("key1", "key2");
$_SESSION["store"]['ds1']['keyvalue'] = array("1", "2");
?>
In questo caso verrà impostato il filtro per entrambi i valori.
›› REFERENCE XML - DS
Oggetto: DS
<nome typeobj="ds" attribute="valore".../>
Attributi:
id
Nome univoco dell'oggetto.
Valori di default: ds
debug
Attiva il debug dell'oggetto.
Valori consentiti: true,false
Valori di default: false
out
Formato di rilascio dati
Valori consentiti: json,xml.
Valori di default: json
focusnew
ID del primo campo su cui posizionari durante l'inserimento.
E' possibile specificare un campo variabile di posizione.
Per esempio è possibile posizionarsi su un nuovo campo della tabella scrivendo: 'gridds_1_$' in cui '$' è il tag di posizione e '1' il numero della colonna.
dshost
Nome dell'host a cui ci si connette.
dsport
Numero della porta dell'host.
dsuser
Nome utente per la connessione all'host.
dspwd
Password per la connessione all'host.
conn
Vedi Connessioni
Nome della connessione configurata.
store
ID del datasource storizzato.
event
Disattiva gli eventi dell'oggetto.
Valori consentiti: none,null
xml
Codice xml da restituire come dati.
encpwd
Codifica della password utilizzata per il modulo di login.
Valori consentiti: blank,md5
printxml
Restituisce l'xml dei dati.
Valori consentiti: true,false
Valori di default: true
loadall
Carica i dati al primo caricamento della pagina html.
Valori consentiti: true,false
Valori di default: true
readonly
Oggetto in sola lettura.
Valori consentiti: true,false
confirm
Visualizza il messaggio di conferma per il salvataggio per la modalità table e row.
Valori consentiti: true,false
Valori di default: false
selecteditems
Campi da selezionare nella query (Usa come separatore la virgola es: item1,item2).
dsdefault
Nome dello schema selezionato di default.
dstable
Nome della tabella/e utilizzata/e (Usa come separatore la virgola es: tab1,tab2).
dsorder
Campo utilizzato per l'ordinamento dei dati.
dswhere
Filtro di selezione.
dskey
Chiave usata dalla tabella.
dssavetype
Tipo di salvataggio:
- table, salva tutti i dati della tabella.
- row, salva solo il record corrente.
- live, salva automaticamente i dati ad ogni modifica di un campo del datasource.
Valori consentiti: table,row,live
Valori di default: row
join
Nome della tabella collegata.
joinsave
Nome della tabella in cui salvare i dati ottenuti da un join.
Se impostato a 'join' salverà i dati nella tabella specificata nel campo join.
Valori di default: join
jointype
Tipo di collegamento.
joinrule
Legame tra le tabelle.
dsrefresh
Id dei datasource in cui eseguire il refresh (Usa come separatore la virgola).
dsreferences
Id dei datasource con cui vi è un legame (Chiavi esterne - Usa come separatore la virgola).
referencestable
Da utilizzare in caso di riferimenti multipli.
Consente di specificare il nome delle tabelle a cui si fa riferimento (USa come separatore la virgola).
referenceskey
Nome della chiave esterna (campo del datasource specificato in 'dsreferences').
foreignkey
Chiave interna legata alla 'referenceskey'
deleteoncascate
Elimina in cascata i dati legati al datasource a cui si fa rifeimento.
Valori consentiti: true,false
Valori di default: false
deleteall
Elimina tutti i record del datasource
Valori consentiti: true,false
Valori di default: false
dsengine
Tipo datasource da utilizzare.
Valori consentiti: filesystem,ldap,record,xml,ssh,mysql
dsquery_select
Specifica manualmente la query di selezione.
dsquery_insert
Specifica manualmente la query di inserimento.
dsquery_update
Specifica manualmente la query di aggiornamento.
dsquery_delete
Specifica manualmente la query di eliminazione.
dsquery_deleteall
Specifica manualmente la query di eliminazione di tutti i dati.
dsextraquery
Codice da eseguire con la query di selezione automatica (Per esempio: GROUP BY ('campo')
dslimit
Limita il risultato della query.
action
Pagina da richiamare per il caricamento dei dati.
Valori di default: /jamp/doc/makereference.php
fetch
Formato dei dati restituiti.
Valori consentiti: object,row,assoc,array
Valori di default: object
sslmode
Modalità SSL.
Valori consentiti: disable,allow,prefer,require
dsparentkey
Campo che contiene il valore della chiave del padre.
dsname
Nome del campo nodo.
alias
Alias del nodo root.
base
Path della root.
select
Path iniziale.
filter
Filtro di selezione.
justthese
Nome dei campi da restituire.
scope
Modalità di restituzione dei dati.
- base, restituisce solo il nodo selezionato.
-onelevel, restituisce tutti i figli del nodo padre.
- tree, restituisce tutta la gerarchia.
Valori consentiti: base,onelevel,tree.
recname
Nome del campo record assegnato.
reclength
Dimensione del campo record assegnato.
privkeyfile
File contenente la chiave privata SSH.
pubkeyfile
File contenente la chiave pubblica SSH.
fieldname
Nome dei campi (csv)
fieldseparator
Carattere separatore (cvs)
fieldencloser
Carattere delimitazione del campo (cvs)
fieldescape
Carattere di escape
prefix
Imposta il prefisso internazionale, di default: +39
verbose
Restituisce maggiori dettagli sulla transazione.
Valori consentiti: 1,0
Valori di default: 1
gateway
Imposta il Gataway da utilizzare.
carriergateways
Imposta il carrier da utilizzare.
answerrecipients
Indirizzo per la risposta,
format
Vedi Formattazione
Style di formattazione.
java
Nome del/dei file javascript usati dall'oggetto.
Valori di default: ds.js
›› Elenco dei metodi Javascript intercettabili dall'utente:
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","movePrev", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","moveNext", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","moveFirst", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","moveLast", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","movePrevPage", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","moveNextPage", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","moveRow", "User function"); Function parameters: function(dsObjName,row)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","reload", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dropObj", "User function"); Function parameters: function(dsObj)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","refreshObj", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","setFocusNew", "User function"); Function parameters: function(dsObj)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dsnew", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dscancel", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dsdelete", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dsdeleteall", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dssave", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dsUpdate", "User function"); Function parameters: function(id)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dsInsert", "User function"); Function parameters: function(id,inslast)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dschange", "User function"); Function parameters: function(obj)
Sintassi JS: SYSTEMEVENT.addBeforeCustomFunction("DS","dschangeNoLive", "User function"); Function parameters: function(obj)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","movePrev", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","moveNext", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","moveFirst", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","moveLast", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","movePrevPage", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","moveNextPage", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","moveRow", "User function"); Function parameters: function(dsObjName,row)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","reload", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dropObj", "User function"); Function parameters: function(dsObj)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","refreshObj", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","setFocusNew", "User function"); Function parameters: function(dsObj)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dsnew", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dscancel", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dsdelete", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dsdeleteall", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dssave", "User function"); Function parameters: function(dsObjName)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dsUpdate", "User function"); Function parameters: function(id)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dsInsert", "User function"); Function parameters: function(id,inslast)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dschange", "User function"); Function parameters: function(obj)
Sintassi JS: SYSTEMEVENT.addAfterCustomFunction("DS","dschangeNoLive", "User function"); Function parameters: function(obj)
›› Note fornite dagli utenti