1. JAMP DAY 22 Maggio 2010 Relatori: Ruben Patanè Giampiero Ancilletta Università degli Studi di Roma "Tor Vergata"
2.
3.
4. CLASSIC AND AJAX WEB APPLICATION Permette uno scambio di dati in background fra web browser e server. AJAX permette un risparmio di tempo e banda
5. INVIARE UNA RICHIESTA TRAMITE UN FORM < idform typeobj=" form " action=“ mypage.php " method=“ post “> < idtag1 type =“ text ” value=“ param1 ” name=“ field1 ” /> < idtag2 type =“ hidden ” value=“ val ” name=“ hiddenfield ” /> ………………………… </ idform > < idtag type =“a” href=“mypage.php?field1=val1&field2=val2” text=“link” /> function html_load() { $_SESSION ['param1'] = $_POST ['param1']; $_SESSION ['param2'] = $_POST ['param2']; } < page type =“page” fowardrequest=“ true ” /> INVIARE UNA RICHIESTA TRAMITE UN URL LEGGERE I DATI
6.
7. GESTIONE DELLE TRANSAZIONI IN JAMP STANDARD REQUEST WEB BROWSER CUSTOM REQUEST STANDARD ACTION CUSTOM ACTION WEB SERVER HTTP request Response HTTP request Response
8.
9.
10.
11. RICHIESTA CUSTOM Richiesta di inserimento dati: params = 'data=myfunction¶m1=value1...¶mn=valuen'; AJAX.request( method , page, params , sync, returnxml); La stringa params contiene nel parametro data il nome della funzione da richiamare: In una richiesta custom il parametro data non può assumere valori di parole chiave riservate come: "loadall","load","update", "new","delete","deleteall", ecc. Richieste per le quali non è prevista un risposta da parte del framework. function myfunction() { global $event ; $code = “alert(‘OK’);”; $event - >returnRequest("", $code ); } RISPOSTA CUSTOM
12. INTERCETTARE UNA RICHIESTA PRIMA DELL'AZIONE DA PARTE DEL FRAMEWORK 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)); //$ds->setProperty("xml", $xml>dataXML($result)); return false; // interrompe l'esecuzione del codice } }
13. INTERCETTARE UNA RICHIESTA DOPO AZIONE DA PARTE DEL FRAMEWORK function data_select_after( $ds ) { global $xml ; if ( $ds ->getPropertyName("id") == " ds1 ") { $i =0; $result = array(); while( $ds ->ds->dsGetRow()) { $result[ $i ][' field1 '] = $ds ->ds->property[" row "]->field1; if ( $result [ $i++ ][' field1 ']==" value1 ") $result[ $i ][' field2 '] = " YES "; else $result [ $i++ ][' field2 '] = " NO "; } $ds ->setProperty("xml", $xml ->dataJSON( $result )); } }
14. RICHIESTA DI REWRITE OBJECT Sorgente XML: <select1 typeobj="dsselect" label="Select:" /> <dsbutton typeobj="button" value="REWRITE OBJ" onclick="AJAX.rewriteObj('select1', 'page.php')" /> Sorgente PHP: function data_select_after( $select ) { $select ->setProperty("optiontext", array("new1", "new2")); $select ->setProperty("optionvalue", array("newval1", "newval2")); } Permette di sostituire un oggetto già presente nella pagina.
15. RISPOSTA DA PARTE DEL SERVER <? xml version="1.0" encoding="utf-8"> < data > < html id="dsselect1"> <![ CDATA [ < div style="display:inline;" id="dsselect1_container"> < label >Select:</ label > < select onchange="DSSELECT.change(this); " id="dsselect1"> < option value="newval1">new1</ option > </ select > </ div > ]]> </ html > < script > <![ CDATA [ $ (' ds2 ').DSresult = [ { ID :"1", DENOMINAZIONE_COMUNE :"AGRIGENTO", CAB :"16601"} AJAX .setDsJSON('ds1',0,1,8109,1);]]> </ script> < ds1 start="0" end="0" limit="0" tot="1" action="/jamp/frm/jamptree.php" order=""> < row > < id >jamp</ id > < nome >base</ nome > < cognome >false</ cognome > </ row > </ ds1 > </ data > <script> Tutto quello contenuto al suo interno viene eseguito tramite eval <html> Per sostituire un oggetto, attualmente usato dalla funzione rewrite [DATA] Tutto il resto viene interpretato come dati e caricato nella struttura del tag corrispondente
16. LETTURA DEI DATI CONTENUTI IN UN DS $('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 tenendo premuto SHIFT in una gridds) $('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 $('ds1').DSlimit // Equivale all'attributo dslimit impostato nel XML $('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 // modalità di salvataggio row, table, live $('ds1').p.typeObj // tipo di oggetto ds < ds1 typeobj="ds" ..... />
17.
18. LA FORMATTAZIONE DEI DATI Tecnica con la quale un dato “grezzo” può essere presentato in maniera diversa fornendo sempre la stessa informazione 20100522 22/05/2010 05-22-2010 22 Maggio 2010 5-22-10
19.
20. FORMATTAZIONE DATE E ORA Sintassi: date |lingua|formato|lingua|formato < text typeobj=”text” format=” date |EN|yyyy-mm-dd|IT|dd/mm/yyyy” /> Formato input Formato ouput Dato originale Format Output 20100522 EN|yyyy|mm|dd|IT|dd/mm/yyyy 22/05/2010 20100522 EN|yyyy|mm|dd|IT|dd mmm yyyy 22 Maggio 2010 20100522 EN|yyyy|mm|dd|IT|mm-dd-yyyy 05-22-2010 20100522 EN|yyyy|mm|dd|IT|m-dd-yy 5-22-10
21. FORMATTAZIONE NUMERI Sintassi: number |lingua|formato|lingua|formato < text typeobj=”text” format=” number |EN|,0.00|IT|.0,00” /> Formato input Formato ouput Lingua: EN separatore delle migliaia(,) delle decine(.) IT separatore delle migliaia(.) delle decine(,) Dato originale Format Output 10,012.345.67890 EN|,00000|IT|0 10012346 10,012.345.67890 EN|,00000|IT|0,0 10012345,6 10,012.345.67890 EN|,00000|IT|0,00 10012345,67 10,012.345.67890 EN|,00000|IT|.0,000000 10.012.345,678900
22. FORMATTAZIONE STRINGHE Sintassi: string |[lower][upper][trim][!][@@@@] < text typeobj=”text” format=” string |upper” /> Formato ouput Lingua: lower: trasforma tutti i caratteri in minuscolo upper: trasforma tutti i caratteri in maiuscolo trim: elimina gli spazi alla sinistra e destra della stringa @: se lunghezza stringa < aggiunge degli spazi alla sua destra !: da usare con @ se lunghezza stringa < aggiunge degli spazi alla sua sinistra Dato originale Format Output Jamp string|lower jamp Jamp string|upper JAMP
23. INPUT CONTROLLATO JAMP prevede la validazione dei dati inseriti dagli utenti. VALIDAZIONE DIGIT VALIDAZIONE STRINGA VALIDAZIONE DATASOURCE
24. VALIDAZIONE SINGOLO DIGIT L'espressione regolare va specificata nell'attributo keypress. number // Solo caratteri numerici nonumber // Escluso caratteri numerici alphanumeric // Solo caratteri alphanumerici noalphanumeric // Escluso caratteri alphanumerici alphabetic // Solo caratteri alfabetici loweralphabetic // Solo caratteri alfabetici minuscoli upperalphabetic // Solo caratteri alfabetici maiuscoli decimal // Solo caratteri decimali permission // Numerico da 0-7 < id typeobj="text" maxlength=” 10 ” /> < id typeobj="text" keypress=" [a-dA-P] " /> Espressioni regolari predefinite: < id typeobj="text" keypress=" number " /> Lunghezza massima:
25. VALIDAZIONE STRINGA Attributo da utilizzare blur nel quale specificare l'espressione regolare. number // Solo caratteri numerici decimal // Solo caratteri decimali ip // Indirizzo IP email // Indirizzo e-mail cf // Codice fiscale piva // P.Iva permission // Permission < id typeobj="text" blur=" email " /> < id typeobj="text" blur=" ^[0-6]$ " /> Espressioni regolari predefinite: < id typeobj="text" minlength=” 3 ” /> Lunghezza minima:
26. VALIDAZIONE DATASOURCE $DS_VALIDATE_RULE [" idds "]= " Codice JS "; <?php $DS_VALIDATE_RULE ["ds3"]= " var dsObj = $('ds3'); var items = dsObj.DSresult[dsObj.DSpos]; if (items['votanti'] > 100) { alert('ATTENZIONE! Numero di voti non validi '); return false; } return true;”; ?>