SlideShare uma empresa Scribd logo
1 de 59
© 2013 IBM Corporation
BP208 XPages Blast
Matt White | London Developer Co-op
Tim Clark | TC Soft Consulting
Tuesday, 15 January 13
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!
2
Tuesday, 15 January 13
Tim Clark
§Owner of TC Soft Consulting
§IBM Champion
§Prince2 Practitioner (Project Management)
§ITIL certified
§Manager of;
–People
–Projects
–My family ;o)
3
Tuesday, 15 January 13
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 items
4
Tuesday, 15 January 13
Agenda
§Config Tips
§Client Side Tips
§Server Side Tips
§Debugging Tips
5
Tuesday, 15 January 13
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”
6
Tuesday, 15 January 13
Designer Tweaks
§XPages Palette to control which controls
you see in the sidebar (new in 9.0)
7
Tuesday, 15 January 13
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-B
8
Tuesday, 15 January 13
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 from
Applications pane
9
Tuesday, 15 January 13
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 at
http://bit.ly/xpb_github
§We use a client to control the Committing, rollbacks etc, but command line works equally
well
§https://github.com/tcsoft/xpb2013
10
Tuesday, 15 January 13
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=-Xmx256m
vmarg.Xms=-Xms48m
vmarg.Xmca=-Xmca8k
§Also still like this is Domino Designer 9.0 (beta)
11
Tuesday, 15 January 13
Designer Memory Settings
§New settings should be:
vmarg.Xmx=-Xmx1024m
vmarg.Xms=-Xms512m
vmarg.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=swg21617708
12
Tuesday, 15 January 13
Agenda
§Config Tips
§Client Side Tips
§Server Side Tips
§Debugging Tips
13
Tuesday, 15 January 13
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 == 3.2.1.6
–8.5.3 == 3.5.3
–9.0 == 3.6.4
14
Tuesday, 15 January 13
Think Mobile
§Mobile Controls in the Extension Library
§But even if not going that far then it’s always worth setting meta tags
and field types
§Meta tags configure the page for optimal viewing in iOS
§Set them by adding a metadata resource to your XPage:
15
Tuesday, 15 January 13
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 color
16
Tuesday, 15 January 13
Think Mobile
§There is no overhead at all to setting the “type” property of fields so that when you are
using 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
–url
17
Tuesday, 15 January 13
Use jQuery
§If you want to use the most popular JavaScript framework on the Internet add jQuery to
your 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 comes
to XPages (Thursday 8:30am Swan - SW4)
§Gives access to huge number of resources in your applications
§Code is often easier to write (ymmv!)
18
Tuesday, 15 January 13
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 your
application.
19
Tuesday, 15 January 13
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 widgets
20
Tuesday, 15 January 13
Use Bootstrap
21
Tuesday, 15 January 13
Use Bootstrap
22
Tuesday, 15 January 13
Agenda
§Config Tips
§Client Side Tips
§Server Side Tips
§Debugging Tips
23
Tuesday, 15 January 13
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:
24
Tuesday, 15 January 13
Using Themes
§Using the Theme ID we can create our own sub types of field:
§Or we can add custom classes to the <body>
25
Tuesday, 15 January 13
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 example
26
Tuesday, 15 January 13
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>
27
Tuesday, 15 January 13
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 to
edit it
§We can use applicationScope variables to store a Java Hashmap of who has locked
individual documents
28
Tuesday, 15 January 13
Document Locking
function 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;
}
...
29
Tuesday, 15 January 13
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;
}
}
}
}
30
Tuesday, 15 January 13
Document Locking
function 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;
}
31
Tuesday, 15 January 13
Document Locking
32
Tuesday, 15 January 13
Expression Language
§You’re probably already using it even if you don’t realize it with Simple
Data Binding
§It’s just a simple shorthand to access properties quickly
§You just need to use the Advanced - Expression Language binding
33
Tuesday, 15 January 13
Expression Language
§If you want to get clever you can mix and match EL with SSJS
§In the Advanced - Custom binding
34
Tuesday, 15 January 13
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...
35
Tuesday, 15 January 13
Managed Beans
§Tony McGuckin contributed the XSnippet: http://bit.ly/xpb_managedbean
§It does a single thing, in this case sends an email:
36
Tuesday, 15 January 13
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 and
the Scope it will operate with
37
Tuesday, 15 January 13
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 now
38
Tuesday, 15 January 13
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 this
code:
§In this example the code runs when a button is clicked and shows the
current time
39
Tuesday, 15 January 13
Custom Validators
§For complex or common validation we can centralize the logic into Java
classes using Custom Validators
§First we create the Java class:
40
Tuesday, 15 January 13
Custom Validators
§Next we set up the validator configuration in the faces-config.xml file
–WebContentWEB-INFfaces-config.xml
41
Tuesday, 15 January 13
Custom Validators
§And finally we can make use of the validator in our XPage
42
Tuesday, 15 January 13
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”
43
Tuesday, 15 January 13
Apache Commons
§Now we can edit our Java class to use the EmailValidator:
44
Tuesday, 15 January 13
Agenda
§Config Tips
§Client Side Tips
§Server Side Tips
§Debugging Tips
45
Tuesday, 15 January 13
Log File Viewer
§A project on OpenNTF by Jakob Majkilde
http://bit.ly/xpb_logfileviewer
§Makes watching log files (especially on remote servers) much easier
46
Tuesday, 15 January 13
Log File Viewer
47
Tuesday, 15 January 13
Debug Toolbar
§A project on OpenNTF by Mark Leusink
http://bit.ly/xpb_debugtoolbar
§Very useful for following debug messages, timing code and more
48
Tuesday, 15 January 13
Java Debugging
§Built into Domino Designer since 8.5.3
§Easy to set up
§Add lines to notes.ini on the dev server:
JavaEnableDebug=1
JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000
§Restart the server
49
Tuesday, 15 January 13
Java Debugging
§In Domino Designer switch to the Debug Perspective
§Create a new Remote Java Application Debug Configuration
50
Tuesday, 15 January 13
Java Debugging
§Now we can add a breakpoint to our code and load the XPage in a
browser and then step through the code
51
Tuesday, 15 January 13
SSJS Debugging
§Server Side JavaScript debugging is almost exactly the same in Domino 9.0
§The notes.ini lines to add are:
JavaEnableDebug=1
JavascriptEnableDebug=1
JavaDebugOptions=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 SSJS
Debugger
M Blout & D O'Connor
(Wednesday 4:15pm)
52
Tuesday, 15 January 13
SSJS Debugging
§The Debug Configuration will look like this:
53
Tuesday, 15 January 13
SSJS Debugging
§And then we can set a breakpoint in the source XML of our XPage:
54
Tuesday, 15 January 13
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 another
for 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.
55
Tuesday, 15 January 13
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 XPages
56
Tuesday, 15 January 13
Questions
§???
57
Tuesday, 15 January 13
Contact Us
§Matt White
–matthew.white@fclonline.com
–@mattwhite
§Tim Clark
–tim@tc-soft.com
–@timsterc
58
Tuesday, 15 January 13
© 2013 IBM Corporation
59
Legal 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 without
warranty 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 damages
arising 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 its
suppliers 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 at
any 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 by
customer.
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

