5. Dove eravamo rimasti?…Dday 2009
• Cosa sono le Xpages
• Modello MVC
• Componenti Fondametali (Core, Container,Custom)
• Variabili Scope (Session,Application, View, Request)
• Linguaggio di sviluppo SSJS
• Usale dalla R8.5.1
• XPiNC (XPages inside Notes Client)
Ulteriori informazioni a questo link :
http://www.dominopoint.it/Dominopoint/Dominopoint_blog.nsf/dx/slide-xpages-cosa-ci-sarà-in-questa-
nuova-tecnologia
6. Cosa sono le Xpages
• Un componente Aggiuntivo Designer
• Un Framework di sviluppo basato su
componenti
• Tecnologia JSF
• Sfruttano il backend Domino
• Una soluzione RAD di sviluppo Web
• Estensione HTTP Domino
• Nascono nella 8.5
8. Variabili Scope
Variabili contenitori suddivise in:
Application : durano per tutta l’applicazione
Session: durano per la sessione corrente
View: durano per la vista corrente ( pagina corrente)
Request: durano per l’ultima chiamata verso il server
Ulteriori informazioni a questo link :
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/xpages-scoped-variables.htm
9. Modello MVC
• E’ un concetto di programmazione
• Significa Model View Control
Model = Dati ( Form di Notes)
View = Come vengono rappresentati (Xpages)
Control= Logica applicativa ( SSJS, JS)
Separa il disegno applicativo dai dati e dalla
logica di programmazione
10. SSJS (server side javascript)
• E’ il linguaggio utilizzato lato server-side dalla
Xpages
• Racchiude oltre 90% delle formulas
• Semplice
• Javascript Like
• Performante
11. XPiNC (XPages inside Notes Client)
• Permette di eseguire le Xpages nel client
• Puoi scegliere nelle opzioni del database
• Dalla 8.5.1
• Sviluppi 1 volta per i due mondi (client e web)
• 8.5.1 = Firefox 2.x
• 8.5.2 = Firefox 3.X
• Supporta la replica e SSO utente
16. CkEditor sostituito al DojoRichText
…miglior gestione della TextArea, miglior formattazione possibilita’ di inserire immagini
embeddedate nel controllo richtext Web ( file Upload a breve?)
N.B. Possibilita’ di utilizzare il controllo Dojo precedente inserendo nel campo DojoType il valore
ibm.xsp.widget.layout.RichText od in alternativa cambiando il Thema
17. CkEditor sostituito al DojoRichText
…ovviamente accessibili dal client Notes e modificabili….
18. Cosa notiamo?
Possibilita’ dal client di aprire il documento in
formato Xpages per mantenere la corrispondenza 1:1
web client (XpiNC)…
19. Agents with In-Memory documents
Nuove modalità di lanciare un agente passandogli al Context anche un documento qualunque:
JavaScript (XPages) Agent.runWithDocumentContext(doc:NotesDocument) :
void
Agent.runWithDocumentContext(doc:NotesDocument,
noteID:string) : void
Java public void Agent.runWithDocumentContext(Document
doc)
public void Agent.runWithDocumentContext(Document
doc, String noteID)
LotusScript NotesAgent.RunWithDocumentContext(doc As
NotesDocument, noteID As String) As Integer
N.B. tramite la context classica è possibile accedere al contenuto del documento in memoria
caso LS Set doc = NotesSession.DocumentContext
caso Java public Document AgentContext.getDocumentContext()
20. Partial Update Timeout
Come posso allegare file più grandi di 1 Mega senza di che il sistema vada in
TimeOut in modo da abilitare reti lenti ad uploadare i File?
21. Partial Update Timeout
Come posso allegare file più grandi di 1 Mega senza di che il sistema vada in
TimeOut in modo da abilitare reti lenti ad uploadare i File?
N.B. Ulteriori dettagli a questo link: http://xpagesblog.com/xpages-blog/2010/6/24/calling-timeout-on-
large-file-uploads-in-xpages.html
22. Prevent filtering
Fornisce la possibilità di iniziare il Type-Ahead da un carattere qualsiasi e non
sempre dalla prima lettera inserita ( ma per esempio dal primo carattere della
seconda parola)
24. Extension API – the next generation
Permette di estendere le librerie dei componenti nelle Xpages creando
funzionalità aggiuntivie utili per per specifici utilizzi che possono essere integrate
nelle vostre applicazioni Xpages (essendo controlli aggiuntivi) con drag&drop:
Esempio: FileUpload migliorato, Grafici pronti all’uso etc…
La wiki spiega come creare nuovi controlli:
http://www-
10.lotus.com/ldd/ddwiki.nsf/dx/Master_Table_of_Contents_for_XPages_Extensibili
ty_APIs_Developer_Guide
N.B. Ulteriori dettagli a questo link:
http://www.qtzar.com/blogs/qtzar.nsf/Blog.xsp?entry=DSLH-8673BY
25. TagName
Permette di aggiungere Tag HTML di chiusura e apertura nei computed text in modo da
ottenere un codice HTML semanticamente corretto anche ai fini dei motori di ricerca
N.B. Ulteriori dettagli a questo link:
http://xpagesblog.com/xpages-blog/2010/8/25/an-easy-way-to-set-the-tag-of-computed-text-to-aid-in-
semant.html
26. ARIA Support
Le Xpages supportano l’ARIA per fare in modo che le nostre applicazioni siano
accessibili da persone con disabilità.
Maggiori informazioni sono disponibili a questo link:
http://www.w3.org/WAI/intro/aria.php
27. Public Access Support
Introdotta la feature like Domino per documenti pubblici( es. i commenti di un blog)
N.B. ulteriori informazioni a questo link:
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/XPages_Public_Access_Support
28. SCXD (Single copy Xpages Design)
È possibile memorizzare elementi di progettazione XPage in un database e
reindirizzare altri database li al momento dell'esecuzione. In questo modo, vengono
migliorate le prestazioni utilizzando un'ubicazione per la memorizzazione degli
oggetti e l'accesso del browser. Gli elementi di progettazione interessati sono le
XPage, i controlli personalizzati, le librerie JavaScript, i fogli di stile e i temi.
29. SessionAsSigner e sessionAsSignerWithFullAccess
Due nuovi Global Objects for Server Side JavaScript (SSJS):
•sessionAsSigner - Le credenziali di accesso sono referenziate al firmatario del Design
dell'Xpages.
La session è controllata dall'ACL dell'applicazione e dalla TAB di sicurezza del
documento server della Domino Directory del server.
•sessionAsSignerWithFullAccess -- Le credenziali di accesso sono referenziate al
firmatario del Design dell'Xpages. Ed il livello è alzato a full access administrator (
apposito TAB della Domino Directory server).
Il firmatario deve avere quindi diritti sufficienti oppure la variabile non verrà
inizializzata
30. Head Tag
Permette di inserire informazioni aggiuntive all’Header della pagina generata
N.B. Esempio di utilizzo per aggiungere Header per i blackberry:
http://www-10.lotus.com/ldd/heidloffblog.nsf/dx/quick-tip-prereq-to-run-xpages-on-blackberry
31. HTML 5 – cache manifest support
Permette di cachare off-line i dati per ottenere migliori performance :
Un esempio di utilizzo a questo URL
http://www.openntf.org/blogs/openntf.nsf/d6plinks/NHEF-85588X
Qui un’altra spiegazione:
http://dominoextnd.blogspot.com/2010/05/html-5-cache-manifest-and-
dynamic-data.html
HTML 5 - Base resource support
E’ l’url base href di partenza per tutti i collegamenti degli HREF
36. Multicategory View
Fornisce la possibilità di filtrare una vista per + di una categoria
N.B. Ulteriori dettagli a questo link:
http://xpagesblog.com/xpages-blog/2010/8/19/xpages-multi-level-category-filtering-categoryfilter-
enhance.html
37. XpiNC
•Eseguire agent locali
•Nuovo Tab per gestire le finestre di apertura
•Opzione di apertura in Designer
•Opzione di replica
•Supporto windows.close() funzione
38. OneUi v2
Thema v2… la documentazione su come utilizzarlo è presente a questa URL:
http://www-12.lotus.com/ldd/doc/oneuidoc/docpublic/index.htm
39. REST API ?
Introdotte le API REST nella 8.5.2 nelle Proprietà dell'applicazione - È stata aggiunta
un'impostazione alle Proprietà dell'applicazione di base che consente di abilitare le
operazioni dell'API Domino REST a un livello "per database".
42. Script Editor in Eclipse
Oltre agli agenti è stata convertita anche la Database Script Library ,
Script Library …cosa manca?
43. Icone a 24 Bit ( BMP,JPG,GIF,PNG)
La possibilità di arricchire la nostra workspace con icone a 24Bit!
…Ci sono voluti 10 anni ma l’hanno fatto! ( meglio tardi che mai)
45. Come accedere da JS client ai componenti?
Il motore JSF converte le id html dei componenti in formato particolare ( ciò
permette al motore XSP di referenziare univocamente l’accesso ai componenti web)
Ma se debbo accedere da JS client ad un componente come posso fare?
46. Come accedere da JS ai componenti?
Utilizzare la sintassi #{id:NOMECOMPONENTE}
Esempio:
var fileContainer=dojo.byId("#{id:fileContainer}");
if(null != fileContainer){
var displayStyle = fileContainer.style.display;
if (displayStyle == "none"){
fileContainer.style.display = "inline";
} else {
fileContainer.style.display = "none";
}
}
47. Come accedere da SSJS ai componenti?
Per accedere ai componenti lato server-side è possibile utilizzare due funzioni:
getComponent("foo"), and getClientId("foo").
getClientId() restituirà l’ID che verrà generato via Web da un particolare
componente
getComponent() restituisce l’oggetto con tutte le sue proprietà
Esempio Utilizzo:
se sono all’interno di codice JS client e voglio sfruttare funzioni SSJS basta
aggiungere la sintassi #{javascript:SSJS function o code}
Esempio:
dojo.byId('#{javascript:getClientId(“pannello1")}').
48. Lavorare con Partial e Full Refresh
Da client JS si può invocare il metodo:
XSP.partialRefreshPost(id);
Dove id può essere catturata con #{id:nameOfControl}“
XSP.partialRefreshGet(id);
Nel caso non debbono essere postati campi valorizzati
In cascata:
XSP.partialRefreshGet(id1, {
onComplete: function() {
XSP.partialRefreshGet(id2, {
onComplete: function() { XSP.partialRefreshGet(id3); } } } }
N.B. leggete anche questo post http://xpagesblog.com/xpages-blog/2010/3/25/reusable-javascript-class-to-
.
publish-global-and-element-spec.html
49. FileUpload Control – Attenzione!
Non supporta l’ajax refresh in quanto è necessario un IFRAME.
Per funzionare con il metodo nativo è necessario impostare un full refresh
oppure implementare una soluzione diversa ( flash, iframe virtuale) come controllo
dedicato
50. Dijit.Dialog
Abilitare Dijit.Dialog per avere questa feature è utile, ma attenzione in quanto nelle
Xpages sussiste un problema di funzionamento.
Il problema è causato dell’XSP ( la libreria JS che intercetta le azioni) non riesce ad
individurare la FORM corretta.
E’ necessario quindi adottare un work-around.
51. Workaround Dijit.Dialog
Per il corretto funzionamento è necessario creare sotto un DIV ed un pannello il contenuto della finestra di Dialogo ( o href).
<div id="picklistDialog" style="display:none"> <
xp:panel id="picklistDialogPanel"> ....
</xp:panel>
<div>
Va aggiunto un codice prima che venga caricata la pagina sfruttando la dojo.addonload() che è in grado di spostare l’elemento ID
del layer sotto il body
function dialog_create(id) {
var dialogWidget = dijit.byId(id);
if( dialogWidget ) dialogWidget.destroyRecursive(true);
dialogWidget = new dijit.Dialog( { }, dojo.byId(id)); var dialog = dojo.byId(id);
dialog.parentNode.removeChild(dialog);
var form = document.forms[0]; form.appendChild(dialog);
dialogWidget.startup();
}
N.B. info presa da qui post http://www.xpageswiki.com/web/youatnotes/wiki-
xpages.nsf/dx/How_to_create_a_picklist_style_dialog
53. Multilanguage come fare –sol 1?
D: Vorrei realizzare la mia applicazione Xpages in modalità multi-lingua come posso
fare?
R: Utilizzando le localization options
54. Multilanguage come fare –sol 1?
Una volta aggiunti i linguaggi supportati nelle proprietà del database della sezione
Xpages seleziona dal DDE"Project" menu, selziona Clean e poi "Clean all projects"
.Nella finestra di dialogo click OK.
Questo creerà un file di proprietà per ogni Xpages ed ogni custom control del
database
55. Multilanguage come fare –sol 1?
Tasto DX ed esporta file ..che potranno essere esportati e reimportati
N.B. info presa da qui post http://www-10.lotus.com/ldd/ddwiki.nsf/dx/UsingLocalizationOptions.htm
56. Multilanguage come fare – soluz 2?
D: Vorrei realizzare la mia applicazione Xpages in modalità multi-lingua come posso
fare?
R: Utilizzando le variabili CGI possiamo intercettare la lingua del browser e servire il
contenuto corretto alle nostre label/controlli
Questa metodologia è stata adottata nel nostro progetto catalogo delle soluzioni (
supporto in lingua inglese/italiano).
In modalità semplice ho creato una variabile di sessione contenente il codice lingua
del browser utilizzato ed in ogni controllo ho applicato una condizione
61. Grafici e Xpage dojo chart
Utilizzando il componente di Dojo per generare Chart ci viene fornita la possibilità
di creare un un grafico da inserire nella propria applicazione ai fini reportistici
N.B. live dei chart dojo a questo URL :
http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/charting/tests/theme_preview.html
62. Capire Dojo Chart – cosa serve?
• È necessario il modulo Dojo: dojox.charting.widget.Chart2D
• Un tema di colori e combinazioni
• Il tipo di Chart
• Una serie di Valori
• Metodo con il quale possono essere letti i valori ( tramite
DojoStore oppure tramite JSON)
Ulteriori informazioni a questo link :
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Dojox_Charting_for_XPages
63. Capire Dojo Chart – passo 1
Aggiungere il modulo Dojo dojox.charting.widget.Chart2D
e mettere dojoParseOnLoad and dojoTheme a true
64. Scegliere un Tema
E’ possibile scegliere un Tema a scelta forniti da Dojo oppure crearne uno nuovo in modalità
programmatica
Quelli di Dojo sono presenti a questo URL:
http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/charting/tests/theme_preview.html
l’ultima release (attualmente la 1.5)
N.B. Fate attenzione che Dojo nella 8.5.2 è la release 1.4.3 mentre online trovate sempre l’ultima release
di Dojo
66. Generare la serie di valori (es. PieChart)
Nel caso di un grafico Pie ( a Torta) la serie di valori (formato JSON) dovrà essere così composta:
var series1=[
{y: 357, text: “DDAY2007",legend: “Dominopoint Day 2007", tooltip: “evento 2007"},
{y: 521, text: “DDAY2008”,legend: “Dominopoint Day 2008", tooltip: “evento 2008
{y: 571, text: “DDAY2009”,legend: “Dominopoint Day 2009", tooltip: “evento 2009"},
];
Mi creo un ComputedText (non visibile) che legge e crea il JSON prendendo i valori da una vista:
var viewNav:NotesViewNavigator = view1.createViewNav();
var viewEnt:NotesViewEntry = viewNav.getFirst();
var output:string = "";
while (viewEnt != null) {
output += "{y: " + viewEnt.getColumnValues()[1] + ", text: "" + viewEnt.getColumnValues()[0] + "",legend: "" +
viewEnt.getColumnValues()[2] + "", tooltip: "" + viewEnt.getColumnValues()[3] + " (" + viewEnt.getColumnValues()[1] +
")"},";
viewEnt = viewNav.getNext(viewEnt);
}
return output.substr(0, output.length - 1)
67. Generare il Codice renderizzato
Mi creo un ComputedText con content-type HTML:
Mi creo un ComputedText (stavolta visibile) con content-type HTML che genera il codice SCRIPT JS
Client sfruttando la possibilà di leggere i valori di un componente tramite la getComponent
var result = "<script language="JavaScript" type="text/javascript">";
result += "var series1 = [";
result += getComponent("seriesA").getValue() + "];";
return result;
}]]>
68. Creare un container per il Pie-Char
Creo nella Xpages un pannello nel quale verrà inserito l’output del grafico associando l’ID
<xp:panel id="simplechart"
style="width: 450px; height: 450px;">
</xp:panel>
69. Codice di rendering
Inserisco uno script-block control nel quale scrivo il seguente codice:
makeCharts = function(){
var chart1 = new dojox.charting.Chart2D("#{id:simplechart}");
chart1.setTheme(dojox.charting.themes.PlotKit.blue);
chart1.addPlot("default", {type: "Pie", radius: 150, fontColor: "rgb(0,0,255)", labels: true});
chart1.addSeries("Series 1", series1);
var anim_a = new dojox.charting.action2d.Magnify(chart1, "default", {scale: 1.2, shift: 10});
var anim_d = new dojox.charting.action2d.Highlight(chart1, "default", {highlight: "#000000"});
var anim_e = new dojox.charting.action2d.Tooltip(chart1, "default");
chart1.render();
};
XSP.addOnLoad(makeCharts);
N.B. la guida è stata tratta da questo URL:
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Dojox_Charting_for_XPages
71. Documentazione online
•Blog ben fatto con tanti suggerimenti(http://xpagesblog.com/)
•Wiki ufficiale sul Designer (http://www-10.lotus.com/ldd/ddwiki.nsf)
•Uno di OpenNTF (http://www-10.lotus.com/ldd/heidloffblog.nsf/)
•Blogger (http://dominoextnd.blogspot.com/)
•Blogger (http://www.youatnotes.de/xpages)
•PlanetLotus ( http://www.planetlotus.org)
•RedBook (http://www-
10.lotus.com/ldd/ddwiki.nsf/dx/Master_Table_of_Contents_for_Building_Domino_
Web_Applications_using_Domino_8.5.1)
• molto altro lo troverete utilizzando Google ( c’è tanta documentazione)