XPages Blast - Lotusphere 2013


Published on

Tim Clark & Matt White
30 top tips for XPages in 60 minutes or less

Published in: Technology, Business
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

XPages Blast - Lotusphere 2013

  1. 1. © 2013 IBM CorporationBP208 XPages BlastMatt White | London Developer Co-opTim Clark | TC Soft ConsultingTuesday, 15 January 13
  2. 2. Matt White§Consultant with London Developer Co-op§Lead Developer with Elguji Software§Owner of XPages101.net§In the last year has;–Got married–Become a father–Bought a new house–Oh... and developed some XPages apps!2Tuesday, 15 January 13
  3. 3. Tim Clark§Owner of TC Soft Consulting§IBM Champion§Prince2 Practitioner (Project Management)§ITIL certified§Manager of;–People–Projects–My family ;o)3Tuesday, 15 January 13
  4. 4. Products we’re using§IBM Lotus® Domino® Server 8.5.3–If we use other versions for a tip we’ll highlight it§IBM Lotus® Notes® 8.5.3§IBM Notes® 9.0§IBM Lotus® Domino Designer® 8.5.3§IBM Domino Designer® 9.0§We will use this logo to highlight any slide that has IBM Domino Designer® 9.0 items4Tuesday, 15 January 13
  5. 5. Agenda§Config Tips§Client Side Tips§Server Side Tips§Debugging Tips5Tuesday, 15 January 13
  6. 6. Designer Tweaks§Working Sets–Great for grouping together similar applications§Perspectives–Switch between XPages, Domino Designer and Debug§Turn on Line Numbers in code editor–Right click in the gutter and select “Show Line Numbers”6Tuesday, 15 January 13
  7. 7. Designer Tweaks§XPages Palette to control which controlsyou see in the sidebar (new in 9.0)7Tuesday, 15 January 13
  8. 8. Disable Build Automatically§It is enabled by default§When you save a design element the application is recompiled§This is bad if–you’re working in a team–you’re working on remote servers§Turn it off and get used to using Ctrl-B8Tuesday, 15 January 13
  9. 9. Disable Build Automatically§Bonus Tip: if you close other applications the build process is quicker–Can only be done in Package Explorer in 8.5.3, in 9.0 it can be done fromApplications pane9Tuesday, 15 January 13
  10. 10. Source Control§Acts as a great backup tool for you§Even if you don’t have a team Repository, set up a local one§We use Github, allows for better team development§Set up Source Control for the application and choose a disk location§Then set up the Github project§Link the two by creating a new Git project in the same disk location§Video of how to set it all up athttp://bit.ly/xpb_github§We use a client to control the Committing, rollbacks etc, but command line works equallywell§https://github.com/tcsoft/xpb201310Tuesday, 15 January 13
  11. 11. Designer Memory Settings§8.5.3 Designer client can be a little crashy, but we can fix that!§Open the file at:<Notes program dir>/framework/rcp/deploy/jvm.properties§Default settings in 8.5.3 are:vmarg.Xmx=-Xmx256mvmarg.Xms=-Xms48mvmarg.Xmca=-Xmca8k§Also still like this is Domino Designer 9.0 (beta)11Tuesday, 15 January 13
  12. 12. Designer Memory Settings§New settings should be:vmarg.Xmx=-Xmx1024mvmarg.Xms=-Xms512mvmarg.Xmca=-Xmca512k§Took my machine from crashing nearly every day at 3pm to almost never crashing§Technote:http://www-01.ibm.com/support/docview.wss?uid=swg2161770812Tuesday, 15 January 13
  13. 13. Agenda§Config Tips§Client Side Tips§Server Side Tips§Debugging Tips13Tuesday, 15 January 13
  14. 14. Know your versions§Dojo–8.5.0 == 1.1.1–8.5.1 == 1.3.2–8.5.2 == 1.4.3–8.5.3 == 1.6.1–9.0 == 1.8§OneUI–< 8.5.3 == 2.0.1–8.5.3 == 2.1–9.0 == 3.0.2§CKEditor–8.5.2 ==–8.5.3 == 3.5.3–9.0 == 3.6.414Tuesday, 15 January 13
  15. 15. Think Mobile§Mobile Controls in the Extension Library§But even if not going that far then it’s always worth setting meta tagsand field types§Meta tags configure the page for optimal viewing in iOS§Set them by adding a metadata resource to your XPage:15Tuesday, 15 January 13
  16. 16. Think Mobile§By default consider these...§viewport: width = device-width, initial-scale = 2.3, user-scalable = yes–scales the page to fit on the page§apple-mobile-web-app-capable: yes–allows you to add to the iOS workspace and run without the Safari controls§apple-mobile-web-app-status-bar-style: black–changes the header bar color16Tuesday, 15 January 13
  17. 17. Think Mobile§There is no overhead at all to setting the “type” property of fields so that when you areusing a mobile device the user gets the correct keyboard§In All Properties for a field set type, most important being:–date (displays a native picker, but beware date formats)–email–number–url17Tuesday, 15 January 13
  18. 18. Use jQuery§If you want to use the most popular JavaScript framework on the Internet add jQuery toyour application§Extra overhead but on a fast network not a huge problem§Check out http://xomino.com for great tips–Also see Marky’s session BP103 - jQuery: the world’s most popular JavaScript library comesto XPages (Thursday 8:30am Swan - SW4)§Gives access to huge number of resources in your applications§Code is often easier to write (ymmv!)18Tuesday, 15 January 13
  19. 19. Use the extension library application layout§Check out the companion application for this session.§The extension library application layout has lots of options and can be made to suit yourapplication.19Tuesday, 15 January 13
  20. 20. Use Bootstrap§OneUI is one way to go for the look and feel of your app§Bootstrap is an alternative–Open source, released by Twitter–Easy to use–Integrates with jQuery–Has useful built in widgets20Tuesday, 15 January 13
  21. 21. Use Bootstrap21Tuesday, 15 January 13
  22. 22. Use Bootstrap22Tuesday, 15 January 13
  23. 23. Agenda§Config Tips§Client Side Tips§Server Side Tips§Debugging Tips23Tuesday, 15 January 13
  24. 24. Using Themes§For simple things like including CSS files on all XPages§For more advanced things as well...§Add a CSS class to all controls of a particular type:24Tuesday, 15 January 13
  25. 25. Using Themes§Using the Theme ID we can create our own sub types of field:§Or we can add custom classes to the <body>25Tuesday, 15 January 13
  26. 26. Using Attributes§Pretty much every control has a property called “attrs”§You can add as many attributes as you like to a control§Often used in conjunction with the tagName property–To make a panel into an anchor for example26Tuesday, 15 January 13
  27. 27. Using Attributes§Ones we use a lot are:–href–onclick (and other events)–data-toggle (and other jQuery tags)§Will result in this being generated:<a id="id1:_id2:mylink" onclick="doSomething()">My Link</a>27Tuesday, 15 January 13
  28. 28. Document Locking§Scoped Variables are great for in memory tasks§Such as knowing who has documents in edit mode§So when a page is loaded we can call some code to decide whether to allow the user toedit it§We can use applicationScope variables to store a Java Hashmap of who has lockedindividual documents28Tuesday, 15 January 13
  29. 29. Document Lockingfunction processDocumentLocking(){if (context.getUrlParameter("documentId") != "" &&context.getUrlParameter("action").toLowerCase() == "editdocument"){if (!applicationScope.containsKey("documentlocks")){applicationScope.documentlocks = new java.util.Hashtable();}var hash:java.util.Hashtable = applicationScope.documentlocks;if (hash.containsKey(context.getUrlParameter("documentId"))){var lock = hash.get(context.getUrlParameter("documentId"));if (lock.person != @UserName()){viewScope.locked = lock;}}else{var lock = new DocumentLock();lock.unid = context.getUrlParameter("documentId");lock.person = @UserName();lock.time = new java.util.Date();hash.put(lock.unid, lock);applicationScope.documentlocks = hash;}...29Tuesday, 15 January 13
  30. 30. Document Locking...}else if (context.getUrlParameter("documentId") != "" &&context.getUrlParameter("action").toLowerCase() == "opendocument"){if (!applicationScope.containsKey("documentlocks")){applicationScope.documentlocks = new java.util.Hashtable();}var hash:java.util.Hashtable = applicationScope.documentlocks;if (hash.containsKey(context.getUrlParameter("documentId"))){var lock = hash.get(context.getUrlParameter("documentId"));if (lock.person == @UserName()){unlockDocument( context.getUrlParameter("documentId") );}else{viewScope.locked = lock;}}}}30Tuesday, 15 January 13
  31. 31. Document Lockingfunction unlockDocument(unid){if (applicationScope.containsKey("documentlocks")){var hash:java.util.Hashtable = applicationScope.documentlocks;if (hash.containsKey(unid)){var lock = hash.get(unid);if (lock.person == @UserName()){hash.remove(unid);applicationScope.documentlocks = hash;}}}}var DocumentLock = function(){this.unid;this.person;this.time;}31Tuesday, 15 January 13
  32. 32. Document Locking32Tuesday, 15 January 13
  33. 33. Expression Language§You’re probably already using it even if you don’t realize it with SimpleData Binding§It’s just a simple shorthand to access properties quickly§You just need to use the Advanced - Expression Language binding33Tuesday, 15 January 13
  34. 34. Expression Language§If you want to get clever you can mix and match EL with SSJS§In the Advanced - Custom binding34Tuesday, 15 January 13
  35. 35. Managed Beans§Not as scary as you might think§Made up of two things–Java Class that does something–XML Config to set up the “managed” bit§The idea is that the server looks after creation of the objects for you§So say we want to create an HTML Email...35Tuesday, 15 January 13
  36. 36. Managed Beans§Tony McGuckin contributed the XSnippet: http://bit.ly/xpb_managedbean§It does a single thing, in this case sends an email:36Tuesday, 15 January 13
  37. 37. Managed Beans§Then we set up the XML Configuration§In the faces-config.xml file found in Package Explorer–WebContentWEB-INFfaces-config.xml§We need to define the name of the bean, the Java class being used andthe Scope it will operate with37Tuesday, 15 January 13
  38. 38. Managed Beans§Now we can use the managed bean in our SSJS§There’s a whole session about Managed Beans:–JMP402 - Managed Beans and XPages: Your time is now38Tuesday, 15 January 13
  39. 39. FacesMessage§Often we want to be able to send messages to the browser window§Just add add an “Error Messages” control to your XPage and use thiscode:§In this example the code runs when a button is clicked and shows thecurrent time39Tuesday, 15 January 13
  40. 40. Custom Validators§For complex or common validation we can centralize the logic into Javaclasses using Custom Validators§First we create the Java class:40Tuesday, 15 January 13
  41. 41. Custom Validators§Next we set up the validator configuration in the faces-config.xml file–WebContentWEB-INFfaces-config.xml41Tuesday, 15 January 13
  42. 42. Custom Validators§And finally we can make use of the validator in our XPage42Tuesday, 15 January 13
  43. 43. Apache Commons§Taking the Custom Validator, what if we want “real” validation§Lots of common tasks have already been covered by Apache Commons:http://commons.apache.org/validator/§Import the commons-validator.jar file into WebContentWEB-INFLib§Then right click and “Add to Build Path”43Tuesday, 15 January 13
  44. 44. Apache Commons§Now we can edit our Java class to use the EmailValidator:44Tuesday, 15 January 13
  45. 45. Agenda§Config Tips§Client Side Tips§Server Side Tips§Debugging Tips45Tuesday, 15 January 13
  46. 46. Log File Viewer§A project on OpenNTF by Jakob Majkildehttp://bit.ly/xpb_logfileviewer§Makes watching log files (especially on remote servers) much easier46Tuesday, 15 January 13
  47. 47. Log File Viewer47Tuesday, 15 January 13
  48. 48. Debug Toolbar§A project on OpenNTF by Mark Leusinkhttp://bit.ly/xpb_debugtoolbar§Very useful for following debug messages, timing code and more48Tuesday, 15 January 13
  49. 49. Java Debugging§Built into Domino Designer since 8.5.3§Easy to set up§Add lines to notes.ini on the dev server:JavaEnableDebug=1JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000§Restart the server49Tuesday, 15 January 13
  50. 50. Java Debugging§In Domino Designer switch to the Debug Perspective§Create a new Remote Java Application Debug Configuration50Tuesday, 15 January 13
  51. 51. Java Debugging§Now we can add a breakpoint to our code and load the XPage in abrowser and then step through the code51Tuesday, 15 January 13
  52. 52. SSJS Debugging§Server Side JavaScript debugging is almost exactly the same in Domino 9.0§The notes.ini lines to add are:JavaEnableDebug=1JavascriptEnableDebug=1JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000§There’s a whole session on this:AD202 Debug Server Side Javascript, Java, and XPages Apps Using the SSJSDebuggerM Blout & D OConnor(Wednesday 4:15pm)52Tuesday, 15 January 13
  53. 53. SSJS Debugging§The Debug Configuration will look like this:53Tuesday, 15 January 13
  54. 54. SSJS Debugging§And then we can set a breakpoint in the source XML of our XPage:54Tuesday, 15 January 13
  55. 55. Pasting source code from extension library§‘The prefix "xe" for element "xe:navigator" is not bound.’§This happens when you paste in some source code from one custom control to anotherfor a control that is from the extension library.§The View tag is where you can solve this issue.<xp:view xmlns:xp="http://www.ibm.com/xsp/core"><xp:view xmlns:xp="http://www.ibm.com/xsp/core"xmlns:xe="http://www.ibm.com/xsp/coreex">§Does not happen if you drag and drop from the extension library palette.55Tuesday, 15 January 13
  56. 56. Other Useful Sessions§BP211 - Lessons learned from the world’s largest XPages project§AD204 - How to develop great applications using XPages Design Patterns§AD208 - IBM Lotus Domino XPages Performance in a nutshell§BP201 - Deploying and Managing IBM Lotus Domino XPages Applications§BP202 - XPages Development: Modernize yourself!§BP203 - Limitless Languages in the IBM Social Stack§SHOW112 - Building your first mobile application using XPages56Tuesday, 15 January 13
  57. 57. Questions§???57Tuesday, 15 January 13
  58. 58. Contact Us§Matt White–matthew.white@fclonline.com–@mattwhite§Tim Clark–tim@tc-soft.com–@timsterc58Tuesday, 15 January 13
  59. 59. © 2013 IBM Corporation59Legal disclaimer© IBM Corporation 2013. All Rights Reserved.The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS withoutwarranty of any kind, express or implied. In addition, this information is based on IBM’s current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for any damagesarising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or itssuppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software.References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in this presentation may change atany time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these materials is intended to,nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual environmental costs and performance characteristics may vary bycustomer.Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.Tuesday, 15 January 13