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.
Tips for Building Your First XPages Java Application 
Tweet about this event 
And mention us: @Teamstudio @TLCCLTD 
@mmcga...
@Teamstudio 
teamstudio.com 
@TLCCLTD 
tlcc.com 
Courtney Carter 
Inbound Marketing Specialist 
Teamstudio
Who We Are 
• Teamstudio’s background is in creating tools for 
collaborative computing in mid-size and large 
enterprises...
Teamstudio Unplugged 
• Your mobile Domino server: take your IBM Notes 
apps with you! 
• End-users access Notes applicati...
Unplugged Templates 
• Continuity – Mobile offline access to 
BCM programs 
• OneView Approvals – Expense 
approvals; anyw...
XControls 
• Set of Controls for IBM Domino XPage developers 
working on new XPages apps and on app 
modernization project...
Teamstudio Services 
• Professional services for project management, 
development, administration, and modernization 
o Mo...
• Modernization Services promotion: 
o Now through December 15, sign up to learn about our Modernization Services, and 
be...
1 
#XPages 
Tips for your First Java 
XPages Application 
Your Hosts Today: 
Howard Greenberg 
TLCC 
@TLCCLtd 
Paul Della-...
How can TLCC Help YOU! 
2 
• Private classes at 
your location or 
virtual 
•XPages Development 
•Support Existing Apps 
•...
TLCC Java Courses and Package for XPages Developers 
Java 1 for XPages Development (9.0) 
• Covers the Java Language 
Java...
Upcoming and Recorded Webinars 
4 
• Future webinars for 2015 to be announced later this month 
www.tlcc.com/xpages-webina...
Asking Questions – Q and A at the end 
5 
Use the Orange Arrow button to 
expand the GoToWebinar panel 
Then ask your ques...
Your Presenters Today: 
6 
Graham Acres 
Brytek Systems 
@gacres99 
#XPages 
Mike McGarel 
Czarnowski 
@mmcgarel
AD107: Don’t Put the Cart . . . 
Graham Acres 
 IBM Lotus Notes Developer/Designer 
since v2.1 
 Brytek is an IBM Busine...
AD107: Don’t Put the Cart . . . 
Mike McGarel 
 Collaborative Solutions Developer at 
Czarnowski Display Service, Inc. 
...
AD107: Don’t Put the Cart . . . 
Disclaimer 
We are 
Professionals, but 
NOT Experts (in 
this case anyway) 
 This advic...
AD107: Don’t Put the Cart . . . 
Midwest Biking Inc.
AD107: Don’t Put the Cart . . . 
Agenda 
Where to Begin 
 Planning Your Application 
 Shopping Cart Demo 
 Let’s Look ...
AD107: Don’t Put the Cart . . . 
You Where to Begin? Are Here
AD107: Don’t Put the Cart . . . 
Why Java? 
 XPages is built on Java 
 SSJS is converted to Java 
 Futureproofs YOUR sk...
AD107: Don’t Put the Cart . . . 
“I Don’t Know What I Don’t Know”
AD107: Don’t Put the Cart . . . 
“Checking the Roadmap” 
Websites galore! 
 Blog posts 
 Notes in 9 videos 
 Books 
 ...
AD107: Don’t Put the Cart . . . 
Java “Rules of the Road” 
 Case sensitive 
 Mandatory semicolon; 
 XPages version is J...
AD107: Don’t Put the Cart . . . 
Don’t “Reinvent the Bicycle Wheel” 
 Example: String class has 72 methods!
AD107: Don’t Put the Cart . . . 
Collections 
 You will almost always use collections whenever you 
interact with a datab...
AD107: Don’t Put the Cart . . . 
“Planning your route”
AD107: Don’t Put the Cart . . . 
Application Design 
 Front end UI 
 Functionality 
 Back end structure 
 Client-side ...
AD107: Don’t Put the Cart . . . 
Java Class Design 
 Java classes needed 
 Order 
 Shopping cart 
 Cart item 
 Option...
AD107: Don’t Put the Cart . . . 
Class Elements 
 Properties 
 Often tied to form or document fields, e.g., 
 unit pric...
AD107: Don’t Put the Cart . . . 
Java Beans (a canned explanation) 
A Java object defined by specific standards 
 Public ...
