Lab: Developing with the extension library
Upcoming SlideShare
Loading in...5

Lab: Developing with the extension library



This lab walks you through a development cycle using the XPages Extension Library and the ApplicationLayout control. Originally presented at the Austin XPages Advanced Development seminar Dec 2010.

This lab walks you through a development cycle using the XPages Extension Library and the ApplicationLayout control. Originally presented at the Austin XPages Advanced Development seminar Dec 2010.



Total Views
Slideshare-icon Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Lab: Developing with the extension library Lab: Developing with the extension library Presentation Transcript

    • XPages Extension Library Lab Lance Spellman | President, WorkFlow Studios
    • Objective
      • Build an event registration system with XPages Extension Library
      • Use new capabilities provided by the Extension Library for:
        • Layout
        • Page Navigation
        • Login/Logout
        • Search
        • User information
    • Event Registration Demo and Setup
      • This application allows a team to setup events, such as this Xpages Workshop, and allow people on the web to register for them
      • On the Domino server, there is a database named events.nsf
      • Events is the application interface and where event data will be captured
        • Events.nsf has a Registration form in it and nothing else
      • On the Domino server, there is a database named users.nsf
      • Users is a copy of a Public Name and Address Book, and is registered in Directory Assistance as a secondary address book
      • Anyone listed in users will be able to login to the server and use the Events application
    • Begin Lab
      • Open events.nsf
      • Go to XPages section
      • Add New XPage named Home, save and close
    • Enable Extension Library
      • Open Application Properties
      • Go to Advanced Tab
      • Enable the Extension Library by clicking the checkmark for:
    • Set Theme to oneuiv2
      • Go to the Xpages tab of Application Properties
      • In the Application Theme field, type oneuiv2
    • Set Error Page to Display Runtime Error
      • Go to the Errors and Timeouts section
      • Checkmark the box for:
        • Display Xpages runtime error page
    • Set Home as Launch Page
      • Go to the Launch tab of Application Properties
      • In the Web Browser Launch section, set launch to:
        • Open Designated Xpage
      • Set Xpage to
        • Home
    • Preview Application Home Page
      • home.xsp page should launch
        • If not, check previous steps for accuracy
        • Check security settings in server document for Xpages field
        • Restart http
        • Check that events.nsf is in the Server's data directory...not the Client's data dir
    • Create Layout Custom Control
      • Go to Custom Controls section
      • Create new Custom Control called Layout
      • Make habit of filling in the Comment field
    • Add Application Layout Extlib Control
      • Go to the Extension Library panel
      • Select Application Layout
      • Drag on the Layout Custom Control
    • Set Application Layout Configuration
      • Click on the Application Layout control
      • Go to the All Properties tab
      • Select Other and configuration
      • Click in the Value column and click the selector
      • Choose xe:applicationConfiguration
    • Save Layout control and add to Home
      • Save the Layout custom control
      • Open the Home Xpage
      • Add the Layout control to Home by clicking and dragging
    • Save Home and Preview
      • Save the Home Xpage
      • Preview in browser by going to:
    • Create events theme
      • Create new theme named “events”
      • Extend the “oneuiv2” theme
      • In application properties, change the theme to “events”
    • Create and add events.css resource
      • Create a new Stylesheet called events.css
      • Add events.css as a resource in the events theme
    • Replace default Lotus logo
      • Open events.css
      • Create new class to overwrite .lotusui .lotusLogo
        • New logo image is already in Resources
    • Preview Home Page for new Logo
    • Understanding Editable Areas
      • When an Editable Area is added to a custom control, it creates a placeholder called a “callback”.
      • The callback automatically generates an id for itself, usually called “facet_1” for the first Editable Area on the page
      • Try creating a new custom control called “test” and add an Editable Area to it
      • Look at source
    • Using the Editable Area
      • When the custom control containing the Editable Area is put on an XPage, it allows the developer to put arbitrary content into that spot
        • Think of it as a placeholder the control developer has set aside for the Xpage developer
      • Example: For left-hand column of a layout, I, as the layout builder, want to define a space for a navigator. But I don't want to arbitrarily decide what that navigator will be or what it will contain.
      • By putting an Editable Area in the layout, when the layout control is used on an Xpage, the Xpage developer can decide what kind of navigator he wants to put there and simply drag it into the Editable Area placeholder.
      • Create a new Xpage called “UseTest”
      • Drag the “test” custom control on to the XPage
    • Add Label to the Editable Area
      • The green dot in the Editable Area indicates the target where content can be added
      • Drag a label control over the green dot
      • A blinking cursor should appear between the gray facet_1 box and the green dot indicating it's going to put the label there. Drop the label control
      • After the drop, the label should appear within the dotted line box boundaries of the editable area as shown below
    • Delete the Test Custom Control and XPage
      • The Custom Control and XPage were for isolated demonstration purposes, they aren't needed in the app
    • Applying Editable Area Knowledge
      • Open the custom control named “layout” we created earlier
      • It contains the “Application Layout” extension control we added
      • The Application Layout control contains 3 editable areas
        • LeftColumn
        • OneUIMainAreaCallback (no facetName)
        • RightColumn
    • The Application Layout Control
      • If the Application Layout control was on an Xpage, the developer could add a page or view navigator in the “LeftColumn” Editable Area
      • But what if the application will use the same navigation for every Xpage?
      • It makes sense to add the navigation at the “layout” custom control level
      • Then every Xpage that uses the “layout” control will already have the navigator built-in
      • We also would like to allow the Xpage developer to append additional content into the “LeftColumn” so we'll make sure there's still an Editable Area available at the Xpage level
      • We'll create the Navigator in its own custom control, and when we're done, add it to the “layout” custom control
      • First, we need to update the code in the “layout” custom control
    • Copy Code Snippets #2 to “layout” code_snippets.txt #2
    • What's That Code Do?
      • The <this.facets> tag tells the Application Layout control that we are going to take advantage of the Editable Areas it had defined
      • The panel with xp:key=”LeftColumn” identifies that this content is going in the “LeftColumn” facet defined in the Application Layout control
      • Within the panel, we can now put a custom control (like a navigator)
      • Also within the panel, we define our own Editable Area called “LeftColumn” that will be passed on to the Xpage using this custom control
        • That gives the Xpage developer to ALSO add a control at the Xpage level
      • The same thing applies for the “RightColumn” facet
      • The callback for “OneUIMainAreaCallback” is special. Because the Application Layout control did not specify a facetName property for that Editable Area, it falls outside the scope of the <this.facet> tag
      • It allows for multiple controls to be loaded inside of it
      • By adding the callback to “layout” we pass on the ability to use it at the Xpage level
    • Build site navigator
      • Create new custom control
      • Name it main_navigator
      • This will appear in the left-hand column of the layout manager and provide navigation to all the site areas
    • Drag Page Navigator Control to the Canvas
      • In the control pallete, go to the Extended Library controls
      • Find and click on the Page Navigator control
      • Drag it on to the screen
    • How Page Navigator Works
      • A Page Navigator is a container that is designed to present a list of links that can be clicked to change pages
      • It has a default appearance for background and displaying links in a vertical list
      • The Page Navigator works by adding “treeNodes” into the container
      • Go to the PageNavigator, All Properties tab and click the icon next to the treeNodes attribute
    • Add Page Tree Node for Events
      • The main page for the site will be a listing of Events
      • The Page Navigator should provide a link to this page
      • After clicking the selector next to treeNodes, a list of node types is displayed
      • Click pageTreeNode
    • Fill in the PageTreeNode Properties
      • Enter “Events” for both the label and the page
      • This will display “Events” as the link in the Page Navigator
      • When clicked, it will open the XPage named “Events”
    • Add Page Navigator to the Layout
      • Now that we have at least 1 item in the navigator, let's add it to the “layout” custom control
      • Open the “layout” custom control
      • Go to source mode
      • Find the panel with xp:key=”LeftColumn”
      • Drag the “main_navigator” custom control as the top element inside the panel
    • Preview the Home Page for Navigator
      • Green box with blue “Events” link should now appear
      • When clicked, it generates an error because we haven't created an “Events” Xpage yet
    • Create Events XPage
      • Create New Xpage
      • Name it “Events”
      • Drag the “layout” custom control on to it
      • Save and preview Home page again
      • Click Events link now
      • Notice how navigator changes link to indicate the currents page
    • Add Home Page Link to Navigator
      • Open the “main_navigator” custom control
      • Go to All Properties, treeNodes
      • Add new pageTreeNode
    • Fill in pageTreeNode Attributes
      • For label and page, add “Home” value
      • Save “main_navigator”
    • Preview Home and Events Pages
      • See the Home entry added to the navigator
      • See how the active link changes when going between pages
    • The Order's to fix
      • In “main_navigator”, go to source mode
      • See the 2 pageTreeNodes
      • Copy and paste the Home page so that it's the first of the two listed
      • Save and preview
    • Add View List and Dynamic View to Events
      • When the Events page is clicked, show a default view and ComboBox for switching to different views
      • Create new custom control called “view_events”
      • Drag a panel control on to the page, name it “panel_view_events”
      • Go to the data tab for the panel and create a view datasource
    • Compute the View Name Property
      • For the datasource, click the diamond next to view name and enter a script for computing the value
    • Code for View Name Property
      • We'll use a viewScope variable to determine what view to show
      • We'll use a ComboBox to set viewScope.viewName
      • If viewScope.viewName hasn't been set, choose a default view to display
      • Copy the code from code_snippets.txt #3
      code_snippets.txt #3
    • Add Dynamic View Panel
      • From the Extension Library controls, drag a Dynamic View Panel into “panel_view_events”
      • On the data tab for the Dynamic View Panel, select the “view1” datasource defined in “panel_view_events”
      • Leave “bind to” ComboBox blank
      • Whenever the panel's datasource formula changes, the Dynamic View Panel will reflect it
    • Add View Picker ComboBox
      • Drag a ComboBox into the “panel_view_events” panel, above the Dynamic View Panel
      • Name it “viewPicker”
      • Enter a return after it so the Dynamic View Panel is on the next line
    • Bind ComboBox to viewScope.viewName
      • In the data tab for “viewPicker”, select:
        • Advanced
        • Use: Scoped Variable
        • Parameter: View Scope
        • Variable Name: viewName
    • Set ComboBox Selection Values
      • On the Values tab, add the following items:
        • By Date
        • By Location
        • By Name
      • Set values to the aliases of those views
    • Add Label in front of ComboBox
      • Drag a label control before the ComboBox
      • Change the label to “Events Views: “
      • When complete, save and preview the Events page again
    • Completing the Application Configuration
      • We did the initial setup for Application Configuration in our “layout” control
      • There are additional items to be setup:
        • Banner Application Links – (links to other sites, like company intranet)
        • Banner Utility Links – (login/logout, register, current user, etc...)
        • Title Bar Tabs – (My Profile)
        • Search Bar
        • Place Bar Name
        • Place Bar Actions
    • Add Banner Application Links
      • In the “layout” custom control, select the Application Layout control
      • Go to All Properties tab
      • Expand the configuration section
      • Click the bannerApplicationLinks selector
      • Choose basicLeafNode
    • Add IBM link
      • Configure the basicLeafNode to provide an IBM link
        • Href:
        • Label: IBM
      • Preview the Home or Events page
    • Adding Banner Utility Links
      • In the Utility Links area of the Banner, we want to add
        • Current User
        • Login (if not logged in)
        • Logout (if logged in)
      • In the configuration section, click the selector for bannerUtilityLinks
      • Add a userTreeNode
    • Add a Login Link
      • In the configuration section, click the selector for “bannerUtilityLinks”
      • Add a loginTreeNode
      • Save and preview
      • Nothing happens, why? It's smart and knows you're logged in already
    • Add a logout link
      • In the configuration section, click the selector for “bannerUtilityLinks”
      • Add a “basicLeafNode”
        • There is no custom node for logout, we have to create it
        • Label: Logout
        • Href: provides the link that should be executed to logout
        • Rendered: determines whether the logout link should be visible or not
      • For “href” use the code from code_snippets.txt #4
      • For “rendered” use the code from code_snippets.txt #5
        • We can only logout from a session authentication based login
        • Check to see if user has a login cookie, and if so, render the logout link
      code_snippets.txt #4
    • Change to Session Authentication
      • Open Domino Administrator Client
      • Select the Configuration tab
      • Select the Xpages/Lotus server if not already selected
      • Expand Web and click Web Server Configurations
      • In the view, open Domino Server
      • Go to Edit mode
      • Go to Internet Protocols tab, Domino Web Engine sub-tab
      • Change “Session Authentication” to “Single Server”
      • Go to Security tab
      • In the “Access Server” field add, “LocalDomainServers”
      • Save and close
      • At the server console, “tell http restart”
      • Restart browser
      • Go to events.nsf and login with “Domino Admin” : “passw0rd”
    • Try out Logout Link
      • Once logged in as Domino Admin, the logout link should be visible
      • Click Logout link, remain on same page
      • Username is now Anonymous and Login link available
      • Login takes to form based authentication
      • On successful login, redirected to Home page for app
      • Username appears along with Logout link
    • Enable Placebar Features
      • In Application Layout configuration, go to placeBarName
      • Enter “Upcoming Events”
      • Preview the Home page
    • Turn on SearchBar
      • In Application Layout configuration, click on selector next to searchBar
        • InactiveText: Search...
        • PageName: Search
        • QueryParam: searchText
      • This tells the application to enable the search bar, put “Search...” as the default value in the input box which will be cleared when user clicks inside it
      • When the user clicks search button, the “Search” Xpage (not built yet) will be returned and a queryString parameter of “searchText=” will be provided to that page with the value of what was input into the field
    • Create a Search XPage
      • Create new Xpage named “Search”
      • Drag a label control on to the page, give it the label, “Search String: “
      • Drag a computed field control on to the page
      • Compute the value with
        • paramValues.get('searchText')[0]
      • This will give you the string that was entered by the user to search on
      • Save and try it out by going to Home page and enter a search term
    • Add a View to the Search Page
      • Now that we know we've got functionality, let's delete the label and computed field on the Search Xpage
      • Add the layout custom control
      • Drag a view control into the content area of the page
      • Choose “Events By Location” as the view to display
      • Go to the Data tab of the view control
      • For “Search in view results:” compute the value to:
        • paramValues.get('searchText')[0]
    • Try Search now
      • If you search for “Austin”, the search page will show the view with 1 entry in it
      • If you search for “Dallas”, a blank view will be returned
    • Other Things You Could Do
      • Add Tabs to the layout in the Title Bar
      • Add Action buttons in the Place Bar
      • Add content to the RightColumn of the layout
      • Add footer and legal content to the layout
      • It's all there in the Application Configuration
    • Questions?
    • Resources
      • Almost all the information today is coming from the project at
      • Some of the videos surfaced there are also making their way into the Domino wiki media gallery
    • Legal Disclaimers
      • © WorkFlow Studios 2010. 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. WorkFlow Studios 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 WorkFlow Studios 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.
      • IBM, the IBM logo, Lotus, Lotus Notes, Notes, Domino and Lotusphere are trademarks of International Business Machines Corporation in the United States, other countries, or both.
      • Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.
      • Dissemination or reuse of this presentation is allowed provided full attribution to WorkFlow Studios is made by retaining the title slide and this legal disclaimer slide in their original form.