Mais conteúdo relacionado

Mais procurados

Entwicker camp2007 blackberry-workshop
Entwicker camp2007 blackberry-workshopEntwicker camp2007 blackberry-workshop
Entwicker camp2007 blackberry-workshopBill Buchan
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMichael Smith
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!Craig Schumann
 
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014Kathy Brown
 
soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch
 
BP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesBP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesedm00se
 
WPCampus Presentation - WordPress Troubleshooting Techniques | InMotion Hosting
WPCampus Presentation - WordPress Troubleshooting Techniques | InMotion HostingWPCampus Presentation - WordPress Troubleshooting Techniques | InMotion Hosting
WPCampus Presentation - WordPress Troubleshooting Techniques | InMotion HostingJohnPaulBriones
 
Yes, It's Number One it's TOTP!
Yes, It's Number One it's TOTP!Yes, It's Number One it's TOTP!
Yes, It's Number One it's TOTP!Keith Brooks
 
Optimizing Browser Rendering
Optimizing Browser RenderingOptimizing Browser Rendering
Optimizing Browser Renderingmichael.labriola
 
Lessons learned from the worlds largest XPage project
Lessons learned from the worlds largest XPage projectLessons learned from the worlds largest XPage project
Lessons learned from the worlds largest XPage projectMark Roden
 