AD107: Don’t Put the Cart . . . 
Sample Bean (outside) 
package com.mbi.shopping; 
import java.io.Serializable; 
/* other ...
AD107: Don’t Put the Cart . . . 
Sample Bean (inside) 
package com.mbi.shopping; 
import java.io.Serializable; 
/* other p...
AD107: Don’t Put the Cart . . . 
Shopping Cart Demo
AD107: Don’t Put the Cart . . . 
ShoppingCart Class 
 Properties: 
private LinkedHashMap<String,CartItem> cart; 
private ...
AD107: Don’t Put the Cart . . . 
LinkedHashMap Class Methods 
 .containsKey() 
 .get() 
 .isEmpty() 
 .put(K key, V va...
AD107: Don’t Put the Cart . . . 
XPage Code for “Add to Cart” Button 
<xp:button value="Add to Cart" id="btnAddToCart"> 
<...
AD107: Don’t Put the Cart . . . 
ShoppingCart Class Code for addCartItem 
public ShoppingCart() { 
this.cart = new LinkedH...
AD107: Don’t Put the Cart . . . 
CartItem Class Properties 
Contains only what’s needed for processing, e.g., 
Name, ID, p...
AD107: Don’t Put the Cart . . . 
CartItem Class Methods 
Mostly getters / setters, e.g., 
public Double getItemQuantity() ...
AD107: Don’t Put the Cart . . . 
CartItem Loading Method 
In ShoppingCart Class: 
CartItem cartItem = new CartItem(); 
car...
AD107: Don’t Put the Cart . . . 
Order Class 
 Managed bean 
 Instantly available 
 Loaded in faces-config.xml file 
Ti...
AD107: Don’t Put the Cart . . . 
Faces-config.xml Sample 
<?xml version="1.0" encoding="UTF-8"?> 
<faces-config> 
<managed...
AD107: Don’t Put the Cart . . . 
Order Class Properties and Methods 
 Contains ShoppingCart property 
Wrapped methods fo...
AD107: Don’t Put the Cart . . . 
Lessons Learned and Cool Tips
AD107: Don’t Put the Cart . . . 
Lesson Learned #1 – Number Field 
 Number value becomes JavaScript number 
(thanks to JS...
AD107: Don’t Put the Cart . . . 
Lesson Learned #2 – Date Fields 
 Java Calendar object
AD107: Don’t Put the Cart . . . 
Lesson Learned #2 – Date Fields
AD107: Don’t Put the Cart . . . 
Lesson Learned #2 – Date Fields
AD107: Don’t Put the Cart . . . 
Lesson Learned #3 – Try / Catch Blocks 
 Error management 
 Different from LotusScript ...
AD107: Don’t Put the Cart . . . 
Lesson Learned #4 – Managed Beans 
 Not every Java object need to be a managed bean 
 W...
AD107: Don’t Put the Cart . . . 
Cool Tip #1 – To Do Reminder 
 Add to your Java code for a handy reminder 
Written as: ...
AD107: Don’t Put the Cart . . . 
Cool Tip #2 – Comparing Strings 
 Here is where your LotusScript background can bite you...
AD107: Don’t Put the Cart . . . 
Resources: Tutorials and Books 
 Tutorial on Collections 
http://docs.oracle.com/javase/...
AD107: Don’t Put the Cart . . . 
Resources: Websites 
 Java 6 API 
http://docs.oracle.com/javase/6/docs/api/ 
 Notes in ...
AD107: Don’t Put the Cart . . . 
Resources: Community Blogs 
 Jesse Gallagher 
https://frostillic.us 
 Nathan Freeman 
h...
AD107: Don’t Put the Cart . . . 
“You’re On Your Way”
AD107: Don’t Put the Cart . . .
AD107: Don’t Put the Cart . . . 
Thank You! 
Graham Acres 
Blog - http://grahamacres.wordpress.com/ 
Twitter - @gacres99 
...
Questions???? 
7 
Use the Orange Arrow button to 
expand the GoToWebinar panel 
Then ask your questions in the 
Questions ...
Question and Answer Time! 
Mike McGarel Graham Acres 
Upcoming Events: 
Paul Della-Nebbia Courtney Carter 
ConnectED, Orl...
Upcoming SlideShare
Loading in …5
×

Tips for Building your First XPages Java Application

1,690 views

Published on

XPages and Java go together like bicycles and great exercise. But much like you wouldn't attempt a hundred mile bicycle ride on your first day, Java is best learned by starting small and building on your accomplishments. Planning, preparation, and realistic goals are keys to becoming proficient at using Java in your XPages applications. Come learn as two long-time developers, Mike and Graham, share their experiences on their Java treks and demonstrate some of what they learned as they build a Java-based shopping cart in an XPages application.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Tips for Building your First XPages Java Application

  1. 1. Tips for Building Your First XPages Java Application Tweet about this event And mention us: @Teamstudio @TLCCLTD @mmcgarel @gacres99 Dec. 2, 2014
  2. 2. @Teamstudio teamstudio.com @TLCCLTD tlcc.com Courtney Carter Inbound Marketing Specialist Teamstudio
  3. 3. Who We Are • Teamstudio’s background is in creating tools for collaborative computing in mid-size and large enterprises, primarily for IBM Notes • Easy-to-use tools for developers and administrators • 2300+ active customers, 47 countries • Offices in US, UK, and Japan • Entered mobile space in 2010 with Unplugged: easy mobilization of Notes apps to Blackberry, Android and iOS
  4. 4. Teamstudio Unplugged • Your mobile Domino server: take your IBM Notes apps with you! • End-users access Notes applications from mobile devices whether online or offline • Leverages the powerful technology of XPages • Unplugged v3.1
  5. 5. Unplugged Templates • Continuity – Mobile offline access to BCM programs • OneView Approvals – Expense approvals; anywhere, anytime • CustomerView – lightweight CRM framework for field sales and field service teams • Contacts – customer information database • Activities – customer activity log • Media – mobile offline file storage and access
  6. 6. XControls • Set of Controls for IBM Domino XPage developers working on new XPages apps and on app modernization projects • Re-write of the Teamstudio Unplugged Controls project, but adds full support for PC browser-based user interfaces as well as mobile interfaces • Enables XPage developers to create controls that are responsive • Learn more: http://xcontrols.org
  7. 7. Teamstudio Services • Professional services for project management, development, administration, and modernization o Modernization Services o Unplugged Developer Assistance Program o Application Upgrade Analysis o Application Complexity Analysis o Application Usage Auditing • http://www.teamstudio.com/solutions/services/
  8. 8. • Modernization Services promotion: o Now through December 15, sign up to learn about our Modernization Services, and be automatically entered to win an iPhone 6.
  9. 9. 1 #XPages Tips for your First Java XPages Application Your Hosts Today: Howard Greenberg TLCC @TLCCLtd Paul Della-Nebbia TLCC @PaulDN
  10. 10. How can TLCC Help YOU! 2 • Private classes at your location or virtual •XPages Development •Support Existing Apps •Administration • Let us help you become an expert XPages developer! • Delivered via Notes • XPages • Development • Admin • User Self- Paced Courses Mentoring Instructor- Led Classes Application Development and Consulting Free Demo Courses!
  11. 11. TLCC Java Courses and Package for XPages Developers Java 1 for XPages Development (9.0) • Covers the Java Language Java 2 for XPages Development • Debugging • Expression Language • JavaBeans and Managed Beans • Third Party Java Libraries • Exporting to PDF and Excel files • On Sale for $599, save $300 Java for XPages Package • Has both Java courses • On Sale for only $999, save $500 3 Sale prices good through 12/31/2014 Click here for more information on the Java courses
  12. 12. Upcoming and Recorded Webinars 4 • Future webinars for 2015 to be announced later this month www.tlcc.com/xpages-webinar View Previous Webinars (use url above)
  13. 13. Asking Questions – Q and A at the end 5 Use the Orange Arrow button to expand the GoToWebinar panel Then ask your questions in the Questions pane! We will answer your questions verbally at the end of the webinar
  14. 14. Your Presenters Today: 6 Graham Acres Brytek Systems @gacres99 #XPages Mike McGarel Czarnowski @mmcgarel
  15. 15. AD107: Don’t Put the Cart . . . Graham Acres  IBM Lotus Notes Developer/Designer since v2.1  Brytek is an IBM Business Partner based in Vancouver, Canada  Currently focus on application development (Social Business, XPages, Mobile)  OpenNTF Contributor  Away from work Cyclist, Ride to Conquer Cancer
  16. 16. AD107: Don’t Put the Cart . . . Mike McGarel  Collaborative Solutions Developer at Czarnowski Display Service, Inc. Working with Notes/Domino since version 4.6 Working on the Web for over 14 years  OpenNTF Contributor  Maintain MWLUG site
  17. 17. AD107: Don’t Put the Cart . . . Disclaimer We are Professionals, but NOT Experts (in this case anyway)  This advice is likely not Best Practices, but it is our experience in learning Java
  18. 18. AD107: Don’t Put the Cart . . . Midwest Biking Inc.
  19. 19. AD107: Don’t Put the Cart . . . Agenda Where to Begin  Planning Your Application  Shopping Cart Demo  Let’s Look at the Code  Lessons Learned and Cool Tips  Resources  Questions
  20. 20. AD107: Don’t Put the Cart . . . You Where to Begin? Are Here
  21. 21. AD107: Don’t Put the Cart . . . Why Java?  XPages is built on Java  SSJS is converted to Java  Futureproofs YOUR skill set  Syntax is not that different from LotusScript ‘LotusScript Dim strName As String strName = “Schwinn” //Java String strName = “Schwinn”;
  22. 22. AD107: Don’t Put the Cart . . . “I Don’t Know What I Don’t Know”
  23. 23. AD107: Don’t Put the Cart . . . “Checking the Roadmap” Websites galore!  Blog posts  Notes in 9 videos  Books  Colleagues  Java APIs  Conference sessions
  24. 24. AD107: Don’t Put the Cart . . . Java “Rules of the Road”  Case sensitive  Mandatory semicolon;  XPages version is Java 6  Data types: Primitive vs. Class (double <> Double) Primitive (lower case), e.g., double, int, char Class (proper case), e.g., Double, Integer, String
  25. 25. AD107: Don’t Put the Cart . . . Don’t “Reinvent the Bicycle Wheel”  Example: String class has 72 methods!
  26. 26. AD107: Don’t Put the Cart . . . Collections  You will almost always use collections whenever you interact with a database  LotusScript has them, e.g., NotesDocumentCollection, ViewEntryCollection  Java has many more, e.g., ArrayList, Vector, HashMap, TreeMap, LinkedHashSet, TreeSet  List – stores index position  Map – has a key-value pairing  Set – no duplicates
  27. 27. AD107: Don’t Put the Cart . . . “Planning your route”
  28. 28. AD107: Don’t Put the Cart . . . Application Design  Front end UI  Functionality  Back end structure  Client-side code  Server-side code
  29. 29. AD107: Don’t Put the Cart . . . Java Class Design  Java classes needed  Order  Shopping cart  Cart item  Optional  Utility  Catalog Order ShoppingCart CCaartrIttIetemm CCaartrIttIetemm CartItem
  30. 30. AD107: Don’t Put the Cart . . . Class Elements  Properties  Often tied to form or document fields, e.g.,  unit price for a cart item  if the cart contains items  Methods  Standard getters / setters  Custom, e.g., calculate cost (quantity x price)
  31. 31. AD107: Don’t Put the Cart . . . Java Beans (a canned explanation) A Java object defined by specific standards  Public Java class  Serializable  Private properties (optional)  Public constructor with no arguments  Public methods
  32. 32. AD107: Don’t Put the Cart . . . Sample Bean (outside) package com.mbi.shopping; import java.io.Serializable; /* other possible libraries */ public class Sample implements Serializable { private static final long serialVersionUID = 1L; private String myText; public Sample() { } public String getMyText() { return myText; } public void setMyText (String txt) { this.myText = txt; } }
  33. 33. AD107: Don’t Put the Cart . . . Sample Bean (inside) package com.mbi.shopping; import java.io.Serializable; /* other possible libraries */ public class Sample implements Serializable { private static final long serialVersionUID = 1L; private String myText; public Sample() { } public String getMyText() { return myText; } public void setMyText (String txt) { this.myText = txt; } }
  34. 34. AD107: Don’t Put the Cart . . . Shopping Cart Demo
  35. 35. AD107: Don’t Put the Cart . . . ShoppingCart Class  Properties: private LinkedHashMap<String,CartItem> cart; private BigDecimal totalCost; Why a LinkedHashMap ?  Keeps the insertion order  Uses a key,value structure  The key can be used on other parts of the page, e.g., "Add to Cart" button rendering
  36. 36. AD107: Don’t Put the Cart . . . LinkedHashMap Class Methods  .containsKey()  .get()  .isEmpty()  .put(K key, V value)  .size()  .values()
  37. 37. AD107: Don’t Put the Cart . . . XPage Code for “Add to Cart” Button <xp:button value="Add to Cart" id="btnAddToCart"> <xp:this.rendered> <![CDATA[#{javascript:var productId = productEntry.getColumnValues()[0]; !Order.containsKey(productId)}]]> </xp:this.rendered> <xp:eventHandler event="onclick" submit="true” refreshMode="partial" refreshId="content"> <xp:this.action> <![CDATA[#{javascript:var id = productEntry.getColumnValues()[0]; var name = productEntry.getColumnValues()[1]; var price = new java.math.BigDecimal(productEntry.getColumnValues()[4].toString()); var qty = new java.lang.Double(1); Order.addCartItem(name,id,price,qty)}]]> </xp:this.action> </xp:eventHandler> </xp:button>
  38. 38. AD107: Don’t Put the Cart . . . ShoppingCart Class Code for addCartItem public ShoppingCart() { this.cart = new LinkedHashMap<String,CartItem>(); totalCost = new BigDecimal(0); } public void addCartItem (String name, String id, BigDecimal price, Double quantity) { try { CartItem cartItem = new CartItem(); cartItem.load(name,id,price,quantity); cart.put(id,cartItem); calcTotalCost(); } catch (Exception ex) { ex.printStackTrace(); } }
  39. 39. AD107: Don’t Put the Cart . . . CartItem Class Properties Contains only what’s needed for processing, e.g., Name, ID, price, quantity, cost: private String itemName; private String itemId; private BigDecimal itemPrice; private Double itemQuantity; private BigDecimal itemCost;
  40. 40. AD107: Don’t Put the Cart . . . CartItem Class Methods Mostly getters / setters, e.g., public Double getItemQuantity() { return itemQuantity; } public void setItemQuantity (Double qty) { this.itemQuantity = qty; }
  41. 41. AD107: Don’t Put the Cart . . . CartItem Loading Method In ShoppingCart Class: CartItem cartItem = new CartItem(); cartItem.load(name,id,price,quantity); cart.put(id,cartItem); In CartItem Class: public void load (String name, String id, BigDecimal price, Double quantity) { setItemName(name); setItemId(id); setItemPrice(price); setItemQuantity(quantity); setItemCost(calcItemCost(quantity)); }
  42. 42. AD107: Don’t Put the Cart . . . Order Class  Managed bean  Instantly available  Loaded in faces-config.xml file Tip: available in 9.0.1 through Domino Designer without Package Explorer. Preferences > Domino Designer > Application Navigator > Application Configuration > Faces-config
  43. 43. AD107: Don’t Put the Cart . . . Faces-config.xml Sample <?xml version="1.0" encoding="UTF-8"?> <faces-config> <managed-bean> <managed-bean-name>Order</managed-bean-name> <managed-bean-class>com.mbi.shopping.Order </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <!--AUTOGEN-START-BUILDER: Automatically generated by IBM Domino Designer. Do not modify.--> <!--AUTOGEN-END-BUILDER: End of automatically generated section--> </faces-config>
  44. 44. AD107: Don’t Put the Cart . . . Order Class Properties and Methods  Contains ShoppingCart property Wrapped methods for easier access, e.g., private ShoppingCart cart; public Order() { this.cart = new ShoppingCart(); } public void addCartItem (String name, String id, BigDecimal price, Double quantity) { this.cart.addCartItem(name,id,price,quantity); } public void removeCartItem (String key) { this.cart.removeCartItem(key); }
  45. 45. AD107: Don’t Put the Cart . . . Lessons Learned and Cool Tips
  46. 46. AD107: Don’t Put the Cart . . . Lesson Learned #1 – Number Field  Number value becomes JavaScript number (thanks to JSF number converter)  Equivalent to Java Double (the class not the primitive)  Originally used Integer class for the item quantity Integer or int reference results in type mismatch error Error not showing up using System.out.println Error display control worked, because problem was on the XPage itself
  47. 47. AD107: Don’t Put the Cart . . . Lesson Learned #2 – Date Fields  Java Calendar object
  48. 48. AD107: Don’t Put the Cart . . . Lesson Learned #2 – Date Fields
  49. 49. AD107: Don’t Put the Cart . . . Lesson Learned #2 – Date Fields
  50. 50. AD107: Don’t Put the Cart . . . Lesson Learned #3 – Try / Catch Blocks  Error management  Different from LotusScript  Not just errors
  51. 51. AD107: Don’t Put the Cart . . . Lesson Learned #4 – Managed Beans  Not every Java object need to be a managed bean  Where a bean is managed is also important  ApplicationScope  SessionScope  ViewScope  RequestScope  Depending on need, may copy from one scope to another  Be careful!
  52. 52. AD107: Don’t Put the Cart . . . Cool Tip #1 – To Do Reminder  Add to your Java code for a handy reminder Written as: TODO in any comment line
  53. 53. AD107: Don’t Put the Cart . . . Cool Tip #2 – Comparing Strings  Here is where your LotusScript background can bite you ‘LotusScript Dim strName As String If (strName = “Schwinn”) Then ‘ do some processing End If //Java String strName = "Schwinn"; if (strName == "Trek") { // do some processing // will always be FALSE! } Use this! if (strName.equals("Trek")) { // do some processing }
  54. 54. AD107: Don’t Put the Cart . . . Resources: Tutorials and Books  Tutorial on Collections http://docs.oracle.com/javase/tutorial/collections/interfaces/index.html  Head First Java
  55. 55. AD107: Don’t Put the Cart . . . Resources: Websites  Java 6 API http://docs.oracle.com/javase/6/docs/api/  Notes in 9 http://www.notesin9.com  OpenNTF http://www.opentf.org  OpenNTF Domino API  Collaboration Today http://collaborationtoday.info  StackOverflow http://stackoverflow.com  How to Program With Java http://www.howtoprogramwithjava.com
  56. 56. AD107: Don’t Put the Cart . . . Resources: Community Blogs  Jesse Gallagher https://frostillic.us  Nathan Freeman http://nathanfreeman.wordpress.com  Paul Withers http://www.intec.co.uk/author/paulwithers/  Declan Lynch http://www.qtzar.com  Tim Tripcony http://www.timtripcony.com/blog.nsf  Niklas Heidloff http://heidloff.net/
  57. 57. AD107: Don’t Put the Cart . . . “You’re On Your Way”
  58. 58. AD107: Don’t Put the Cart . . .
  59. 59. AD107: Don’t Put the Cart . . . Thank You! Graham Acres Blog - http://grahamacres.wordpress.com/ Twitter - @gacres99 Email - graham.acres@brytek.ca Mike McGarel Blog - http://www.bleedyellow.com/blogs/McGarelGramming/ Twitter - @mmcgarel Email - mcgarelgramming@gmail.com
  60. 60. Questions???? 7 Use the Orange Arrow button to expand the GoToWebinar panel Then ask your questions in the Questions panel! Remember, we will answer your questions verbally
  61. 61. Question and Answer Time! Mike McGarel Graham Acres Upcoming Events: Paul Della-Nebbia Courtney Carter ConnectED, Orlando in January Engage, March 30/31 in Ghent, Belgium 8 Teamstudio Questions? contactus@teamstudio.com 877-228-6178 TLCC Questions? howardg@tlcc.com paul@tlcc.com 888-241-8522 or 561-953-0095 Howard Greenberg #XPages @mmcgarel @gacres99 @TLCCLtd @Teamstudio @PaulDN To learn more about Java in XPages: Special offer for webinar attendees on TLCC’s Java Package

×