Download - JAMP DAY 2010 - ROMA (3)
![Page 1: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/1.jpg)
JAMP DAY
22 Maggio 2010
Relatori:
Ruben Patanè
Giampiero Ancilletta
Università degli Studi di Roma "Tor Vergata"
![Page 2: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/2.jpg)
SCHEMA DI PROGETTAZIONE MVC
controller
View Model
JAMP implementa il pattern architetturale Model-View-Controller
![Page 3: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/3.jpg)
L'architettura del Framework
PLUGINApplicazioni
Esterne
DATA SOURCEClassi PHP
OGGETTIClassi PHPClassi JS
TEMPLATEFile CSSImmagini
ApplicazioniCodice PHPLayout XML
COREClassi PHPClassi JS
![Page 4: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/4.jpg)
Schema a blocchi del CORE
Gestione sorgenti XML
Gestione Oggetti
Gestione degli errori/eventi
Gestione della Lingua
Gestione Dati
Upload / Download
DatasourceFormattazione
dati
Gestione
Sistema
Gestione
Output
JSON
XML
HTML
Compressione
Decompressione dati
![Page 5: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/5.jpg)
Gli Oggetti
OGGETTO
PHP JS CSS
HTML PDF
![Page 6: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/6.jpg)
I Form
FORM
CODICE(PHP)
LAYOUT(XML)
![Page 7: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/7.jpg)
I Form
<?php require_once("./../../class/system.class.php"); $system = new ClsSystem(true); $xml = new ClsXML("form1.xml"); $event = new ClsEvent($xml); $event->managerRequest(); ?>
<?xml version="1.0" encoding="utf-8"><jamp>
<page typeobj="page" loaddata="true">........</page>
</jamp>
FORM
form1.php
form1.xml
![Page 8: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/8.jpg)
GLI EVENTI
![Page 9: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/9.jpg)
Introduzione agli eventi
JAMP utilizza il paradigma della programmazione ad eventi.
Il flusso del programma è quindi largamente determinato dal verificarsi di eventi esterni.
Gli eventi si possono classificare in:- Eventi server-side: eventi PHP normalmente
generati dal framework- Eventi client-side: eventi javascript normalmente
generati dall'azione dell'utente.
![Page 10: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/10.jpg)
Introduzione agli eventi
EVENTI DEL FRAMEWORK
PHP JAVASCRIPT DOM
![Page 11: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/11.jpg)
Gli eventi PHPGli eventi PHP entrano in gioco durante il caricamento della pagina. Sono eventi definiti dal framework e vengono generati in un determinato ordine a seconda della richiesta effettuata.
Per intercettare un evento PHP basta scrivere nel file PHP la funzione con il nome dell'evento desiderato es:
function html_before_load(){...}
![Page 12: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/12.jpg)
PROCESSO DI CREAZIONE DI UNA PAGINAFASE 1: creazione dell pagina
LETTURA E CARICAMENTO DEL LAYOUT XML
GENERAZIONE OUTPUT
INIZIALIZZAZIONE DEL FRAMEWORK
LETTURA DATI LATO CLIENT
POPOLAZIONE OGGETTI
RICHIESTA AJAX DEL FRAMEWORK PER
IL RECUPERO DEI DATI
FASE 2: caricamento dati
![Page 13: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/13.jpg)
LETTURA E CARICAMENTO DEL LAYOUT XML
GENERAZIONE OUTPUT
html_before_load
html_load
html_after_load
INIZIALIZZAZIONE DEL FRAMEWORK
Gli eventi PHP: Caricamento della pagina
![Page 14: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/14.jpg)
Gli eventi PHP: esempio
![Page 15: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/15.jpg)
<?phprequire_once("./../../class/system.class.php");$system = new ClsSystem(true);$xml = new ClsXML("result.xml");$event = new ClsEvent($xml);$event->managerRequest();
function data_select_after($ds) { global $xml; $i=0; $result = array(); while($ds->ds->dsGetRow()) { $result[$i]['DENOMINAZIONE_COMUNE'] = "+++".$ds->ds->property["row"]->DENOMINAZIONE_COMUNE."+++"; $result[$i++]['CAB'] = "---".$ds->ds->property["row"]->CAB."---"; } $out = $xml->dataXML($result); $ds->setProperty("xml", $out);}?>
Gli eventi PHP: esempioRichiesta WEB
Caricamento classeSystem
Lettura del sorgenteXML
Eventohtml_before_load
Caricamento di tutti gli oggetti dal file xml
Eventohtml_load
![Page 16: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/16.jpg)
Gli eventi PHP: esempioPrint del codice HTML
Eventohtml_after_load
![Page 17: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/17.jpg)
Gli eventi PHP: esempio, richiesta dati
Carica gli oggetti ds
data_after_loadall()
data_before_loadall()
data_loadall()
data_after()
GET:form1.php?data=loadall
data_before()
data()
PRINT XML/JSON
return = null o true
return = null o true
![Page 18: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/18.jpg)
Gli eventi PHP: esempio,
restituzione dati
PrintXML
Eventodata_select_before
return?false
true
Query di Selezione
Eventodata_select_after
FINEDS
seguente
true
false
return?false
true
GenerazioneXML/JSON
Out XML/JSON
![Page 19: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/19.jpg)
Gli eventi PHP: esempio, i dati vengono elaborati dal browser e caricati dagli oggetti
![Page 20: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/20.jpg)
Gli eventi PHP disponibiliEVENTI PHP
HTML DATA CUSTOM
Gli eventi si differenziano dal tipo di richiesta effettuata.
- Gli eventi HTML sono quelle funzioni che restituiscono codice HTML o PDF. - Gli eventi DATA sono quelle funzioni che manipolano i dati e restituiscono codice XML/XML+JSON. - Gli eventi CUSTOM sono quelle funzioni dichiarate dall'utente.
![Page 21: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/21.jpg)
Gli eventi PHP disponibili: HTML
GET:form.php
html_before_load()
Creazione oggetti
html_load()
Print codice HTML
html_after_load()
GET:form.php?objname=xxx
html_before_rewrite()
Creazione oggetto xxx
html_rewrite(obj)
Print codice HTML
END
html_after_rewrite()
![Page 22: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/22.jpg)
Gli eventi PHP disponibili: DATA
Carica gli oggetti ds
data_after_loadall()
data_before_loadall()
data_loadall()
data_after()
GET:form.php?data=loadall
data_before()
data()
END
return = null o true
return = null o true
![Page 23: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/23.jpg)
Gli eventi PHP disponibili: DATA
Carica gli oggetti ds
data_after_load()
data_before_load()
data_load()
data_after()
GET:form.php?data=load
data_before()
data()
END
return = null o true
return = null o true
![Page 24: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/24.jpg)
Gli eventi PHP disponibili: DATA
Carica gli oggetti ds
data_after_new(obj)
data_before_new()
data_new(obj)
data_last_multirequest()
GET:form.php?data=new&...
data_before()
data()
END
data_after()
return = null o true
return = null o true
![Page 25: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/25.jpg)
Gli eventi PHP disponibili: DATA data data_loadall data_load data_new data_update data_delete data_deleteall data_login data_changepasswd data_store data_keepalive data_last_multirequest data_select
![Page 26: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/26.jpg)
Gli eventi PHP disponibili: CUSTOMGli eventi custom sono delle richieste data non definite dal framework. Il nome dell'evento viene indicato dall'utente nel POST es: data=myfunction l'evento si chiamerà myfunction.
<?php function myfunction() { ...} ?>
![Page 27: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/27.jpg)
Uso degli eventi PHP
MODIFICARE OGGETTI
function html_load() { global $xml; $label1 = $xml->getObjById("label1"); $label1->setProperty("value", "Etichetta"); }
![Page 28: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/28.jpg)
Uso degli eventi PHP
MODIFICARE DATASOURCE
function data_select_before($ds) { if ($ds->getPropertyName("id")=="ds1") $ds->setProperty("dswhere", "`id` = 5"); }
![Page 29: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/29.jpg)
Uso degli eventi PHPAGGIUNGERE OGGETTI
function html_load() { global $xml; $text1 = $xml->pageObj->addChild("text1", "text"); }
function html_load() { global $xml; $parent = $xml->getObjById("div1"); $parent->addChild("text1", "text"); $parent->insertBefore("text2", "text", "text1"); $parent->insertAfter("text3", "text", "text2"); $parent->removeChild("text2"); }
![Page 30: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/30.jpg)
Gli eventi JavascriptVengono identificato come eventi Javascripttutti i metodi delle classe Javascript usate nelframework.
addBeforeCustomFunctionEsegue la funzione dell'utente prima del metodo della classe JAMP. In questo caso è possibile impedire l'esecuzione del metodo della classe JAMP facendo restituire "return false" alla funzione dell'utente.
addAfterCustomFunctionEsegue la funzione dell'utente dopo il metodo della classe JAMP.
![Page 31: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/31.jpg)
Gli eventi JavascriptSYSTEMEVENT.addBeforeCustomFunction('class', 'function', 'myfunction');.addAfterCustomFunction('class', 'function', 'myfunction');
Classe JAVASCRIPTaddBeforeCustomFunction
myFunction(param1,param2)
metodo2(parm1)
Classe JAVASCRIPT
metodo1(parm1,parm2)
metodo1(parm1,parm2)
Classe JAVASCRIPTaddAfterCustomFunction
metodo1(parm1,parm2)
myFunction(param1,param2)
![Page 32: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/32.jpg)
Gli eventi Javascript: esempio<?xml version="1.0" encoding="utf-8"?><jamp> <page typeobj="page" title="JAMP - Esempio per la gestionedegli eventi della dsselect" icon="../../favicon.ico"> <dsselect1 typeobj="dsselect" label="\nSelect:"> <options> <opt optiontext="Samba" optionvalue="1"/> <opt optiontext="web" optionvalue="2"/> <opt optiontext="Contatti" optionvalue="3"optionselected="true"/> <opt optiontext="KPaint" optionvalue="4"/> <opt optiontext="KPilot" optionvalue="5"/> <opt optiontext="KWallet" optionvalue="6"/> <opt optiontext="KWrite" optionvalue="7"/> <opt optiontext="lassists" optionvalue="8"/> <opt optiontext="launch" optionvalue="9"/> <opt optiontext="mac" optionvalue="10"/> </options> </dsselect1> </page></jamp>
![Page 33: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/33.jpg)
Gli eventi Javascript: esempio<?phprequire_once("./../../class/system.class.php");$system = new ClsSystem(true);$xml = new ClsXML("dsselect.xml");$event = new ClsEvent($xml);$event->managerRequest();
function html_load(){ global $event; $code = " function custom_fnz(obj) { alert('Valore: ' + obj.value); } SYSTEMEVENT.addAfterCustomFunction('DSSELECT', 'change', 'custom_fnz'); "; $event->setCodeJs($code);}?>
![Page 34: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/34.jpg)
Gli eventi Javascript: esempio
![Page 35: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/35.jpg)
Gli eventi DOMCon JAMP è possibile gestire gli eventi del Browser DOM2 tramite il PHP o Javascript indipendentemente dal Browser utilizzato. E' possibile creare degli eventi custom scaturiti da un evento DOM o da una chiamata diretta della funzione Javascript. Gli eventi custom vengono utilizzati da JAMP soprattutto per aggiornare gli oggetti legati al datasource.
EVENTI DOM
BASE CUSTOM
![Page 36: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/36.jpg)
Gli eventi DOM: BASESono tutti gli eventi definiti dal DOM2: http://www.w3.org/TR/DOM-Level-2-Events/
abortblurchangeclickerrorfocusloadmousedownmousemove
mouseoutmouseovermouseupresetresizescrollselectsubmitunload
![Page 37: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/37.jpg)
Intercettare gli eventi DOM2 da PHPIl metodo addEventListener è implementato in ogni oggetto del framework.
$obj->addEventListener($id, $event, $function, $run = false, $param = null
);
![Page 38: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/38.jpg)
Intercettare gli eventi DOM2 da PHP
$gridds->addEventListener("gridds1_body", "keydown", "function(event) { gridds.keyDown('$id', event); }
");
$gridds->addEventListener("gridds1_body", "keyup", "function(event) { gridds.keyUp('$id', event); }
"); $gridds->addEventListener(
"gridds1_body", "click", "function() { gridds.setFocus('$id'); }
");
![Page 39: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/39.jpg)
Intercettare gli eventi DOM2 da JavascriptLa gestione degli eventi JAVASCRIPT sono affidati alla classe SYSTEMEVENT.I metodi sono analoghi a quelli PHP. Per inserire un evento in ascolto la sintassi è:
SYSTEMEVENT->addEventListener(obj, eventname, fnz);
![Page 40: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/40.jpg)
Intercettare gli eventi DOM2 da Javascript
function myfunction(){ alert('hai fatto click!');}
SYSTEMEVENT->addEventListener($('text1'), “click”, “myfunction”);
![Page 41: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/41.jpg)
Gli eventi DOM: CUSTOM (solo PHP)Oltre ad intercettare gli eventi da PHP è possibile creare dei veri e propri eventi personalizzati da richiamare allo scaturire di un determinato evento o chiamando semplicemente la funzione javascript.
addEventBefore($id, $function, $call)addEvent($id, $function, $call)addEventAfter($id, $function, $call)
Function
Listener
Event Before
Event
Event After
![Page 42: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/42.jpg)
Gli eventi DOM: CUSTOM
![Page 43: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/43.jpg)
Gli eventi DOM: CUSTOMfunction html_load() { global $xml; $code = ' function () { alert('OK'); } '; $xml->pageObj->addEventListener("text1", "change", $code); }
function html_load() { global $xml; $xml->pageObj->addEventListener("window", "unload", "pageUnload"); $xml->pageObj->addEvent("page", "pageUnload", "alert("ok");");}
![Page 44: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/44.jpg)
I DATASOURCE
![Page 45: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/45.jpg)
I Datasource
Text1
Text2
Combo1
ds1(oggetto DS)
MySQLMSSQL
PostGreSQLLdapODBCCSV
FilesystemFtp
IMAPRecord
SSHXml
![Page 46: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/46.jpg)
I Datasource
ds1(oggetto DS)
Richiesta
<?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>
datasource
![Page 47: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/47.jpg)
I Datasource: Uso dei DSPer utilizzare i datasource all'interno della propia pagina bisogna utilizzare l'oggetto DS:
<idtag typeobj="ds" conn="conn6" dsdefault="jamp" dstable="partite" dskey="id" />
Modalità di salvataggio:table: salva tutti i dati della tabella.row: salva solo il record corrente.live: salva automaticamente i dati ad ogni cambiamento del record.
![Page 48: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/48.jpg)
I Datasource: Uso dei DSLegare un oggetto ad un datasource:
<idtag typeobj="label" label="\nLabel:" dsobj="dsname" dsitem="fieldname" />
idtag dsname
![Page 49: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/49.jpg)
I Datasource: Accesso al DS lato serverfunction 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)); //$ds->setProperty("xml", $xml->dataXML($result)); return false; // interrompe l'esecuzione del codice } }
![Page 50: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/50.jpg)
I Datasource: Accesso al DS lato serverfunction 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->dataXML($result); $ds->setProperty("xml", $out); }
![Page 51: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/51.jpg)
I Datasource: RelazionaliPer datasource relazionale si intende la famiglia dei ds progettata per interfacciarsi a strutture dati di tipo relazionale, principalmente database relazionali.
L'esigenze che si possono avere nell'effettuare delle richieste verso un database sono divese, per tale motivo il tag ds contiene più attributi dedicati alla loro gestione
![Page 52: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/52.jpg)
I Datasource: Relazionali
Connessione a una tabella del database:<ds1 typeobj="ds" conn="nomeconnessione" dsdefault="nomedatabase" dstable="nometabella" dskey="chiavetabella" />
Selezionare i campi di una tabella:<ds1 typeobj="ds" conn="nomeconnessione" dsdefault="nomedatabase" dstable="nometabella" dskey="chiavetabella" selecteditems="campo1,campo2" dswhere="campo1=5" dsorder="campo2" dslimit="50" />
![Page 53: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/53.jpg)
I Datasource: Relazionali, JOIN
Tabella1key1item1
key1, item1,key2, id1,
item2
<ds1 typeobj="ds" conn="nomeconnessione" dsdefault="nomedatabase" dstable="tabella1" join="tabella2" jointype="left" dskey="key" joinrule="(tabella1.key=tabella2.id1)/>
Equivalente:
<ds1 typeobj="ds" conn="nomeconnessione" dsdefault="nomedatabase" dstable="tabella1,tabella2" dskey="key" dswhere="(tabella1.key=tabella2.id1)/>
Tabella2key2id1
item2
SELECT * FROM `tabella1` LEFT JOIN `tabella2`ON (`tabella1`.`key` = `tabella2`.`id1`)
SELECT * FROM `tabella1`,`tabella2`WHERE `tabella1`.`key` = `tabella2`.`id1`
![Page 54: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/54.jpg)
I Datasource: Relazionali, chiavi esterne
Tabella1key1item1
Tabella2id1
item2
Tabella3id1
item3
<ds1 typeobj="ds" conn="connessione" dsdefault="database" dstable="tabella1" dskey="key1" dsrefresh="ds2,ds3" dslimit="10"/><ds2 typeobj="ds" conn="connesione" dsdefault="database" dstable="tabella2" dskey="key2" dsreferences="ds1" referenceskey="key1" foreignkey="id1"/><ds3 typeobj="ds" conn="connesione" dsdefault="database" dstable="tabella3" dskey="key3" dsreferences="ds1" referenceskey="key1" foreignkey="id1"/>
SELECT * FROM `tabella1`;SELECT * FROM `tabella2` WHERE `id1`= “key1”;SELECT * FROM `tabella3` WHERE `id1`= “key1”;
![Page 55: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/55.jpg)
I Datasource: Relazionali, chiavi esterne
Tabella1key1item1
Tabella2key2id1
item2
Tabella3id2
item3
<ds1 typeobj="ds" conn="connessione" dsdefault="database" dstable="tabella1" dskey="key1" dsrefresh="ds2" dslimit="10"/>
<ds2 typeobj="ds" conn="connesione" dsdefault="database" dstable="tabella2" dskey="key2" dsreferences="ds1" referenceskey="key1" foreignkey="id1" dsrefresh="ds3"/>
<ds3 typeobj="ds" conn="connesione" dsdefault="database" dstable="tabella3" dskey="key3" dsreferences="ds2" referenceskey="key2" foreignkey="id2"/>
SELECT * FROM `tabella1`;
SELECT * FROM `tabella2` WHERE `id1`= “key1”;
SELECT * FROM `tabella3` WHERE `id2`= “key2”;
![Page 56: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/56.jpg)
I Datasource: Relazionali, chiavi esterne
Tabella1key1item1 Tabella2
key2id1
item2
Tabella3id1id2
item3
<ds1 typeobj="ds" conn="connessione" dsdefault="database" dstable="tabella1" dskey="key1" dsrefresh="ds2,ds3" dslimit="10"/><ds2 typeobj="ds" conn="connesione" dsdefault="database" dstable="tabella2" dskey="key2" dsreferences="ds1" referenceskey="key1" foreignkey="id1" dsrefresh="ds3"/><ds3 typeobj="ds" conn="connesione" dsdefault="database" dstable="tabella3" dskey="key3" dsreferences="ds1,ds2" referenceskey="key1,key2" foreignkey="id1,id2"/>
SELECT * FROM `tabella1`;
SELECT * FROM `tabella2` WHERE `id1`= “key1”;
SELECT * FROM `tabella3` WHERE `id1`= “key1” and `id2`= “key2” ;
![Page 57: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/57.jpg)
I Datasource: Relazionali, alias
/** ************************************************ **/ /** ALIAS DS **/ /** ************************************************ **/ $DS_ALIAS_ITEM["sezioni"]["uno_tot"] = "(uno_m + uno_f)"; $DS_ALIAS_ITEM["sezioni"]["uno_per"] = "CONCAT(ROUND((uno_m + uno_f) * 100 / (maschi + femmine),2), '%')"; $DS_ALIAS_ITEM["sezioni"]["due_tot"] = "(due_m + due_f)"; $DS_ALIAS_ITEM["sezioni"]["due_per"] = "CONCAT(ROUND((due_m + due_f) * 100 / (maschi + femmine),2), '%')"; $DS_ALIAS_ITEM["sezioni"]["tre_tot"] = "(tre_m + tre_f)"; $DS_ALIAS_ITEM["abitanti"]["*"] = "`nome`,`cognome`"; /** ************************************************ **/ $event->managerRequest();
![Page 58: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/58.jpg)
I Datasource: GerarchiciPer datasource gerarchici si intende la famiglia dei ds progettata per interfacciarsi a strutture dati nidificate come filesystem, file xml, ldap.
base: percorso da cui iniziare la ricerca scope: profondità di ricerca a partire dal valore specificato nell'attributo base filter: filtro per ottenere un sottoinsieme dei risultati. justthese: restituisce solo i campi specificati. alias: il nome da dare al nodo root, se non specificato gli verrà assegnato quando definito nell'attributo base
![Page 59: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/59.jpg)
I Datasource: GerarchiciSintassi:
<idtag typeobj="ds" conn="conn4" scope="onelevel" dskey="key" base="/jamp/data" dslimit="10"/>
Accesso a più rami:
<idtag typeobj="ds" conn="conn4" dsname="filename"><hierarchy> <root1 base="/jamp/data/class" alias="Classi" scope="base"/> <root2 base="/jamp/data/obj" alias="Oggetti" scope="base"/> </hierarchy> </idtag>
![Page 60: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/60.jpg)
I Datasource: Gerarchici, base Filesystem: come un normale path di un filesystem(es. /var/www in ambiente UNIX o c:\php in ambiente Windows)
File XML: si gestisce come se si trattasse del path di un filesystem UNIX, se ad esempio avessimo un file del tipo:<?xml version="1.0" encoding="utf-8"?><jamp> <azienda> <reparto attributo1="....." attributo2="....."> <commerciale attributo1="....." attributo2="......." /> <vendite attributo1="........" attributo2="......" /> <tecnico attributo1="........." attributo2="" /> </reparto> </azienda></jamp>per iniziare la ricerca dal nodo reparto bisognerebbe scrivere base="/azienda/reparto".
LDAP: Specificare il dn(esempio dn="ou=Groups,dc=jamp,dc=it")
![Page 61: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/61.jpg)
I Datasource: Gerarchici, scope
Con tale attributo si stabilisce il livello di profondità dell'interrogazione:
base: la ricerca restituirà solo il nodo selezionato onelevel: la ricerca restituirà tutti i nodi relativi al nodo selezionato tree: la ricerca restituirà il nodo con tutti i suoi nodi e sottonodi.
![Page 62: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/62.jpg)
I Datasource: Gerarchici, filter
Utilizzato per filtrare i risultati in base alla tipologia di ds gerarchico l'attributo filter accetta:
Filesystem: "nofiles"(esclude i files), "nodirectory"(esclude le directory) o un espressione regolare File XML: espessione regolare LDAP: sintassi completa clicca qui
![Page 63: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/63.jpg)
I Datasource: Gerarchici, justtheseE' possibile specificare nell'attributo justthese i soli campi che l'interrogazione dovrà restituire. In base alla tipologia di ds gerarchico l'attributo justthese accetta i seguenti valori(usare la , come separatore):
Filesystem dev, ino, mode,nlink, uid, gid, rdev, size, atime, mtime, ctime time of , blksize, blocks, md5
ftp perms, number, owner, group, size, datetime,md5
ssh perms, number, owner, group, size, datetime,md5
File XML: nome degli attributi da restituire LDAP: il nome degli attributi della entry(es. dn, uid, cn)
![Page 64: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/64.jpg)
I Datasource: Record
Il datasource di tipo record è in grado di interfacciarsi a file con campi a lunghezza fissa.
<idtag typeobj="ds" conn="dsname" dsname="filename"><record>
<field1 recname="campo1" reclength="lunghezza1" /><field2 recname="campo2" reclength="lunghezza2" />.........................................<fieldn recname="campon" reclength="lunghezzan" />
</record> </idtag>
recname: Nome del campo reclength: numero di caratteri format(opzionale): formattazione del valore.
![Page 65: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/65.jpg)
I Datasource: CSVIl datasource di tipo csv è in grado di interfacciarsi a file di tipo csv(comma-separated-value).
<idtag typeobj="ds" conn="dsname" dsname="filename"><record>
<field1 fieldname="campo1" fieldseparator="," /><field1 fieldname="campo1" fieldseparator="," />.........................................<fieldn fieldname="campo1" fieldseparator="," />
</record> </idtag>
fieldname: Nome del campo fieldseparator: separatore di campi fieldenclose: valore racchiuso da(opzionale esempio "valore") format(opzionale): formattazione del valore.
![Page 66: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/66.jpg)
CUSTOMIZZAZIONI
GliOggetti Le Lingue
![Page 67: JAMP DAY 2010 - ROMA (3)](https://reader035.vdocuments.net/reader035/viewer/2022062419/55810567d8b42a05558b4612/html5/thumbnails/67.jpg)
Gli Oggetti
OGGETTO
PHP JS CSS
HTML PDF