It is not uncommon for Notes client developers to feel intimidated by the wide range of technologies available when modernizing an existing portfolio of applications with XPages. In this 2-hour workshop we will provide a series of 20-minute introductions to many of these new and emerging technologies. Learn about Java, Beans, REST Services, Bootstrap, Mobile Controls, data visualization and a whole lot more.
3. IBM Business
Partner
Based In
Atlanta, GA
IBM
Champions
Average 20
Years
Experience
IBM Notes
Speakers
Bloggers
Presenters
Member
OpenNTF
(Co-Founder)
Modernizing
Notes
Application
4. Modern Domino
A Quick Start Guide to Modern Web Development
Java Graph Databases REST Services Data Visualization
Native Applications Bootstrap Mobile Controls SSJS
5. Modern Domino
Related Sessions
Wednesday
• 1:00 - Modern Domino (Nathan Freeman, Peter Presnell)
• 3:00 - Build A Bean Workshop (Devin Olson, Mike McGarel)
Thursday
• 1:00 - Don't Put the Cart Before the Source: Tips for Building Your First XPages Java Application
(Mike McGarel, Graham Acres)
• 4:30 - ATLUG Comes To You (Nathan Freeman, Devin Olson, Peter Presnell)
Friday
• 10:15 - Take a REST (Brian Moore)
• 11:30 - The XPages Mobile Controls: What's New In Notes 9.0.1 (Graham Acres)
• 1:30 - Building a Structured App With XPages Scaffolding (Jesse Gallagher)
• 3:00 - Write once, run anywhere - Angular.js in XPages (Mark Roden)
20. Properties
Property Get A As String
Property Set A As String
Property Get A As Boolean
public String getA()
public void setA(String a)
public boolean isA ()
22. Methods
Sub A()
Function A() As Boolean
A = true
End Function
Function B(p1 As String) As String
public void A()
public boolean A() {
return true;
}
Public String B(String p1)
27. For Statement
Dim i As Integer
For i = 1 To 10
Print "Count is: ”,i
Next i
for (int i=1;i<=10;i++) {
System.out.println(“Count is: “ + i);
}
28. Document Looping
Dim Doc As NotesDocument
Set Doc = View.getFirstDocument()
While (Not Doc Is Nothing)
…
Set Doc = View.GetNextDocument(Doc)
Wend
for (Document doc: view.getAllDocuments()) {
…
}
32. Gotchas
Casing Ignored
Automatic garbage collection
Statements end with EOL
Code blocked by End statement
Variables global to Sub
Object variable not set
Case Sensitive
Recycle required*
Statements end with ;
Code blocked by { and }
Variables scoped to code block
Null pointer exception
* Handled by OpenNTF Domino API
33.
34. OF
THE
RISE GRAPH
Keith Strickland
Red Pill Development
89. DominoData Service
Notes 8.5.3
The growing importance of legal in our company can be observed by the amount of space we now devote to the following message….
133. CSSCascading Style Sheets
Global CSS settings, fundamental HTML elements styled and
enhanced with extensible classes, and an advanced grid system.
160. Bootstrapping
with Twitter Bootstrap
Responsive Layouts
CSS
Components
JavaScript
Font Awesome
Select2
Themes
Bootstrap4XPages
161. Mobile Controls
Modern Domino: Gaining Control with XPages Mobile
Single Page Application
Application Page
Page Heading
Data View
Form Table
Form Layout Row
162. Single Page Application
<xe:singlePageApp>
Property Description
id Unique identifier
selectedPageName The initial mobile page to be displayed (Required)
163. Application Page
<xe:appPage>
Property Description
id Unique identifier
pageName The name used to identify the page
resetContent True: Page content is recreated each time the page is displayed
166. Page Heading
<xe:djxmHeading>
Property Description
label Text to be displayed in header
back Text to be displayed in the back button
moveTo Application page to navigate to when back button is pressed
169. Data View
<xe:dataView>
Property Description
data Datasource used to provide data for the view
pageName Page used to open the document when the summary label is selected
summaryColumn Defines the column used for the summary label
173. Form Layout Row
<xe:formRow>
Property Description
for Id of input control used to edit the data
label Label to be associated with the input control
176. Mobile Controls
Modern Domino: Gaining Control with XPages Mobile
Single Page Application
Application Page
Page Heading
Data View
Form Table
Form Layout Row
178. A brief history of com.ibm.jscript
Began life
as Trilog’s
FlowBuilder
Internally, variable types are prefixed
with ‘FBS’ which is “FlowBuilderScript”
Acquired by IBM
to become the
foundation of
XPages
179. 14 Year Legacy!
“All in this file are in conformance
with ECMAScript Language
Specification Edition 3 24-Mar-
00”
184. Ah! .prototype?
• Hazardous
• Prototype changes are SERVER-WIDE,
even if they originate from a single custom
control
• Prototype functions can be used carelessly
or maliciously to redefine language features
185. Type declaration?
• :NotesDocument and :java.util.Map are just
EDITOR instructions
• Incorrect usage can create accidental
block-level vars
186. When do you see errors?
When you build?
When you run?
When your users do?
187. But Javascript is popular!
• Modern Javascript is popular
• node.js, jQuery, Angular.js, Backbone,
Marionette, Sencha, Mongo, Rx
• All require JS 1.7+
• SSJS was written for the Netscape era
188. What is it really?
Proprietary
Closed
Frozen
Outdated
Buggy
When building an application that uses the mobile controls you will typically be using an Xpage that has a Single Application Page control.
Within this single application page we are going to create one or more Mobile page controls.
This is what allows the seamless transition between pages that is a common design aspect of many mobile applications and mirrors the way native mobile applications are built..
It is necessary to nominate one of these Mobile Pages to be the initial page displayed when the XPage is opened.
The first, and most important aspect of building a mobile application is deciding the number of Mobile pages that are going to be used and how the navigation will occur between these pages.
Each Mobile Page is assigned a pageName. These must be unique in order to prevent potential navigation problems.
By default the content of each page is loaded as part of a partial refresh when the page is navigated to for the first time.
If you look at the HTML sent to your browser you will normally see the content of all other pages as an empty div.
The load strategy can be controlled using the autocreate and resetContent properties of each page.
If the content of a page is dynamic based upon actions the user has (or will take) it is a good idea to cause the content to be recreated each time the page is displayed.
Be careful though… This strategy can cause issues when the page is refreshed or is navigated back to from subsequent pages. Document data sources may have been recycled which is why it is often a good strategy to bind pages to Object Data Sources that link to beans.
The first, and most important aspect of building a mobile application is deciding the number of Mobile pages that are going to be used and how the navigation will occur between these pages.
Each Mobile Page is assigned a pageName. These must be unique in order to prevent potential navigation problems.
By default the content of each page is loaded as part of a partial refresh when the page is navigated to for the first time.
If you look at the HTML sent to your browser you will normally see the content of all other pages as an empty div.
The load strategy can be controlled using the autocreate and resetContent properties of each page.
If the content of a page is dynamic based upon actions the user has (or will take) it is a good idea to cause the content to be recreated each time the page is displayed.
Be careful though… This strategy can cause issues when the page is refreshed or is navigated back to from subsequent pages. Document data sources may have been recycled which is why it is often a good strategy to bind pages to Object Data Sources that link to beans.
The first, and most important aspect of building a mobile application is deciding the number of Mobile pages that are going to be used and how the navigation will occur between these pages.
Each Mobile Page is assigned a pageName. These must be unique in order to prevent potential navigation problems.
By default the content of each page is loaded as part of a partial refresh when the page is navigated to for the first time.
If you look at the HTML sent to your browser you will normally see the content of all other pages as an empty div.
The load strategy can be controlled using the autocreate and resetContent properties of each page.
If the content of a page is dynamic based upon actions the user has (or will take) it is a good idea to cause the content to be recreated each time the page is displayed.
Be careful though… This strategy can cause issues when the page is refreshed or is navigated back to from subsequent pages. Document data sources may have been recycled which is why it is often a good strategy to bind pages to Object Data Sources that link to beans.
The label psroperty defines the text to appear in the heading while the back property is used to defined the text for a back button.
The moveTo property is used to define the Mobile page to naviagate to when the back button is pressed.
The type of transition can be defined for the back button.
A facet (actionFacet) is used to populate one or more additional actions on the right of the heading.
Notes: An onShow event was available in beta but was removed in the official (non-OpenNTF) version that was eventually released as part of 8.5.3 UP1.
The label psroperty defines the text to appear in the heading while the back property is used to defined the text for a back button.
The moveTo property is used to define the Mobile page to naviagate to when the back button is pressed.
The type of transition can be defined for the back button.
A facet (actionFacet) is used to populate one or more additional actions on the right of the heading.
Notes: An onShow event was available in beta but was removed in the official (non-OpenNTF) version that was eventually released as part of 8.5.3 UP1.
The label psroperty defines the text to appear in the heading while the back property is used to defined the text for a back button.
The moveTo property is used to define the Mobile page to naviagate to when the back button is pressed.
The type of transition can be defined for the back button.
A facet (actionFacet) is used to populate one or more additional actions on the right of the heading.
Notes: An onShow event was available in beta but was removed in the official (non-OpenNTF) version that was eventually released as part of 8.5.3 UP1.
Here are some of the properties that can be specified for a dataview
Many other properties are available, but most of the ones not shown here do not apply to the mobile theme
Here are some of the properties that can be specified for a dataview
Many other properties are available, but most of the ones not shown here do not apply to the mobile theme
Here are some of the properties that can be specified for a dataview
Many other properties are available, but most of the ones not shown here do not apply to the mobile theme
The Form table is a little like the basic HTML table.
It has a Form Table outer control along with rows and columns.
We will not be covering FormColumns in this session as they are not well suited for use with mobile applications
We can assign a title to the table using the formTitle property
FormDescription can be used to add extra information which is displayed below the title.
We can disable to use of Required Marks
fieldHelp and labelPosition are not fully supported in a mobile device so only use those in conjunction with the standard XPages themes.
With a Form Table we will usually add one or more rows.
Label is used to assign the label text for the content of the row.
For is used to designate the id of the input control. This is largely used with Accesibility features within the browser.
labelPosition is ignored by the mobile theme, so again only use to affect the display in standard Xpages themes.
After we have define the table row we will usually add an input control to display the data from our Notes document and (optionally) allow for its content to be edited.
The Form table is a little like the basic HTML table.
It has a Form Table outer control along with rows and columns.
We will not be covering FormColumns in this session as they are not well suited for use with mobile applications
We can assign a title to the table using the formTitle property
FormDescription can be used to add extra information which is displayed below the title.
We can disable to use of Required Marks
fieldHelp and labelPosition are not fully supported in a mobile device so only use those in conjunction with the standard XPages themes.
The Form table is a little like the basic HTML table.
It has a Form Table outer control along with rows and columns.
We will not be covering FormColumns in this session as they are not well suited for use with mobile applications
We can assign a title to the table using the formTitle property
FormDescription can be used to add extra information which is displayed below the title.
We can disable to use of Required Marks
fieldHelp and labelPosition are not fully supported in a mobile device so only use those in conjunction with the standard XPages themes.