Front-end optimisation & jQuery Internals
Front-end optimisation & jQuery InternalsFront-end optimisation & jQuery Internals
Front-end optimisation & jQuery InternalsArtur Cistov
 
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
BP204 It's Not Infernal: Dante's Nine Circles of XPages HeavenBP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
BP204 It's Not Infernal: Dante's Nine Circles of XPages HeavenMichael McGarel
 
Using WordPress as an Application Framework
Using WordPress as an Application FrameworkUsing WordPress as an Application Framework
Using WordPress as an Application FrameworkTom Willmot
 
Html5 tutorial for beginners
Html5 tutorial for beginnersHtml5 tutorial for beginners
Html5 tutorial for beginnersSingsys Pte Ltd
 
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3Kathy Brown
 
IBM Connections Adminblast
IBM Connections AdminblastIBM Connections Adminblast
IBM Connections AdminblastLetsConnect
 

Mais procurados (20)

Up to Speed on HTML 5 and CSS 3
Up to Speed on HTML 5 and CSS 3Up to Speed on HTML 5 and CSS 3
Up to Speed on HTML 5 and CSS 3
 
Entwicker camp2007 blackberry-workshop
Entwicker camp2007 blackberry-workshopEntwicker camp2007 blackberry-workshop
Entwicker camp2007 blackberry-workshop
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!
 
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
 
soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5
 
Html5 apis
Html5 apisHtml5 apis
Html5 apis
 
BP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesBP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPages
 
WPCampus Presentation - WordPress Troubleshooting Techniques | InMotion Hosting
WPCampus Presentation - WordPress Troubleshooting Techniques | InMotion HostingWPCampus Presentation - WordPress Troubleshooting Techniques | InMotion Hosting
WPCampus Presentation - WordPress Troubleshooting Techniques | InMotion Hosting
 
Yes, It's Number One it's TOTP!
Yes, It's Number One it's TOTP!Yes, It's Number One it's TOTP!
Yes, It's Number One it's TOTP!
 
Optimizing Browser Rendering
Optimizing Browser RenderingOptimizing Browser Rendering
Optimizing Browser Rendering
 
Html5
Html5Html5
Html5
 
CDNs para el SharePoint Framework (SPFx)
CDNs para el SharePoint Framework (SPFx)CDNs para el SharePoint Framework (SPFx)
CDNs para el SharePoint Framework (SPFx)
 
Lessons learned from the worlds largest XPage project
Lessons learned from the worlds largest XPage projectLessons learned from the worlds largest XPage project
Lessons learned from the worlds largest XPage project
 
Front-end optimisation & jQuery Internals
Front-end optimisation & jQuery InternalsFront-end optimisation & jQuery Internals
Front-end optimisation & jQuery Internals
 
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
BP204 It's Not Infernal: Dante's Nine Circles of XPages HeavenBP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
 
Using WordPress as an Application Framework
Using WordPress as an Application FrameworkUsing WordPress as an Application Framework
Using WordPress as an Application Framework
 
Html5 tutorial for beginners
Html5 tutorial for beginnersHtml5 tutorial for beginners
Html5 tutorial for beginners
 
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3
 
IBM Connections Adminblast
IBM Connections AdminblastIBM Connections Adminblast
IBM Connections Adminblast
 

Destaque

Responsive web design
Responsive  web designResponsive  web design
Responsive web designhanifeee
 
Heat treatment definition codex alimentarius
Heat treatment definition codex alimentariusHeat treatment definition codex alimentarius
Heat treatment definition codex alimentariuschanel19
 
HASNI BIN AHMAD LATEST CV2016
HASNI BIN AHMAD LATEST CV2016HASNI BIN AHMAD LATEST CV2016
HASNI BIN AHMAD LATEST CV2016Hasni Ahmad
 
3.2 Revolusi dalam dunia pendidikan
3.2 Revolusi dalam dunia pendidikan3.2 Revolusi dalam dunia pendidikan
3.2 Revolusi dalam dunia pendidikanHari Sugiarto
 
Designing well known websites with ADF Rich Faces
Designing well known websites with ADF Rich FacesDesigning well known websites with ADF Rich Faces
Designing well known websites with ADF Rich Facesmaikorocha
 

Destaque (8)

Responsive web design
Responsive  web designResponsive  web design
Responsive web design
 
Aprendizaje autonomo
Aprendizaje autonomoAprendizaje autonomo
Aprendizaje autonomo
 
CV-Mahipal Singh
CV-Mahipal SinghCV-Mahipal Singh
CV-Mahipal Singh
 
