jamp day 2010 - roma (3)

67
JAMP DAY 22 Maggio 2010 Relatori: Ruben Patanè Giampiero Ancilletta Università degli Studi di Roma "Tor Vergata"

Upload: jampslide

Post on 17-Jun-2015

476 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: JAMP DAY 2010 - ROMA (3)

JAMP DAY

22 Maggio 2010

Relatori:

Ruben Patanè

Giampiero Ancilletta

Università degli Studi di Roma "Tor Vergata"

Page 2: JAMP DAY 2010 - ROMA (3)

SCHEMA DI PROGETTAZIONE MVC

controller

View Model

JAMP implementa il pattern architetturale Model-View-Controller

Page 3: JAMP DAY 2010 - ROMA (3)

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)

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

PDF

XML

HTML

Compressione

Decompressione dati

Page 5: JAMP DAY 2010 - ROMA (3)

Gli Oggetti

OGGETTO

PHP JS CSS

HTML PDF

Page 6: JAMP DAY 2010 - ROMA (3)

I Form

FORM

CODICE(PHP)

LAYOUT(XML)

Page 7: JAMP DAY 2010 - ROMA (3)

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)

GLI EVENTI

Page 9: JAMP DAY 2010 - ROMA (3)

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)

Introduzione agli eventi

EVENTI DEL FRAMEWORK

PHP JAVASCRIPT DOM

Page 11: JAMP DAY 2010 - ROMA (3)

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)

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)

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)

Gli eventi PHP: esempio

Page 15: JAMP DAY 2010 - ROMA (3)

<?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)

Gli eventi PHP: esempioPrint del codice HTML

Eventohtml_after_load

Page 17: JAMP DAY 2010 - ROMA (3)

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)

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)

Gli eventi PHP: esempio, i dati vengono elaborati dal browser e caricati dagli oggetti

Page 20: JAMP DAY 2010 - ROMA (3)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

Gli eventi Javascript: esempio

Page 35: JAMP DAY 2010 - ROMA (3)

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)

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)

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)

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)

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)

Intercettare gli eventi DOM2 da Javascript

function myfunction(){    alert('hai fatto click!');}

SYSTEMEVENT->addEventListener($('text1'), “click”, “myfunction”);

Page 41: JAMP DAY 2010 - ROMA (3)

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)

Gli eventi DOM: CUSTOM

Page 43: JAMP DAY 2010 - ROMA (3)

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)

I DATASOURCE

Page 45: JAMP DAY 2010 - ROMA (3)

I Datasource

Text1

Text2

Combo1

ds1(oggetto DS)

MySQLMSSQL

PostGreSQLLdapODBCCSV

FilesystemFtp

IMAPRecord

SSHXml

Page 46: JAMP DAY 2010 - ROMA (3)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

CUSTOMIZZAZIONI

GliOggetti Le Lingue

Page 67: JAMP DAY 2010 - ROMA (3)

Gli Oggetti

OGGETTO

PHP JS CSS

HTML PDF