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.

10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]

3,099 views

Published on

My Lotusphere 2011 SpeedGeeking session - 10 Things You're Not Doing!
Gave this presentation in 5 minutes 13 times [in a row, back to back], and had a blast!

  • Be the first to comment

  • Be the first to like this

10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]

  1. 1. GBS Presents 10 Things You're Not Doing A Developer's Guide to Simple Yet Overlooked Techniques & Resources for the IBM Lotus Domino Application Developer Chris Toohey Guru, GBS
  2. 2. Overview <ul><li>Empowering your “Project Champions” with Wireframes
  3. 3. Employing CSS & JavaScript Frameworks
  4. 4. Coding for the User Agent
  5. 5. “ Progressive Enhancement” for Software Development
  6. 6. Cloud Services Integration
  7. 7. Domino Designer Package Explorer
  8. 8. Controlling the XPage Content Type
  9. 9. Leveraging Pass-Thru Markup in XPages
  10. 10. Dev.Opera
  11. 11. The Lotus Online Community </li></ul>
  12. 12. Empowering your “Project Champions” with Wireframes Include a business owner in the “early stages”: <ul><li>Functional Spec
  13. 13. UI/UX Design </li></ul>“ Project Champions” will evangelize your work, manage scope creep, and feel personally invested in the project!
  14. 14. Employing CSS & JavaScript Frameworks Create rich user experiences and interfaces, maintained by a global community! 3 simple options: <ul><li>“ Inline” as File Resources
  15. 15. Remote/Cloud Hosted src=”http://...”
  16. 16. Domino Server datadominohtml[framework] </li></ul>
  17. 17. Coding for the User Agent XPage with Custom Controls <? xml version = &quot;1.0&quot; encoding = &quot;UTF-8&quot; ?> < xp:view xmlns:xp = &quot;http://www.ibm.com/xsp/core&quot; xmlns:xc = &quot;http://www.ibm.com/xsp/custom&quot; pageTitle = &quot;#{javascript:database.title;}&quot; createForm = &quot;false&quot; > < xp:this.resources > < xp:script src = &quot;/core.jss&quot; clientSide = &quot;false&quot; ></ xp:script > </ xp:this.resources > < xc:index_Android loaded = &quot;${javascript:return render('android');}&quot; ></ xc:index_Android > < xc:index_BlackBerry_OS5 loaded = &quot;${javascript:return render('blackberry');}&quot; ></ xc:index_BlackBerry_OS5 > < xc:index_BlackBerry_OS6 loaded = &quot;${javascript:return render('blackberrywebkit');}&quot; ></ xc:index_BlackBerry_OS6 > < xc:index_Browser loaded = &quot;${javascript:return render('browser');}&quot; ></ xc:index_Browser > < xc:index_iPad loaded = &quot;${javascript:return render('ipad');}&quot; ></ xc:index_iPad > < xc:index_iPhone loaded = &quot;${javascript:return render('iphone');}&quot; ></ xc:index_iPhone > </ xp:view > SSJS render() Function function render(key) { render = false ; var ua = header .get( &quot;User-Agent&quot; ); var ua = ua.toLowerCase(); switch (key) { case &quot;browser&quot; : if (ua.indexOf( 'android' ) == -1 && ua.indexOf( 'iphone' ) == -1 && ua.indexOf( 'ipad' ) == -1 && ua.indexOf( 'blackberry' ) == -1) { render = true ; }; break ; case &quot;blackberrywebkit&quot; : if (ua.indexOf( 'blackberry' ) != -1 && ua.indexOf( 'webkit' ) != -1) { render = true ; }; break ; default : if (ua.indexOf(key) != -1) { var render = true ; } break ; } return render; }
  18. 18. “ Progressive Enhancement” for Software Development Design for “base” functionality across all clients, but provide enhanced features & functionality based on User Agent/Client Device capabilities. Leveraging GPS via JavaScript < script > var clng = getLongitude(); var clat = getLatitude(); var message = document.getElementById(&quot;message&quot;); message.innerHTML=&quot; < li > Longitude: &quot; + clng + &quot; </ li > &quot;; message.innerHTML+=&quot; < li > Latitude: &quot; + clat + &quot; </ li > &quot;; </ script >
  19. 19. Cloud Services Integration Most “Cloud Services” expose their solution via integration APIs... but are often even more simple to employ. REALLY Simple: < iframe width = &quot;425&quot; height = &quot;350&quot; frameborder = &quot;0&quot; scrolling = &quot;no&quot; marginheight = &quot;0&quot; marginwidth = &quot;0&quot; src = &quot;http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;q=dolphin+hotel, +disney&amp;aq=&amp;sll=28.367235,-81.559539&amp;sspn=0.006278,0.011362&amp;ie=UTF8 &amp;rq=1&amp;ev=zo&amp;split=1&amp;t=h&amp;radius=0.41&amp;hq=dolphin+hotel,+disney &amp;hnear=&amp;ll=28.369057,-81.560633&amp;spn=0.003738,0.005783&amp;output=embed&quot; > </ iframe >
  20. 20. Domino Designer Package Explorer Explore your NSFs <ul><ul><li>Application properties
  21. 21. Design elements
  22. 22. Resources
  23. 23. Web content </li></ul></ul>PE != Folders | Directories <ul><ul><li>Folders exist to display content in hierarchy; most not available to OS browsing </li></ul></ul>
  24. 24. Controlling the XPage Content Type One-click Microsoft Excel (or Symphony Spreadsheets) via XPages and SSJS <? xml version = &quot;1.0&quot; encoding = &quot;UTF-8&quot; ?> < xp:view xmlns:xp = &quot;http://www.ibm.com/xsp/core&quot; rendered = &quot;false&quot; > < xp:this.afterRenderResponse ><![CDATA[ #{javascript:var exCon = facesContext.getExternalContext(); var writer = facesContext.getResponseWriter(); var response = exCon.getResponse(); var projects:NotesView = database.getView('projects') var viewNav:NotesViewNavigator = projects.createViewNav(); var viewEnt:NotesViewEntry = viewNav.getFirst(); var output:string = &quot;&quot;; while (viewEnt != null) { output += &quot;<tr>&quot;; output += &quot;<td>&quot; + viewEnt.getColumnValues()[0]; + &quot;</td>&quot;; output += &quot;<td>&quot; + viewEnt.getColumnValues()[2] + &quot;</td>&quot;; output += &quot;<td>&quot; + viewEnt.getColumnValues()[1] + &quot;</td>&quot;; output += &quot;<td>&quot; + viewEnt.getColumnValues()[3] + &quot;</td>&quot;; output += &quot;</tr>&quot;; viewEnt = viewNav.getNext(viewEnt); } response.setContentType(&quot;application/vnd.ms-excel&quot;); response.setHeader(&quot;Content-disposition&quot;, &quot;attachment; filename=projects.xls&quot;); response.setHeader(&quot;Cache-Control&quot;, &quot;no-cache&quot;); writer.write(&quot;<table>&quot;); writer.write(&quot;<thead><tr>&quot;); writer.write(&quot;<td><b>Project</b></td>&quot;); writer.write(&quot;<td><b>Developer</b></td>&quot;); writer.write(&quot;<td><b>Estimate ( Hours )</b></td>&quot;); writer.write(&quot;<td><b>Estimate ( Budget )</b></td>&quot;); writer.write(&quot;</tr></thead>&quot;); writer.write(output); writer.write(&quot;</table>&quot;); writer.endDocument();} ]]></ xp:this.afterRenderResponse > </ xp:view >
  25. 25. Leveraging Pass-Thru Markup in XPages Inline Markup including HTML, CSS, JavaScript, XML combined with native XPages markup: <? xml version = &quot;1.0&quot; encoding = &quot;UTF-8&quot; ?> < xp:view xmlns:xp = &quot;http://www.ibm.com/xsp/core&quot; createForm = &quot;false&quot; pageTitle = &quot;iPages&quot; > < xp:this.data > < xp:dominoDocument var = &quot;thisdoc&quot; formName = &quot;document&quot; ></ xp:dominoDocument > </ xp:this.data > < xp:this.resources > < div id = &quot;topbar&quot; class = &quot;transparent&quot; > < div id = &quot;leftnav&quot; > < a href = &quot;index.xsp&quot; > < img alt = &quot;home&quot; src = &quot;images/home.png&quot; /> </ a > </ div > … Easily adopt Frameworks and extend the RAD [Rapid Application Development] output and “perceived capabilties” of the IBM Lotus Notes Domino Platform!
  26. 26. Dev.Opera HTML, CSS, JavaScript, XML, and more! The premier destination to learn HTML5, CSS3, SVG, JavaScript, and other cutting-edge technologies and techniques from the browser with the Open Web at its core. http://dev.opera.com
  27. 27. The Lotus Online Community Connect with your fellow Lotus IT Professionals online and across the various social networks! http://greenhouse.lotus.com [sametime.lotus.com Sametime] http://bleedyellow.com [community Sametime] http://planetlotus.org [Lotus-themed blogger community] http://twitter.com/LotusTechInfo [Official LTIE Twitter] http://facebook.com/LotusTechInfo [Official LTIE Facebook Fan & Events Page] http://linkedIn.com Groups: Lotus Notes Professionals Lotus Professionals (3500+ Members)
  28. 28. For more... Contact Me Chris Toohey Guru, GBS http://www.gbs.com My blog: dominoGuru.com Social Networking Facebook.com/christoohey Twitter.com/christoohey LinkedIn.com/christoohey

×