Heat treatment definition codex alimentarius
Heat treatment definition codex alimentariusHeat treatment definition codex alimentarius
Heat treatment definition codex alimentarius
 
HASNI BIN AHMAD LATEST CV2016
HASNI BIN AHMAD LATEST CV2016HASNI BIN AHMAD LATEST CV2016
HASNI BIN AHMAD LATEST CV2016
 
3.2 Revolusi dalam dunia pendidikan
3.2 Revolusi dalam dunia pendidikan3.2 Revolusi dalam dunia pendidikan
3.2 Revolusi dalam dunia pendidikan
 
Mitra
MitraMitra
Mitra
 
Designing well known websites with ADF Rich Faces
Designing well known websites with ADF Rich FacesDesigning well known websites with ADF Rich Faces
Designing well known websites with ADF Rich Faces
 

Semelhante a XPages Blast - Lotusphere 2013

XPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and MoreXPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and MoreTeamstudio
 
Frontend Engineer Toolbox
Frontend Engineer ToolboxFrontend Engineer Toolbox
Frontend Engineer ToolboxYnon Perek
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSPablo Godel
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AnglePablo Godel
 
Pain Driven Development by Alexandr Sugak
Pain Driven Development by Alexandr SugakPain Driven Development by Alexandr Sugak
Pain Driven Development by Alexandr SugakSigma Software
 
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
AD113  Speed Up Your Applications w/ Nginx and PageSpeedAD113  Speed Up Your Applications w/ Nginx and PageSpeed
AD113 Speed Up Your Applications w/ Nginx and PageSpeededm00se
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JSFestUA
 
From pets to cattle - powered by CoreOS, docker, Mesos & nginx
From pets to cattle - powered by CoreOS, docker, Mesos & nginxFrom pets to cattle - powered by CoreOS, docker, Mesos & nginx
From pets to cattle - powered by CoreOS, docker, Mesos & nginxQAware GmbH
 
implement lighthouse-ci with your web development workflow
implement lighthouse-ci with your web development workflowimplement lighthouse-ci with your web development workflow
implement lighthouse-ci with your web development workflowWordPress
 
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Serdar Basegmez
 
Upstate CSCI 450 jQuery
Upstate CSCI 450 jQueryUpstate CSCI 450 jQuery
Upstate CSCI 450 jQueryDanWooster1
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendVlad Fedosov
 
XPages: No Experience Needed
XPages: No Experience NeededXPages: No Experience Needed
XPages: No Experience NeededKathy Brown
 
DevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesDevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesFab L
 
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdfAstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdfFarHanWasif1
 
Spring '20 Developer Release Highlights
Spring '20 Developer Release HighlightsSpring '20 Developer Release Highlights
Spring '20 Developer Release HighlightsPeter Knolle
 
Advanced workflows for mobile web design and development
Advanced workflows for mobile web design and developmentAdvanced workflows for mobile web design and development
Advanced workflows for mobile web design and developmentbrucebowman
 
DevSecCon Singapore 2018 - Remove developers’ shameful secrets or simply rem...
DevSecCon Singapore 2018 -  Remove developers’ shameful secrets or simply rem...DevSecCon Singapore 2018 -  Remove developers’ shameful secrets or simply rem...
DevSecCon Singapore 2018 - Remove developers’ shameful secrets or simply rem...DevSecCon
 
More efficient, usable web
More efficient, usable webMore efficient, usable web
More efficient, usable webChris Mills
 
Use Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile AppsUse Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile AppsNathan Smith
 

Semelhante a XPages Blast - Lotusphere 2013 (20)

XPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and MoreXPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and More
 
Frontend Engineer Toolbox
Frontend Engineer ToolboxFrontend Engineer Toolbox
Frontend Engineer Toolbox
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJS
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New Angle
 
Pain Driven Development by Alexandr Sugak
Pain Driven Development by Alexandr SugakPain Driven Development by Alexandr Sugak
Pain Driven Development by Alexandr Sugak
 
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
AD113  Speed Up Your Applications w/ Nginx and PageSpeedAD113  Speed Up Your Applications w/ Nginx and PageSpeed
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
 
From pets to cattle - powered by CoreOS, docker, Mesos & nginx
From pets to cattle - powered by CoreOS, docker, Mesos & nginxFrom pets to cattle - powered by CoreOS, docker, Mesos & nginx
From pets to cattle - powered by CoreOS, docker, Mesos & nginx
 
