Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Xpages Tips&Tricks     Soluzioni esuggerimenti per lo  sviluppo Xpages
Chi sonoIl creatore di Dominopoint (2004)CEO Grydan SAS12 anni di consulenza su Notes/DominoAmministratore, Sviluppato...
Menù del giorno Debug applicazioni    multi-valore Validazione           database relazionali XAgent                ...
Debug: application propriertiesRicordati sempre di attivare apposito flag che tipermette in caso di errore SSJS di visuali...
Debug: _dump(obj)Il comando SSJS _dump(obj) può essereutilizzato in qualunque punto SSJS della tuaapplicazione (validation...
Debug: OpenNTF Debug ToolbarTool pubblicato su OpenNtf.org che vi aiuta neltracking delle variabili di sessione, dotato di...
Debug: OpenNTF Debug ToolbarA seconda del livello di attenzione:dBar.info(message:String, context:String);dBar.warn(messag...
Debug: OpenLog Xpages Per centralizzare gli errori in un unico repository è possibile  utilizzare anche la versione modif...
Debug: OpenLog Xpages Scaricare OpenLog Database da OpenNtf.org (creato da Julian  Robichaux) Scaricare TaskJam (tool di...
Xpages Log File Reader   Currently these files are supported:   Log.nsf   All the files in the IBM_TECHNICAL_SUPPORT fo...
Debug: Java for XpagesE’ possibile debuggare il codice Java/XPagesVa abilitato sul Notes.INI del server Domino utilizzan...
Debug: discovery method F4Dato un componente inserito in una XPages con drag & Drop, come faccio a capire i metodi e prop...
Risposta 2                             Al salvataggio/modifica di ogniDebug: tasto F4              XPages/Custom Control v...
Risposta 2                             Si prende nota del nome del componente di cui si                             voglio...
Si seleziona il costruttore del’oggettoDebug: tasto F4Dato un componenteinserito in una XPages condrag & Drop, come faccio...
Debug: FireBug & Web Developer ToolBarUtile per il Debug lato client della vostra App
Debug: Outline L’outline è uno strumento sottovalutato, ma ci permette di  capire come è strutturata la nostra XPages. Ut...
Validazione: server o clientLa validazione fa parte del lifecycle di una XPages può essere sia server o client a seconda ...
Validazione: client sideAppariranno tante alert a video una volta attivata
Validazione: server-side Appositi controlli visualizzano il messaggio in posizioni  stabilite
Validazione: summary with linkVoglio un summary con gli errori e link alle caselle di testo come posso fare?
Validazione: summary with link Custom Control BeforePageLoad routine che va a leggere da tutti i  componenti della pagin...
Validazione: summary with link
Validazione: summary with link
Validazione: altre 9 tipologie validateExpression: scrivere un’espressione SSJS se ritorna true allora  passa la validazi...
xAgent Fare in modo che una Xpages si comporti come una  servlet (in notes tradizionale come ?OpenAgent)  –   rendered="f...
xAgent: esempio semplice<?xml version="1.0" encoding="UTF-8"?><xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="fa...
xAgent: esempio Pdf – preparare Scaricare il JAR di Itext Passare alla prospettiva Java nel Designer Creare due folder ...
xAgent: esempio Pdf- come fareCrearsi il proprio package Java che lavora con Itext [non è necessario per cose semplici]
xAgent: esempio PDFIl mio code SSJS dovrà avere importPackage(it.grydan.xpages.pdf)Posso scrivere direttamente nell’XAge...
xAgent: esempio PDFhttp://www.eknori.de/2011-10-25/xpages-to-pdf-with-itext/importPackage(com.itextpdf);importPackage(java...
// Open the PDF and write the PDF header infonewPDF.open();newPDF.addAuthor(“Ulrich Krause”);newPDF.addCreationDate();newP...
// Add a ordered List to the PDFvar orderedList = new com.itextpdf.text.List(com.itextpdf.text.List.ORDERED);orderedList.a...
XAgent: esempio Pdf & HtmlD: Voglio generare un PDF da una paginacorrente basadomi su un template HTML?R: Usando Itext lib...
XAgent: passaggio parametriIn caso di POST verso il server:param.get(‘PARAMETRO’)In caso di GET verso il server:context.ge...
Performance Lentezza Designer dopo inserimento di una vista, a causa del DDE  inserendo una vista come datasource Notes p...
Ckeditor         var myToolbar = "[[Font,FontSize], n"                                                  +"[Preview, Bold,T...
Ckeditor Focus sull’elemento da CSJS    –   CKEDITOR.instances[#{id:inputRichText1}].on(instanceReady, function(e){this.f...
Sessioni e LogoutDopo aver effettuato un login con Single servernei cookie avremo i cookie istanziantiN.B. Cancellando i c...
Logout App Layout (Extlib)
Logout App Layout (Extlib)   Installa ed attiva Extlib   Crea CC con Application Layout   Crea nelle Utility Links i no...
Logout App Layout (Extlib)
Comandi URL Apertura di un documento    – "/"+session.evaluate("@WebDbName")[0]+"/%24%24OpenDominoDocument.xsp?docu      ...
Sessioni persistentiD: Voglio fare in modo che la mia sessione nonscada e sia una sessione persistente come possofare?R: S...
Sessioni persistentiR: Se non hai UP1 o Extension Library
Campi multi-valueUtilizzando il controllo Multiline
Multivalue field multipliCome fare editing dinamico di più multivaloriper riga (esempio per compilazione voci di unordine)
Multivalue field multipli Creo nella BeforePageLoad una variabile di View inizializzata a  zero se nuovo documento altrim...
Multivalue: BeforePageLoad
Multivalue: repeat control
Multivalue: querysavedoc
Relazionali: accesso senza ExtLibNecessario Il Driver (solitamente JAR) da inserire nel LIB folderCostruire il Build Pat...
Relazionali: Java code
Relazionali – SSJS code
Relazionali: Repeat Control
Relazionali: con ExtLibxPackage Osgi raccomandatoInstallare ExtLib su serverSemplice da usareSupporta il CONNECTION POOL
Relazionali: con Extlib - driver jvm/lib/ext : non raccomandato uso semplice, posizionati in  una folder in cui c’è l’aut...
Relazionali: extlibx example mySQLUna volta installato via Creare sotto folder WEB-INFjdbc il file con estensione .jdbc
Relazionali: extlib example mySQL
@Function @JdbcUpdate("derby1","users",v,"id=?",id)@JdbcInsert("derby1","users",v)@JdbcDelete("derby1","users","id=?",id)
MultilinguaNativo nelle Xpages grazie alle Localization OptionsBasta tradurre i file .proprierties dal package explorer
MultilinguaD: Come tradurre elementi iniettati in SSJS?R: Creare label component in lingua source chepoi vengono tradotti ...
Come tradurre il contenuto delle             view? Putroppo non è possibile farlo nativamente, ma  tramite dojo.query() è...
Multiligua:cambio lingua al volo
Multilingua: cambio lingua al volo<xp:comboBox id="comboBox1" value="#{sessionScope.Language}"> <xp:selectItem itemLabel="...
XPiNCFunzionano anche le ExtLibComodo per unica interfacciaSSJS = if (@ClientType()=="Notes")Funzionano le replicheAt...
Altre risorse utili http://xsnippets.openntf.org/ http://stackoverflow.com/questions/tagged/xpages http://www-10.lotus....
Domande?
Grazie agli sponsor per aver reso possibile i         Dominopoint Days 2012!                  Main Sponsor                ...
Upcoming SlideShare
Loading in …5
×

#dd12 grillo daniele_xpages_tips_tricks_rev2

1,841 views

Published on

XPages, trucchi e soluzioni sullo sviluppo applicativo IBM Lotus Notes

Published in: Technology
  • Be the first to comment

#dd12 grillo daniele_xpages_tips_tricks_rev2

  1. 1. Xpages Tips&Tricks Soluzioni esuggerimenti per lo sviluppo Xpages
  2. 2. Chi sonoIl creatore di Dominopoint (2004)CEO Grydan SAS12 anni di consulenza su Notes/DominoAmministratore, Sviluppatore e DocenteEmail: d.grillo@grydan.itMobile: +39 392.29.45.549
  3. 3. Menù del giorno Debug applicazioni  multi-valore Validazione  database relazionali XAgent  Multilingua Performance  XPiNC Ckeditor Sessioni & logout Comandi URL
  4. 4. Debug: application propriertiesRicordati sempre di attivare apposito flag che tipermette in caso di errore SSJS di visualizzare
  5. 5. Debug: _dump(obj)Il comando SSJS _dump(obj) può essereutilizzato in qualunque punto SSJS della tuaapplicazione (validation, event handler, eventietc..) per tracciare lo stato corrente di unqualunque oggetto passato come valore
  6. 6. Debug: OpenNTF Debug ToolbarTool pubblicato su OpenNtf.org che vi aiuta neltracking delle variabili di sessione, dotato di APIinspector integrato e console dove scrivere imessaggi utilizzando SSJS
  7. 7. Debug: OpenNTF Debug ToolbarA seconda del livello di attenzione:dBar.info(message:String, context:String);dBar.warn(message:String, context:String);dBar.debug(message:String, context:String);dBar.error(message:String, context:String);Effettuare un dump di qualunque oggetto:dBar.dump( anyObject );Monitorare il Timing di un’azione:dBar.startTimer( timerId:String );dBar.stopTimer( timerId:String );
  8. 8. Debug: OpenLog Xpages Per centralizzare gli errori in un unico repository è possibile utilizzare anche la versione modificata da Matt White nel prodotto TaskJam di OpenLoghttp://www.bleedyellow.com/blogs/m.leusink/entry/using_openlog_for_logging_debugging_xpages1?lang=en
  9. 9. Debug: OpenLog Xpages Scaricare OpenLog Database da OpenNtf.org (creato da Julian Robichaux) Scaricare TaskJam (tool di Elgujii) scritto da Matt White. Copiare OpenLogXPages SSJS libreria nella tua applicazione Modificare la variabile logDbPath facendola puntare al DB OpenLog Aggiungere OpenLogXpages script library nelle tue risorse Usare le istruzioni per scrivere in OpenLog – log.logEvent( "Hello world" ); – log.logError( e.toString(), null, e );http://www.bleedyellow.com/blogs/m.leusink/entry/using_openlog_for_logging_debugging_xpages1?lang=en
  10. 10. Xpages Log File Reader Currently these files are supported: Log.nsf All the files in the IBM_TECHNICAL_SUPPORT folder, e.g. the console.log and xpages.log Error and Trace logs in the dominoworkspacelogs folder Startup.log Additional you will have access to read all the relevant server settings in these files: notes.ini xsp.properties java.policy rcpinstall.properties
  11. 11. Debug: Java for XpagesE’ possibile debuggare il codice Java/XPagesVa abilitato sul Notes.INI del server Domino utilizzando – JavaEnableDebug=1 – JavaDebugOptions=transport=dt_socket,server=y, suspend=y,address=*portnumber* http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Debug_Java_for_XPages_in_NSFs
  12. 12. Debug: discovery method F4Dato un componente inserito in una XPages con drag & Drop, come faccio a capire i metodi e proprietà utilizzabili in SSJS?Risposta 1: Utilizzo la documentazione Javadelle API a questo URLhttp://public.dhe.ibm.com/software/dw/lotus/Domino-Designer/JavaDocs/XPagesExtAPI/8.5.2/index.html
  13. 13. Risposta 2 Al salvataggio/modifica di ogniDebug: tasto F4 XPages/Custom Control viene generatoDato un componente file Java sorgente con lo stesso nomeinserito in una XPages con accessibile con il Package Explorerdrag & Drop, come faccio acapire i metodi e sotto il ramo localxspproprietà?
  14. 14. Risposta 2 Si prende nota del nome del componente di cui si vogliono conoscere i metodiDebug: tasto F4Dato un componenteinserito in una XPages condrag & Drop, come faccio acapire i metodi eproprietà? Si va a cercare la creazione dell’oggetto con il Find/Replace nel sorgente java
  15. 15. Si seleziona il costruttore del’oggettoDebug: tasto F4Dato un componenteinserito in una XPages condrag & Drop, come faccio acapire i metodi eproprietà? Premendo il tasto F4 apparirà un elenco di metodi e proprietà utilizzabili da SSJS molto comodo
  16. 16. Debug: FireBug & Web Developer ToolBarUtile per il Debug lato client della vostra App
  17. 17. Debug: Outline L’outline è uno strumento sottovalutato, ma ci permette di capire come è strutturata la nostra XPages. Utilissimo per fare reverse engineering
  18. 18. Validazione: server o clientLa validazione fa parte del lifecycle di una XPages può essere sia server o client a seconda dell’apposito setting presente nell’application proprierties
  19. 19. Validazione: client sideAppariranno tante alert a video una volta attivata
  20. 20. Validazione: server-side Appositi controlli visualizzano il messaggio in posizioni stabilite
  21. 21. Validazione: summary with linkVoglio un summary con gli errori e link alle caselle di testo come posso fare?
  22. 22. Validazione: summary with link Custom Control BeforePageLoad routine che va a leggere da tutti i componenti della pagina corrente ed eventuali messaggi di errore generati (facesContext.getClientIdsWithMessages() e facesContext.getMessages(clientId) Genera un object array di valori scritto in una ViewScope Repeat Control che scorre la ViewScope 2 Computed Value (uno show the message e l’altro setta il focus)
  23. 23. Validazione: summary with link
  24. 24. Validazione: summary with link
  25. 25. Validazione: altre 9 tipologie validateExpression: scrivere un’espressione SSJS se ritorna true allora passa la validazione altrimenti ferma validateConstraint: scrivi un’espressione regEx per la validazione validateRequired: caso campo obbligatorio diverso da vuoto
  26. 26. xAgent Fare in modo che una Xpages si comporti come una servlet (in notes tradizionale come ?OpenAgent) – rendered="false" (attributo <xp:view>) – Usando il writer scrivere code afterRenderResponse – Usano Stream scrivere codice beforeRenderResponse – Puoi avere o un writer o uno stream – facesContext.responseComplete(); – Nella 8.5.2 erano Syncronized nella 8.5.3 concorrenti per utente e database (concorrenti)
  27. 27. xAgent: esempio semplice<?xml version="1.0" encoding="UTF-8"?><xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false"> <xp:this.beforeRenderResponse><![CDATA[#{javascript:try { var uName = session.createName(session.getEffectiveUserName()); var exCon = facesContext.getExternalContext(); var response = exCon.getResponse(); var writer = response.getWriter(); response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); writer.write("<?xml version="1.0" encoding="UTF-8"?>n"); writer.write("<test>Ciao "+uName.getAbbreviated()+"</test>"); facesContext.responseComplete();}catch (e) { _dump(e);}}]]></xp:this.beforeRenderResponse></xp:view>
  28. 28. xAgent: esempio Pdf – preparare Scaricare il JAR di Itext Passare alla prospettiva Java nel Designer Creare due folder sotto il ramo WebcontentWEB-INFuna chiamata src ed una chiamata lib Copiare i file JAR di Itext dentro lib folder Aggiungere al Build-Path le library presenti nella folder lib e il source code presente nella src folder
  29. 29. xAgent: esempio Pdf- come fareCrearsi il proprio package Java che lavora con Itext [non è necessario per cose semplici]
  30. 30. xAgent: esempio PDFIl mio code SSJS dovrà avere importPackage(it.grydan.xpages.pdf)Posso scrivere direttamente nell’XAgent il richiamo alle funzioni della mio codice Java
  31. 31. xAgent: esempio PDFhttp://www.eknori.de/2011-10-25/xpages-to-pdf-with-itext/importPackage(com.itextpdf);importPackage(java.io);//Initializationvar con = facesContext.getExternalContext();var response:com.ibm.xsp.webapp.XspHttpServletResponse = con.getResponse();//setting response headers for browser to recognize dataresponse.setContentType(“application/pdf”);response.setHeader(“Cache-Control”, “no-cache”);response.setDateHeader(“Expires”, -1);response.setHeader( “Content-Disposition”, “attachment; filename=”test.pdf”" );// Setup the PDF Output Streamvar newPDF:com.itextpdf.text.Document = new com.itextpdf.text.Document();var writer = com.itextpdf.text.pdf.PdfWriter.getInstance(newPDF,response.getOutputStream());var htmlWorker = new com.itextpdf.text.html.simpleparser.HTMLWorker(newPDF);
  32. 32. // Open the PDF and write the PDF header infonewPDF.open();newPDF.addAuthor(“Ulrich Krause”);newPDF.addCreationDate();newPDF.addCreator(“IBM Lotus Domino V8.5.3 :iText Library”);newPDF.addTitle(“PDF Demo”); //add a Hello World text to the PDFvar helloWorld = new com.itextpdf.text.Paragraph(“Hello world1″)newPDF.add(helloWorld); //Create a table with 3 cells, width = 100%var table = new com.itextpdf.text.pdf.PdfPTable(3); // 3 columns.var cell1 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph(“Table Cell 1″));var cell2 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph(“Table Cell 2″));var cell3 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph(“Table Cell 3″));table.setWidthPercentage(100);table.addCell(cell1);table.addCell(cell2);table.addCell(cell3);newPDF.add(table); // Add a Chunk to the PDF; chunks do not add a CRLF when the leght exceeds page width. Betteruse phrasesnewPDF.add(new com.itextpdf.text.Chunk(“This is a chunk. “)); // Add a Phrase to the PDFnewPDF.add(new com.itextpdf.text.Phrase(“This is a phrase. “));
  33. 33. // Add a ordered List to the PDFvar orderedList = new com.itextpdf.text.List(com.itextpdf.text.List.ORDERED);orderedList.add(new com.itextpdf.text.ListItem(“Item 1″));orderedList.add(new com.itextpdf.text.ListItem(“Item 2″));orderedList.add(new com.itextpdf.text.ListItem(“Item 3″));newPDF.add(orderedList)// Add a link to the PDFvar anchor = new com.itextpdf.text.Anchor(“eknori.de”);anchor.setReference(“http://www.eknori.de”);newPDF.add(anchor);// Add HTML to the PDFvar str = “<html><head><title>titlu</title></head><body><table><tr><td><br /><br /><ahref=’http://www.eknori.de’>Link 2 eknori.de</a><br /><br /><br/>Test</td></tr></table></body></html>”;htmlWorker.parse(new java.io.StringReader(str));// FinishnewPDF.close();writer.close();facesContext.responseComplete();
  34. 34. XAgent: esempio Pdf & HtmlD: Voglio generare un PDF da una paginacorrente basadomi su un template HTML?R: Usando Itext library (Jar) ed XMLWorker(Jar)è una delle soluzioni, con qualche limitazioneXMLWorkerHelper worker = XMLWorkerHelper.getInstance(); try{ worker.parseXHtml(pdfwriter, document, new java.io.StringReader(parseHTML)); } catch(Exception e){ document.add(new Phrase(e.toString())); }
  35. 35. XAgent: passaggio parametriIn caso di POST verso il server:param.get(‘PARAMETRO’)In caso di GET verso il server:context.getUrlParameter(‘PARAMETRO’);
  36. 36. Performance Lentezza Designer dopo inserimento di una vista, a causa del DDE inserendo una vista come datasource Notes potreste avere dei problemi di lentezza in fase di editing: rendete il datasource calcolato e sarà più performance. Peformance Profiling Tool scaricabile da Openntf.org http://www.openntf.org/projects/pmt.nsf/ProjectLookup/XPages%20Tool box permette di capire codice di blocco individuali che sono lenti ad essere eseguiti XPagesPreload=1 e XPagesPreloadDB=account/w-apps.nsf per il primo startup Disabilitare Build Automatically e farlo manuale Lavorare in replica locale da migliori performance Utilizzare compression Javascript&CSS (flag nelle application proprierties)
  37. 37. Ckeditor var myToolbar = "[[Font,FontSize], n" +"[Preview, Bold,TextColor,BGColor], n" +"[Italic,Underline,Strike,- Presente dalla 8.5.2, editor RichText ,Subscript,Superscript]]"; return myToolbar; Converte un RT notes in MIME al salvataggio 3 tipi di editor (Full, Large, Medium,Slim) Custom editor
  38. 38. Ckeditor Focus sull’elemento da CSJS – CKEDITOR.instances[#{id:inputRichText1}].on(instanceReady, function(e){this.focus()}) Leggere il contenuto da CSJS – var richCKEditor = CKEDITOR.instances["#{id:inputRichText1}"]; – alert (richCKEditor.getData()) Aggiungere HTML da SSJS: – getComponent(‘CONROLLO’).setValueFromString(‘HTMLCODE’) Aggiungere HTML da CSJS – var date1 = new Date(); – for( var i in CKEDITOR.instances){ – rteditor = CKEDITOR.instances[i]; – if( rteditor.name == #{id:richTextField1}){ – rteditor.insertHtml("<br><p><--------" + date1.toLocaleDateString() + " : "+ date1.toLocaleTimeString() + "-----------></p><br>") – }} API http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
  39. 39. Sessioni e LogoutDopo aver effettuato un login con Single servernei cookie avremo i cookie istanziantiN.B. Cancellando i cookie scade la sessione corrente (nella8.5.3 SessionID è un cookie prima URL parameter conproblematiche di script)
  40. 40. Logout App Layout (Extlib)
  41. 41. Logout App Layout (Extlib) Installa ed attiva Extlib Crea CC con Application Layout Crea nelle Utility Links i nodi: UserNode – @Name("[CN]",session.getEffectiveUserName()) Login And Logout Node – Senza Label Basic Node – Label Logout • Href: facesContext.getExternalContext().getRequest().getContextPath() + "?Logout&redirectTo=" + facesContext.getExternalContext().getRequest().getContextPath() • rendered: var uName = session.getEffectiveUserName(); if(uName == "Anonymous") { return false; } else { return true; }
  42. 42. Logout App Layout (Extlib)
  43. 43. Comandi URL Apertura di un documento – "/"+session.evaluate("@WebDbName")[0]+"/%24%24OpenDominoDocument.xsp?docu mentId="+unid+"&action=openDocument" Creazione di un documento – "/"+session.evaluate("@WebDbName")[0]+"/XpagesNAME.xsp?action=newDocument Creazione di un documento risposta – "/"+session.evaluate("@WebDbName")[0]+"/XpagesNAME.xsp?action=newDocument& parentId="+docid Modifica di un documento – view.getPageName()+"?action=editDocument&documentId="+document1.getNoteID(); Aprire un allegato – http(s)://[yourserver]/[application.nsf] /xsp/.ibmmodres/domino/OpenAttachment/ [application.nsf]/[UNID|/$File/[AttachmentName]?Open
  44. 44. Sessioni persistentiD: Voglio fare in modo che la mia sessione nonscada e sia una sessione persistente come possofare?R: Se hai installato UP1 o Extension Library usa ilKeep-Alive control
  45. 45. Sessioni persistentiR: Se non hai UP1 o Extension Library
  46. 46. Campi multi-valueUtilizzando il controllo Multiline
  47. 47. Multivalue field multipliCome fare editing dinamico di più multivaloriper riga (esempio per compilazione voci di unordine)
  48. 48. Multivalue field multipli Creo nella BeforePageLoad una variabile di View inizializzata a zero se nuovo documento altrimenti con un object array in caso di campi multivalore Repeat control che scorre la ViewScope Binding dei campi e validation Bottone Aggiungi/Rimuovi che lavorano in memory sulla ViewScope QuerySave sul DataSource che scompone la viewScope e la scrive nel backend
  49. 49. Multivalue: BeforePageLoad
  50. 50. Multivalue: repeat control
  51. 51. Multivalue: querysavedoc
  52. 52. Relazionali: accesso senza ExtLibNecessario Il Driver (solitamente JAR) da inserire nel LIB folderCostruire il Build PathRealizzare Package Java di interfacciaRichiamare Codice Java da SSJS con ImportPackage(NOMEPACKAGE)No CONNECTION POOL!
  53. 53. Relazionali: Java code
  54. 54. Relazionali – SSJS code
  55. 55. Relazionali: Repeat Control
  56. 56. Relazionali: con ExtLibxPackage Osgi raccomandatoInstallare ExtLib su serverSemplice da usareSupporta il CONNECTION POOL
  57. 57. Relazionali: con Extlib - driver jvm/lib/ext : non raccomandato uso semplice, posizionati in una folder in cui c’è l’autorizzazione ad eseguire chiamate, ma richiede accesso a FileSystem Inside NSF non raccomandato causa + istanze del JAR a seconda di quanti database lo utilizzano, potrebbe essere necessario modificare il java.policy nel server path jvm/lib/security Installare il driver via OSGi plugin [raccomandato] dinamicamente caricato e gestisto dal JDBC Driver Manager, miglior gestione del connection pool
  58. 58. Relazionali: extlibx example mySQLUna volta installato via Creare sotto folder WEB-INFjdbc il file con estensione .jdbc
  59. 59. Relazionali: extlib example mySQL
  60. 60. @Function @JdbcUpdate("derby1","users",v,"id=?",id)@JdbcInsert("derby1","users",v)@JdbcDelete("derby1","users","id=?",id)
  61. 61. MultilinguaNativo nelle Xpages grazie alle Localization OptionsBasta tradurre i file .proprierties dal package explorer
  62. 62. MultilinguaD: Come tradurre elementi iniettati in SSJS?R: Creare label component in lingua source chepoi vengono tradotti con i file proprierties..edutilizzaregetComponent(‘labelName).getValue()
  63. 63. Come tradurre il contenuto delle view? Putroppo non è possibile farlo nativamente, ma tramite dojo.query() è possibile individuare un’area e fare delle find & replace del testo in funzione della lingua localizzata negli eventi AfterPageLoad() e AfterRestoreView() if ( context.getLocaleString().match(en) ) { dojo.query(".xspDataTable td.").forEach(function(node, index, arr){ searchText.split(‘ciao).join; (‘hello) } }
  64. 64. Multiligua:cambio lingua al volo
  65. 65. Multilingua: cambio lingua al volo<xp:comboBox id="comboBox1" value="#{sessionScope.Language}"> <xp:selectItem itemLabel="Chinese" itemValue="zh"></xp:selectItem> <xp:selectItem itemLabel="German" itemValue="de"></xp:selectItem> <xp:selectItem itemLabel="Turkish" itemValue="tr"></xp:selectItem> <xp:eventHandler event="onchange" submit="true" refreshMode="complete" /></xp:comboBox>The itemValue is the language code the XPage can be switched to, and can be easily modified tofullify your requirements. The locale to use is stored in a sessionScope variable named"Language".To activate the XSnippet you have to modify the faces-config.xml of your XPages application byadding these lines:<faces-config> <lifecycle> <phase-listener>ch.hasselba.xpages.jsf.core.LocalizationSetter</phase-listener> </lifecycle></faces-config>
  66. 66. XPiNCFunzionano anche le ExtLibComodo per unica interfacciaSSJS = if (@ClientType()=="Notes")Funzionano le replicheAttenzione al traffico dati live to server! Vengono trasferiti XML, risorse, sorgenti e package Java ad ogni GET
  67. 67. Altre risorse utili http://xsnippets.openntf.org/ http://stackoverflow.com/questions/tagged/xpages http://www-10.lotus.com/ldd/xpagesforum.nsf http://xpagesblog.com/XPagesHome.nsf/HomeBlog. xsp http://xpages.info/XPagesHome.nsf/Demos.xsp http://notesin9.com/ http://hasselba.ch/blog/
  68. 68. Domande?
  69. 69. Grazie agli sponsor per aver reso possibile i Dominopoint Days 2012! Main Sponsor Vad sponsor Platinum sponsor Gold sponsor

×