implement lighthouse-ci with your web development workflow
implement lighthouse-ci with your web development workflowimplement lighthouse-ci with your web development workflow
implement lighthouse-ci with your web development workflow
 
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
Engage 2022: The Superpower of Integrating External APIs for Notes and Domino...
 
Upstate CSCI 450 jQuery
Upstate CSCI 450 jQueryUpstate CSCI 450 jQuery
Upstate CSCI 450 jQuery
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
 
XPages: No Experience Needed
XPages: No Experience NeededXPages: No Experience Needed
XPages: No Experience Needed
 
DevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesDevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation Slides
 
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdfAstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
AstroLabs_Academy_Learning_to_Code-Coding_Bootcamp_Day1.pdf
 
Spring '20 Developer Release Highlights
Spring '20 Developer Release HighlightsSpring '20 Developer Release Highlights
Spring '20 Developer Release Highlights
 
Advanced workflows for mobile web design and development
Advanced workflows for mobile web design and developmentAdvanced workflows for mobile web design and development
Advanced workflows for mobile web design and development
 
DevSecCon Singapore 2018 - Remove developers’ shameful secrets or simply rem...
DevSecCon Singapore 2018 -  Remove developers’ shameful secrets or simply rem...DevSecCon Singapore 2018 -  Remove developers’ shameful secrets or simply rem...
DevSecCon Singapore 2018 - Remove developers’ shameful secrets or simply rem...
 
More efficient, usable web
More efficient, usable webMore efficient, usable web
More efficient, usable web
 
Use Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile AppsUse Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile Apps
 

Último

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 

Último (20)

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 

XPages Blast - Lotusphere 2013

  • 1. © 2013 IBM Corporation BP208 XPages Blast Matt White | London Developer Co-op Tim Clark | TC Soft Consulting Tuesday, 15 January 13
  • 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! 2 Tuesday, 15 January 13
  • 3. Tim Clark §Owner of TC Soft Consulting §IBM Champion §Prince2 Practitioner (Project Management) §ITIL certified §Manager of; –People –Projects –My family ;o) 3 Tuesday, 15 January 13
  • 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 items 4 Tuesday, 15 January 13
  • 5. Agenda §Config Tips §Client Side Tips §Server Side Tips §Debugging Tips 5 Tuesday, 15 January 13
  • 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” 6 Tuesday, 15 January 13
  • 7. Designer Tweaks §XPages Palette to control which controls you see in the sidebar (new in 9.0) 7 Tuesday, 15 January 13
  • 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-B 8 Tuesday, 15 January 13
  • 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 from Applications pane 9 Tuesday, 15 January 13
  • 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 at http://bit.ly/xpb_github §We use a client to control the Committing, rollbacks etc, but command line works equally well §https://github.com/tcsoft/xpb2013 10 Tuesday, 15 January 13
  • 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=-Xmx256m vmarg.Xms=-Xms48m vmarg.Xmca=-Xmca8k §Also still like this is Domino Designer 9.0 (beta) 11 Tuesday, 15 January 13
  • 12. Designer Memory Settings §New settings should be: vmarg.Xmx=-Xmx1024m vmarg.Xms=-Xms512m vmarg.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=swg21617708 12 Tuesday, 15 January 13
  • 13. Agenda §Config Tips §Client Side Tips §Server Side Tips §Debugging Tips 13 Tuesday, 15 January 13
  • 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 == 3.2.1.6 –8.5.3 == 3.5.3 –9.0 == 3.6.4 14 Tuesday, 15 January 13
  • 15. Think Mobile §Mobile Controls in the Extension Library §But even if not going that far then it’s always worth setting meta tags and field types §Meta tags configure the page for optimal viewing in iOS §Set them by adding a metadata resource to your XPage: 15 Tuesday, 15 January 13
  • 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 color 16 Tuesday, 15 January 13
  • 17. Think Mobile §There is no overhead at all to setting the “type” property of fields so that when you are using 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 –url 17 Tuesday, 15 January 13
  • 18. Use jQuery §If you want to use the most popular JavaScript framework on the Internet add jQuery to your 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 comes to XPages (Thursday 8:30am Swan - SW4) §Gives access to huge number of resources in your applications §Code is often easier to write (ymmv!) 18 Tuesday, 15 January 13
  • 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 your application. 19 Tuesday, 15 January 13
  • 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 widgets 20 Tuesday, 15 January 13
  • 23. Agenda §Config Tips §Client Side Tips §Server Side Tips §Debugging Tips 23 Tuesday, 15 January 13
  • 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: 24 Tuesday, 15 January 13
  • 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> 25 Tuesday, 15 January 13
  • 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 example 26 Tuesday, 15 January 13
  • 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> 27 Tuesday, 15 January 13
  • 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 to edit it §We can use applicationScope variables to store a Java Hashmap of who has locked individual documents 28 Tuesday, 15 January 13
  • 29. Document Locking function 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; } ... 29 Tuesday, 15 January 13
  • 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; } } } } 30 Tuesday, 15 January 13
  • 31. Document Locking function 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; } 31 Tuesday, 15 January 13
  • 33. Expression Language §You’re probably already using it even if you don’t realize it with Simple Data Binding §It’s just a simple shorthand to access properties quickly §You just need to use the Advanced - Expression Language binding 33 Tuesday, 15 January 13
  • 34. Expression Language §If you want to get clever you can mix and match EL with SSJS §In the Advanced - Custom binding 34 Tuesday, 15 January 13
  • 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... 35 Tuesday, 15 January 13
  • 36. Managed Beans §Tony McGuckin contributed the XSnippet: http://bit.ly/xpb_managedbean §It does a single thing, in this case sends an email: 36 Tuesday, 15 January 13
  • 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 and the Scope it will operate with 37 Tuesday, 15 January 13
  • 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 now 38 Tuesday, 15 January 13
  • 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 this code: §In this example the code runs when a button is clicked and shows the current time 39 Tuesday, 15 January 13
  • 40. Custom Validators §For complex or common validation we can centralize the logic into Java classes using Custom Validators §First we create the Java class: 40 Tuesday, 15 January 13
  • 41. Custom Validators §Next we set up the validator configuration in the faces-config.xml file –WebContentWEB-INFfaces-config.xml 41 Tuesday, 15 January 13
  • 42. Custom Validators §And finally we can make use of the validator in our XPage 42 Tuesday, 15 January 13
  • 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” 43 Tuesday, 15 January 13
  • 44. Apache Commons §Now we can edit our Java class to use the EmailValidator: 44 Tuesday, 15 January 13
  • 45. Agenda §Config Tips §Client Side Tips §Server Side Tips §Debugging Tips 45 Tuesday, 15 January 13
  • 46. Log File Viewer §A project on OpenNTF by Jakob Majkilde http://bit.ly/xpb_logfileviewer §Makes watching log files (especially on remote servers) much easier 46 Tuesday, 15 January 13
  • 48. Debug Toolbar §A project on OpenNTF by Mark Leusink http://bit.ly/xpb_debugtoolbar §Very useful for following debug messages, timing code and more 48 Tuesday, 15 January 13
  • 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=1 JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000 §Restart the server 49 Tuesday, 15 January 13
  • 50. Java Debugging §In Domino Designer switch to the Debug Perspective §Create a new Remote Java Application Debug Configuration 50 Tuesday, 15 January 13
  • 51. Java Debugging §Now we can add a breakpoint to our code and load the XPage in a browser and then step through the code 51 Tuesday, 15 January 13
  • 52. SSJS Debugging §Server Side JavaScript debugging is almost exactly the same in Domino 9.0 §The notes.ini lines to add are: JavaEnableDebug=1 JavascriptEnableDebug=1 JavaDebugOptions=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 SSJS Debugger M Blout & D O'Connor (Wednesday 4:15pm) 52 Tuesday, 15 January 13
  • 53. SSJS Debugging §The Debug Configuration will look like this: 53 Tuesday, 15 January 13
  • 54. SSJS Debugging §And then we can set a breakpoint in the source XML of our XPage: 54 Tuesday, 15 January 13
  • 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 another for 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. 55 Tuesday, 15 January 13
  • 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 XPages 56 Tuesday, 15 January 13
  • 58. Contact Us §Matt White –matthew.white@fclonline.com –@mattwhite §Tim Clark –tim@tc-soft.com –@timsterc 58 Tuesday, 15 January 13
  • 59. © 2013 IBM Corporation 59 Legal 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 without warranty 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 damages arising 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 its suppliers 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 at any 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 by customer. 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