What's new in IBM® Domino® Designer 9.0.1 Social Edition Feature Pack 8?

Information on new features and improvements in Domino® Designer.

This topic lists the new features and changes for Domino® Designer 9.0.1 Social Edition Feature Pack 8. It focuses on these areas of Domino® Designer:
  • Domino® Designer as an application development tool
  • XPages as an application development option
  • Bluemix® integration
  • Programmability, languages, and services

Periodic updates to Domino® Designer Help are available on the Web. To download the latest Designer Help file, go to the Documentation Library section of developerWorks® at http://www.ibm.com/developerworks/lotus/documentation/. Click Technical Library then by product, then Domino® Designer, and then, finally, the release you would like to see.

First, in the area of Domino® Designer as an application development tool, the changes and additions for this release include:

  • JVM upgrade for Feature Pack 8 - For Feature Pack 8 (FP8), the Notes client and Domino Designer now run in a 1.8 JVM. However, due to an Eclipse incompatibility issue, Designer cannot compile Java code using the 1.8 JRE. To facilitate Java compilation, FP8 also ships the older 1.6 JRE which is installed to the <notes_base_dir>\jvm1.6 directory. The FP8 installer also modifies the Java>Installed JREs preference to automatically select the 1.6 JRE and thus enable successful Java compilation for XPages, Java agents, and other Java-based design elements. After installation, the original preference files are renamed with a timestamp and a .bak extension to allow you to switch back to the original preferences if required.
  • Upgrades for Dojo and CKEditor - CKEditor has been upgraded from 3.6.6.2 up to 4.5.3.2 (Full build number: 4.5.3.2_20151106-1234). Dojo has been upgraded from 1.8.3 up to 1.9.7 (Full build number: 1.9.7-20151126-IBM®). These upgrades were done for support of IE11 and iOS8. The CKeditor upgrade also included an important security fix.
  • Support for "Headless" Designer - A command line build system has been added to Domino® Designer to let you build NSF and NTF files from source code repositories. You may use either a single command method or a command file method. Refer to the Command Line Building of NSFs/NTFs topics of this guide for more information.
  • Support for infinite scrolling (mobile "touch" scrolling) in Dataview control - The Dataview control has been improved by adding a new property that enables an infinite scrolling experience for mobile users. With this feature enabled, as the user touch scrolls through the mobile content, additional content is automatically loaded in. Content is fetched beforehand from a subsequent page and is added directly to the current page that is being viewed in the mobile application. A new property called infiniteScroll has been added to enable this feature and it can be set in Designer either directly in the page source or by using the All Properties view. Refer to the Extension Library control and property reference sections of this guide for more information.
  • Improvements to the XPages mobile Date and Time control support in mobile themes. See the corresponding section in this topic for more information.
  • Improvements to the XPages TypeAhead control support. See the corresponding section in this topic for more information.
  • Enhancements to theme combo boxes in the XSP Properties editor. See the corresponding section in this topic for more information.
  • Addition of the Single Page Applications Wizard - This feature lets you create an initial design framework for an XPage mobile application by using a "wizard" to guide you through the application creation steps after you drag a Single Page Application control onto an XPage. Refer to the Extension Library control reference section of this guide for more information.
  • Improved Relational Database Support for XPages and the addition of the JDBC Driver Plugin-in Wizard. Refer to the Relational Database Management (RDBMS) Support using XPages section of this guide for more information.
  • Support for Bootstrap responsive web design in XPages. Refer to the Responsive web design support in XPages section of this guide for more information.
  • Three new responsive controls and their related properties, and a new responsive application layout - In this release, some new controls and a new configuration for the Application Layout control have been added to the Bootstrap plugin. These new controls and the configuration further enhance the Responsive tool set available to XPages application developers. Refer to the Responsive web design support in XPages section of this guide for more information.
  • xe:mapValuePicker and xe:collectionValuePicker tags for the Value Picker Control - Two new value picker data providers tags are available that can be used in the dataProvider property of the Value Picker control to provide the list of options that will be shown in the Value Picker dialog. See the corresponding section in this topic for more information.
  • New inPlaceForm Simple Action. This action is used to show and hide In Place Form controls that are commonly used for in place editing of an individual document directly within a Repeat control that lists multiple documents. See the corresponding section in this topic for more information.
  • New xsp.properties "suppress" option for dataView control. See the corresponding section in this topic for more information.
  • New Domino Designer Source Control extension point - Due to limitations with the Team Source Control functionality in Domino Designer, a new extension point has been added to which enables developers to contribute add-ons that modify the default behavior. The new extension point is called com.ibm.designer.domino.team.synclistener and it facilitates third party intervention by providing hooks into the on-disk synchronization process. A sample use case would be an extension that cleans unwanted meta-data elements from on-disk files before resources are committed to the source control system.
  • Expanded and updated documentation on setting Domino® Designer Preferences. Refer to the Setting Domino Designer user preferences section of this guide for more information.
  • New section in documentation on using Domino® Designer with XPages in Bluemix®. This includes information on the following:
    • Domino® Designer Tooling for IBM® Bluemix® and Domino® Designer application integration
    • The bluemixContext and DataService objects for programmatically obtaining IBM® XPages NoSQL Database Service information
    • Using the IBM® XPages NoSQL Database service with other runtimes
    • XPages Runtime Environment Variables
    • Additional Domino® Designer Bluemix® Preferences provided to support hybrid application production use cases
    • Domino® Designer Bluemix® tooling changes to support hybrid application production use cases
    • Bluemix®/Domino® Designer environment variables introduced to aid in the support of hybrid application production use cases
    Refer to Using Domino Designer with XPages in Bluemix section of this guide for more information.
  • Notes/Domino 9.0.1 Feature Pack 8 now lets documents be encrypted on the web using XPages. Previously, the secret key encryption feature has only been available in the Notes client. Refer to the Binding and submitting data section of the Knowledge Center online version of the Domino Designer User Guide for more complete information on this feature.

Refer to the XPages section of this document for more details on some of the XPages items.

Refer to the Programmability, languages, and services section of this document for more details on these type of items.

XPages

Next, in the area of XPages as an application development option, the changes and additions for this release include:

Document encryption and decryption in Domino using XPages

Notes/Domino 9.0.1 Feature Pack 8 now lets documents be encrypted on the web using XPages. Previously, the secret key encryption feature has only been available in the Notes client. The reason for this restriction was that the secret keys used by the encryption process are stored are stored in a user's id file, and thus were not accessible to web-based applications - until the introduction of the new Notes/Domino ID Vault. The encryption and decryption of documents requires access to this ID Vault to retrieve the secret keys of the active user.

Secret key encryption in XPages is designed to emulate the underlying model provided in the Notes client, with all the same rules and restrictions applied. Thus, any Notes client applications that employed the secret key encryption feature, are now be eligible to run as XPages applications on the web.
Note: Refer to the Notes and Domino Encryption section of the Domino Designer Basic User Guide to gain a better understanding the underlying model of encryption and decryption in Domino.

These new components and features are also part to the XPages encryption/decryption support:

  • Secret Key Picker control - This new control is located in the Extension Library drawer of the XPages control palette. Dragging and dropping this control onto an XPage causes a helper dialog to be displayed in order to assist you in setting up encryption for XPages.
  • dominoIDVaultBean - this utility object is provided as part of the XPages runtime to smoothly manage the encryption process. This managed bean is automatically instantiated on behalf of each user by the XPages runtime. Its job is to maintain the ID Vault access details on behalf of each user (the user name, password and ID Vault server name). "Get" and "Set" methods are provided with the bean to manage the properties required to access the Domino ID Vault. For example, the getUserID method will return the UserID object based on the values associated with the access properties. The UserID object then can be used to obtain the secret keys needed to perform encryption operations.
  • @UserSecretKeys() Javascript function - This convenience function is used to obtain secret keys from a user's ID file.
  • @UserId() Javascript function - This function is to return the UserID object stored for a given user in the ID Vault.

Refer to the Binding and submitting data section of the Knowledge Center online version of the Domino Designer User Guide for more complete information on this feature.

Continued effort to provide accessible XPages themes

For this release, XPages now supports a new theme that complies with current accessibility guidelines and requirements. This theme is named Bootstrap3.6.6

Improvements to XPages mobile Date and Time control support in mobile themes

In IBM® Domino® Designer Release 9.0.1, certain XPages controls can be used in a desktop web browser to choose a date, time or both date and time. These controls did not function correctly, however, when using the same controls in XPages mobile themes. Specifically, when using a mobile theme and you selected the "Use date/time picker pop-up" option on an Edit box, the resulting web page displayed a broken non-functional Dojo-based web date picker. For this release, this behavior has now been improved and it is now possible to enter date, time and dateTime values on mobile devices.

With the feature improvements, you can now either click on the Date and Time controls to choose from a calendar (or from a list of times) or you can type a DateTime value into the dateTime control (it does not have a pop-up calendar).

Additional iOS option

For iOS devices, there is also the following option now available where you when you click on the DateTime field, a pop-up is displayed. This option that lets you choose the time easily, but you currently have to scroll through the dates on a day-by-day basis. This may not be the most desirable option as it can be very time-consuming to choose values from a previous year.

The current iOS solution (used on iPhone/iPad/iPod) is subject to change at a later date so that the requirement to have to type in the date in exactly the correct format will be changed to a more user-friendly method.

Usage details

The following usage information provides additional details on these feature improvements:

  • For date-only and time-only edit boxes, the device native date and time pickers will be used (the HTML page has <input type="date"> or <input type="time">)
  • For date-and-time edit boxes, in Android and non-iOS browsers, the device native datetime picker will be used (the HTML page has <input type="datetime-local"/>).
  • For date-and-time edit boxes on the iPhone, the behavior depends on an option in the xsp.properties file in the application. By default, the iPhone dateTime behavior provides an edit box with a placeholder suggested value like 2013-01-14T12:51. In this case, you must manually type in a date and time value in the suggested format to provide a date. The placeholder value (which disappears once the user starts typing) is actually the current date and time in the expected format. There is no picker to allow choosing a date from a calendar. This behavior has been provided as a better solution to fix the previous behavior, but it is not intended to be the long-term behavior for dateTime on iPhone/iOS devices
  • As mentioned, there is also an option that may be set in the xsp.properties file for the application: xsp.theme.mobile.iOS.native.dateTime=true. When that option is present, then the iOS devices will use the native iOS datetime picker (the HTML page has <input type="datetime-local"/>). The limitations of using this "scroll wheel" option were described earlier in the section.

Improvements to the XPages TypeAhead control support in mobile themes and usage information

Formerly, when using mobile themes with XPages applications, there was no support for the XPages TypeAhead control. New mobile TypeAhead support has been added in the mobile themes named "android," "iphone," and "blackberry". The new mobile Type Ahead behavior is based on the dojox/mobile/ComboBox control from the Dojo Toolkit.

Usage details

The mobile TypeAhead control is not in use in the IDX mobile theme named "oneui_idx_v1.3".

The new mobile Type Ahead control also does not support entering multiple values in the Edit box. (The normal web Type Ahead supports comma-separated values like "aaa, bbb, ccc".) An XPage that is configured to use multiple values in a Type Ahead control will give an error in the mobile themes.

There is a known issue on iOS, however, where after the TypeAhead dropdown is dismissed and the page heading area may become misplaced and cover the TypeAhead control's edit box instead of remaining at the top of the page.

Enhancements to theme combo boxes in the Xsp Properties editor

Currently, to contribute a theme to the XPages runtime, you must use the StyleKitFactory interface via the com.ibm.commons.Extension extension . You can now also contribute themeIds to the theme combo boxes in the Xsp Properties editor of Domino® Designer.

To do this, you must also implement StyleKitListFactory in your implementation of StyleKitFactory and return an array of themeIds from the getThemeIds method.

As a further enhancement to theme combo boxes, themes defined within the application are postfixed with an (Application) label to distinguish them from other themes.

New xe:mapValuePicker and xe:collectionValuePicker tags

Two new value picker data providers tags, xe:mapValuePicker and xe:collectionValuePicker are available that can be used in the dataProvider property of the Value Picker control to provide the list of options that will be shown in the Value Picker dialog.

xe:mapValuePicker

The first tag, the Map Picker Data Provider (xe:mapValuePicker) lets you compute a java.util.Map that will be used for the entries in the picker dialog. The map keys are the label, and the map values are the data values that will be saved. The following provides an example of the code used with this tag:

<xe:valuePicker id="valuePicker13" for="inputText1">
		<xe:this.dataProvider>
			<xe:mapValuePicker>
				<xe:this.options><![CDATA[#{javascript://
var map = new java.util.LinkedHashMap();
map.put("Cat", "CAT");
map.put("Dog", "DOG");
map.put("Fish", "FISH");
return map;}]]&gt;</xe:this.options>
			</xe:mapValuePicker>
		</xe:this.dataProvider>
	</xe:valuePicker>

In the example, the Edit Box will show the data value for the selected entry.

If you are using some of the other input controls, some of them will always display the entry label. For example, the following Dojo List Text Box code displays the label of the selected entry in a little box (or multiple boxes if the control is configured to allow selecting multiple entries).

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
<!--	<xp:inputText id="inputText1" value="#{viewScope.category}"></xp:inputText>-->
	<xe:djextListTextBox id="djextListTextBox1"
		value="#{viewScope.category}" displayLabel="true">
	</xe:djextListTextBox>
	<xe:valuePicker id="valuePicker13" for="djextListTextBox1">
		<xe:this.dataProvider>
			<xe:mapValuePicker>
				<xe:this.options><![CDATA[#{javascript://
var map = new java.util.LinkedHashMap();
map.put("Cat", "CAT");
map.put("Dog", "DOG");
map.put("Fish", "FISH");
return map;}]]&gt;</xe:this.options>
			</xe:mapValuePicker>
		</xe:this.dataProvider>
	</xe:valuePicker>
</xp:view>

In that example, the Dojo List Text Box will also show the data value for the selected entry.

xe:collectionValuePicker

The Collection Picker Data Provider (xe:collectionValuePicker) lets you compute a java.util.Collection that will specify the values displayed in the dialog. For example:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
	<xp:inputText id="inputText1" value="#{viewScope.category}"></xp:inputText>
	<xe:valuePicker id="valuePicker13" for="inputText1">
		<xe:this.dataProvider>
			<xe:collectionValuePicker>
				<xe:this.collection><![CDATA[#{javascript://
var collection = new java.util.ArrayList();
collection.add("Cat");
collection.add("Dog");
collection.add("Fish");
return collection;}]]&gt;</xe:this.collection>
			</xe:collectionValuePicker>
		</xe:this.dataProvider>
	</xe:valuePicker>
</xp:view>

In the example, each value in the collection acts as both the label and the saved data value - that is, the displayed label in the dialog and the text saved to the field will always be the same.

The xe:mapValuePicker and the xe:collectionValuePicker also have some options that control the data returned by the picker when doing a search. There are 2 different ways of doing a search with the value picker control. If you configure the value picker with a search dojoType like dojoType="extlib.dijit.PickerListSearch then you will see a Search button and edit box at the top of the dialog. The user can then type into the search edit box and click the Search button to filter the list so that only those entries that match the search are shown. That method is useful for quickly selecting values when there are many options in the dialog.

The other kind of search that can be done with the value picker control is when you configure a typeAhead for the edit box using the data list from the value picker. For example:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
	<xp:inputText id="inputText1" value="#{viewScope.category}">
		<xp:typeAhead mode="partial" minChars="1"
			preventFiltering="true">
			<xp:this.valueList><![CDATA[#{javascript:getComponent("valuePicker1").getTypeAheadValue(this)}]]&gt;</xp:this.valueList>
		</xp:typeAhead>
	</xp:inputText>
	<xe:valuePicker id="valuePicker1" for="inputText1">
		<xe:this.dataProvider>
			<xe:collectionValuePicker>
				<xe:this.collection><![CDATA[#{javascript://
var collection = new java.util.ArrayList();
collection.add("Cat");
collection.add("Dog");
collection.add("Fish");
return collection;}]]&gt;</xe:this.collection>
			</xe:collectionValuePicker>
		</xe:this.dataProvider>
	</xe:valuePicker>
</xp:view>

This means that when you begin to type a value into the edit box, the typeAhead does a search to find the matching values from the valuePicker and displays the matches in a dropdown below the edit box. You still have the option to click the value picker icon to use the dialog instead of using the typeAhead behavior.

By default, either kind of search takes the value that was typed in the browser and attempts to find matches in the dialog list that start with the value from browser.

The xe:mapValuePicker and xe:collectionValuePicker have the searchType property that lets you choose the criteria for attempting to match the browser value. By default it will do a startsWith search, but can be configured to do a "contains" search. For example:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
	<xp:inputText id="inputText1" value="#{viewScope.category}">
	</xp:inputText>
	<xe:valuePicker id="valuePicker1" for="inputText1" dojoType="extlib.dijit.PickerListSearch">
		<xe:this.dataProvider>
			<xe:collectionValuePicker searchType="contains">
				<xe:this.collection><![CDATA[#{javascript://
var collection = new java.util.ArrayList();
collection.add("John Paul Smith");
collection.add("Paul Adams");
collection.add("James Paul Jones");
collection.add("John Smith");
collection.add("Phil Cooper");
return collection;}]]&gt;</xe:this.collection>
			</xe:collectionValuePicker>
		</xe:this.dataProvider>
	</xe:valuePicker>
</xp:view>

To have the display only show exact matches, you would then use searchType="equals".

You can also configure the search using the searchRange property by changing from the default behavior of restrictToSearch, where only entries that match the search value are returned, to the new behavior of jumpTo, which finds the first entry that matches the search value and displays that entry and all subsequent entries. The following example uses this method:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
	<xp:inputText id="inputText1" value="#{viewScope.category}"></xp:inputText>
	<xe:valuePicker id="valuePicker13" for="inputText1" dojoType="extlib.dijit.PickerListSearch">
		<xe:this.dataProvider>
			<xe:collectionValuePicker searchRange="jumpTo">
				<xe:this.collection><![CDATA[#{javascript://
var collection = new java.util.ArrayList();
collection.add("Cat");
collection.add("Dog");
collection.add("Fish");
return collection;}]]&gt;</xe:this.collection>
			</xe:collectionValuePicker>
		</xe:this.dataProvider>
	</xe:valuePicker>
</xp:view>

There is also an option that is not case sensitive. This option allows case insensitivity in the matching of search values to the entry label.

Finally, there is the preventFiltering option which disables the automatic filtering done by the data provider and makes a requestScope.startValue variable available to the computation in the mapValuePicker's options property or in the collectionValuePicker's collection property. This option lets you put custom filtering code into the property computing the dialog entries. For example:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
	<xp:inputText id="inputText1" value="#{viewScope.category}"></xp:inputText>
	<xe:valuePicker id="valuePicker13" for="inputText1" dojoType="extlib.dijit.PickerListSearch">
		<xe:this.dataProvider>
			<xe:collectionValuePicker preventFiltering="true">
				<xe:this.collection><![CDATA[#{javascript://
var collection = new java.util.ArrayList();
collection.add("Cat");
collection.add("Dog");
collection.add("Fish");
if( ! requestScope.startValue ){
	// not doing a search, return entire list.
	return collection;
}
// do custom filtering
// Doing a case-sensitive equals jumpTo search, with added support for Puppy and Kitten 
var submittedValue = requestScope.startValue;
if( submittedValue.equals("Puppy") ){
	submittedValue = "Dog";
}else if( submittedValue.equals("Kitten") ){
	submittedValue = "Cat";
}
var indexOfSubmitted = java.util.Collections.binarySearch(collection, submittedValue);
if( indexOfSubmitted < 0 ){ // no match
	return collection;
}
// remove everything before index
while( indexOfSubmitted > 0 ){
	collection.remove(0);
	indexOfSubmitted = indexOfSubmitted -1; 
}
return collection;
}]]&gt;</xe:this.collection>
			</xe:collectionValuePicker>
		</xe:this.dataProvider>
	</xe:valuePicker>
</xp:view>

This example would display Dog at the top of the returned list if Puppy was entered in the Search field.

New inPlaceForm Simple Action

This release contains a new xe:inPlaceFormAction server side Simple Action. The xe:inPlaceFormAction is used to show and hide In Place Form controls that are commonly used for in place editing of an individual document directly within a Repeat control that lists multiple documents. The following provides a code example that uses this action:

<xp:link escape="true" id="link1" text="Click Me to Edit Form">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="inform">
		<xp:this.action>
			<xe:inPlaceFormAction for="inPlaceForm1" 	formAction="toggle">
			</xe:inPlaceFormAction>
		</xp:this.action>
</xp:eventHandler>
</xp:link>

The following properties are available for this simple action:

  • for - Specifies ID of the In Place Form control whose state will be changed by this action. If empty, it uses the closest In Place Form Control in the parent hierarchy.
  • formAction - Specifies the Action to perform on the In Place Form: show, hide, or toggle.

New xsp.properties "suppress" option for dataView control

There is an existing behavior in the dataView control that occurs when you have assigned a databaseName on the associated Domino® View data source (xp:dominoView) as in the following example:

<xe:dataView var="viewEntry" pageName="/topicThread.xsp">
	<xe:this.data>
		<xp:dominoView var="dominoView" viewName="xpAllDocuments"
 		databaseName="Discussion_data.nsf">
		</xp:dominoView>
	</xe:this.data>

In the example, the Data View control generates a link for each document. The resulting URL that is generated looks like the following:

http://servername.example.com/Discussion_design.nsf/topicThread.xsp?databaseName=servername!!Discussion_data.nsf&documentId=2924D3C6A80C523280257DFD005C35A0&action=openDocument

That is, when a databaseName is present on the xp:dominoView data source, then the URL generated has a databaseName parameter. For example:

databaseName=servername!!Discussion_data.nsf

For this release, there is new xsp.properties option which you can configure in the application XSP Properties Editor's Source tab as follows:

xsp.dominoView.url.databaseName.suppress=true

When the suppress option is present and set to true, the URL generated by the Data View control now looks like the following:

http://servername.example.com/Discussion_design.nsf/topicThread.xsp?
documentId=2924D3C6A80C523280257DFD005C35A0&action=openDocument

The URL now does not contain the databaseName parameter in it.

Note: Similar URLs generated by the View Panel (xp:viewPanel) control have not changed, and still contain the databaseName URL parameter.

Improved Designer extensibility for existing controls

A new extension point has been added to Domino® Designer (com.ibm.designer.domino.xsp.editor.componentOverride) to let you override design time tooling for the core and extension library controls that are shipped with Designer. You should only contribute one extension per control using this extension point. This lets you override the palette entry for a control, add their own drop wizard or add a properties panel. Refer to this guide for more information.

Improvements to XPages editor

Additional preferences have been added to the XPages Editor to improve usability. These include:
  • Always open source tab - Lets you choose which tab to open when the XPages editor opens
  • Prevent loading of Style Sheet (CSS) resources for the Design tab - Stops the loading of CSS resource files for the Design tab. This stops the editor from slowing down if large CSS resource files are included on an XPage.
  • Sort palette draw content alphabetically - As some palette drawers are not sorted (Core Controls, for example), enabling this preference will correct this.

Bluemix® integration

In the area of Bluemix® application development with XPages and Bluemix® integration, the following has been added:

Domino Designer Bluemix tooling for better integration with XPages applications created on Bluemix

New application development tooling has been added to Domino® Designer to provide the infrastructure needed on the Domino® Designer client side to configure and deploy XPages applications to and from the Bluemix® platform. This new tooling includes the following:

  • A new Domino® Designer preference page that lets you define the correct Bluemix® Server connection. To open the Bluemix® preferences select File->Preferences then Domino Designer->IBM Bluemix.
  • An Import Wizard that lets you import XPages Starter Code applications to the Designer workspace. To open this wizard, select Tools->Import IBM Bluemix Starter Code. You can choose to create an application copy, application replica, or use the actual NSF from the starter code ZIP file.
  • A Bluemix® Configuration Wizard that lets you configure existing XPages applications for deployment to Bluemix®. To open the wizard select Design->IBM Bluemix->Configure For Deployment or use the dropdown menu associated with the Bluemix® toolbar button. Alternatively, you can right click on the application in the Applications Navigator and use the IBM Bluemix->Configure For Deployment popup menu. This wizard gives you options to determine how the NSF gets copied to your deployment directory during the deployment process. You can choose to create a copy or a replica.
  • A new editor that lets you modify Bluemix® and XPages runtime environment variables associated which each application and its runtime. To open the editor, select IBM Bluemix Manifest under the Application Configuration category in the Applications Navigator.

    In this editor, there is also a Hybrid Configuration editor page. This page lets you view and edit the hybrid configuration for the application. You can load any one of the hybrid profiles by clicking the Load hybrid profile button. This displays a dialog with the list of profiles and lets you choose the one you wish to load. The profile settings are then loaded to your manifest and the ID file is copied to your designated deployment directory.

    To remove all hybrid settings from the manifest, click the Delete this configuration button. Be aware that this delete option does not remove any previously copied ID file from the deployment directory. You must do that operation manually if it is required.

    Additional options for this editor include the hosts and domains options. These new options can be seen on the General page in the manifest editor. The Hosts option lets you specify multiple hostnames or subdomains. Each hostname generates a unique route for the application. The Domains option lets you specify specify multiple domains for the application.

  • A feature that deploys an application to Bluemix® when it has been imported using the Import Wizard or configured using the Configuration Wizard. To deploy the application, select Design->IBM Bluemix->Deploy Application and click the Bluemix® toolbar button or right-click on the application in the Applications Navigator and use the IBM Bluemix->Deploy Application popup menu.
  • A feature that lets you take an XPages application that has been deployed to Bluemix® and then open it in your Default Browser. To open the application, select Design->IBM Bluemix->Open in Default System Browser or use the dropdown menu associated with the Bluemix® toolbar button. Alternatively, you can right-click on the application in the Applications Navigator and use the IBM Bluemix->Open in Default System Browser popup menu. Individual XPages can be opened by selecting them in the Applications Navigator and then using the method above.

New bluemixContext object with DataService object for better integration with XPages applications created on Bluemix

As mentioned, to aid in the development of XPages applications running on Bluemix®, a new global object, bluemixContext, has been provided. The object provides methods to retrieve information from the XPages runtime and as well as connection information from any bound XPages NoSQL Database service. It does this by parsing the Bluemix® VCAP_SERVICES environment variable provided by the bound service.

The bluemixContext methods getDataService and getDataServiceByName return a DataService object. This object provides methods to retrieve information about the bound XPages NoSQL Database Service from the VCAP_SERVICES environment variable as well.

These objects are available in Java and Javascript only.

Refer to the Domino® Designer product documentation and the Bluemix® documentation for more complete information on these objects and with working with XPages applications created in Bluemix®.

IBM XPages for Bluemix runtime environment variables

With the XPages boilerplate available on Bluemix® (a starter application that uses both the IBM®® XPages NoSQL Database for Bluemix® service and the IBM® XPages for Bluemix® runtime), environment variables are used as the means by which the cloud runtime service can communicate with the deployed starter application about its environment.

For Bluemix® specifically, you use the VCAP_SERVICES environment variable to retrieve the information and credentials you need to access the IBM® XPages NoSQL Database for Bluemix® service with various Bluemix® runtimes. In Domino® Designer, the bluemixContext object provides various methods that let you retrieve information from the XPages runtime as well as connection information from any bound XPages NoSQL Database service. This is done by parsing the VCAP_SERVICES environment variable provided by the bound service. Refer to the Bluemix® documentation for more information on the VCAP_SERVICES environment variable.

In addition to the information automatically provided by the VCAP_SERVICES environment variable, the XPages runtime provides its own collection of environment variables to help optimize integration with the Bluemix® platform. In Domino® Designer, the Bluemix® Manifest editor includes the XPages runtime environment variables section to let you set this group of environment variables to the desired value.

The group of XPages runtime environment variables provided for you include the following:

  • APP_HOME_URL
  • APP_PRELOAD_DB
  • APP_INCLUDE_XPAGES_TOOLBOX
  • APP_JVM_HEAPSIZE
  • APP_VERBOSE_STAGING
  • APP_JAVA_POLICY_ALL_PERMISSION

For more information on the XPages runtime environment variables, refer to the product documentation.

Hybrid application support when using Domino Designer with Bluemix.

The key characteristic of hybrid applications is that the application data resides outside of Bluemix®. The advantages of the hybrid application model is that you can use trusted Domino®® server configuration options like password management and directory assistance to help span the cloud and on-premises platforms used in association with Bluemix®.

To help with the support of hybrid application development using Domino® Designer and Bluemix®, the following features have been introduced:
  • Additional Domino® Designer Bluemix® Preferences to support hybrid application production use cases
  • Domino® Designer Bluemix® tooling changes to support hybrid application production use cases.
  • Bluemix®/Domino® Designer environment variables introduced to aid in the support of hybrid application production use cases
  • Storage of multiple hybrid configuration profiles - You can store and manage multiple (a maximum of twenty) hybrid configurations (profiles) for use in your Bluemix® applications.
  • bluemixContext Object Hybrid utility methods - The bluemixContext object provides a number of useful utility methods that can be used in Java code or in server-side JavaScript code in your XPages and Bluemix® applications. To help in working with hybrid applications, 3 utility methods are provided. The three methods are: isHybridApplication(), findHybridDatabaseName(String db Path), and atHybridDbName(String db Path). Refer to the product documentation and the Bluemix® documentation for more complete information.

Refer to this guide for more information.

Programmability, languages, and services

This section covers changes and additions made in the area of programmability, languages, and services. The changes and additions in this area for this release include:

In the area of programmability and languages, the following additions or changes have been made in this release:

New bluemixContext object with DataService object for better integration with XPages applications created on Bluemix

To aid in the development of XPages applications running on Bluemix®, a new global object, bluemixContext, has been provided. The object provides methods to retrieve information from the XPages runtime and as well as connection information from any bound XPages NoSQL Database service. It does this by parsing the Bluemix® VCAP_SERVICES environment variable provided by the bound service.

The bluemixContext methods getDataService and getDataServiceByName return a DataService object. This object provides methods to retrieve information about the bound XPages NoSQL Database Service from the VCAP_SERVICES environment variable as well.

These objects are available in Java and Javascript only.

Refer to the Domino® Designer product documentation and the Bluemix® documentation for more complete information on these objects and with working with XPages applications created in Bluemix®.

Changes and additions related to supported language methods, properties, formulas

The following methods, properties, formulas, and more have been added or have changed for this release:

  • @Version formula - This formula is provided in Domino Designer's formula language to return the release number of the Notes/Domino software you are currently running. Starting with this release, there is now a new parameter of (1) to be used with the @Version formula to also return the minor version level of the software. The syntax of the formula using this parameter is @Version(1). This change coincides with the introduction of the new Feature Pack release model that Notes/Domino software releases now follow. The following information is returned by the @Version formula to cover the new minor version levels of the software:
    • @Version = A returned value of 405 indicates that you are running the Notes/Domino 9.0.1 version software.
    • @Version(1) = A returned value of 8 indicates that you are running the Feature Pack 8 minor level of the Notes/Domino 9.0.1 version software. The returned value will increment with each release of a future Feature Pack. For prior versions (i.e., FP1 through FP7 before Feature Pack 8), this value will return '0'.
    This change appears in the mail9.ntf file that is being delivered with the Notes/Domino 9.0.1 Feature Pack 8 software. This is done to "rope off" software functionality that is only valid if the client was running 9.0.1 FP8 or higher.
  • What is @?()?- New @Functions introduced in a newer release/feature pack will display as @?() when viewed with Designer in older releases. For example: @IsBrowserDoc, a new @Function added in 9.0.1 Feature Pack 8, will appear as @?() when viewed in 9.0.1 Feature Pack 7 and below.
  • View.createViewNavFromKey (Java and LotusScript) - This method in the View class is now available with this release. It functions the same as View.getAllEntriesByKey except that it returns a ViewNavigator instead of a ViewEntryCollection.

    The advantage of using a ViewNavigator over a ViewEntryCollection is that a view with multiple catgories may have documents that appear twice in the view. Unfortunately, a ViewEntryCollection does not allow for the repeat entries. A ViewNavigator, however, will match the view as displayed AND with the repeated documents. This the ViewNavigator collection can be traversed faster when using the ViewNavigator.setCacheSize and View.setAutoUpdate(false) methods.

    • Java syntax: ViewNavigator createViewNavFromKey(java.util.Vector keys, boolean exact) throws NotesException;
    • LotusScript syntax: CreateViewNavFromKey(Keyarray, Optional Byval exactmatch as Boolean) as NotesViewNavigator
  • @IsBrowserDoc() Formula Language function - If a document is open, this new function will specify if the document has been opened using a browser control. This @ function is generally used as a "hide-when" formula and could be used to hide a document field if the current document is opened using the browser control.
    The syntax of the formula is the following: @IsBrowserDoc. There are no parameters and the function returns the following Boolean flag values:
    • Returns 1 (True) if the current document has been opened using the browser control
    • Returns 0 (False) if the current document has not been opened using the browser control
  • LotusScript®, Java, and JavaScript methods/properties for the IDVault and NotesIDVault classes. These classes provide a representation of the secure storage facility for UserIDs that may be configured for Domino® by policy. IDs are stored there to allow for easier management by administrators and users. See the product documentation for complete details.
  • Java and Server-side JavaScript methods and properties for the bluemixContext global object. See the product documentation for complete details.
  • Java and Server-side JavaScript methods and properties for the DataServiceobject/component returned by the bluemixContext global object. See the product documentation for complete details.
  • FileEndcoding property/method for the EmbeddedObject and NotesEmbeddedObject classes (LotusScript®, Java, and JavaScript). Returns file attachment endcoding information. See the product documentation for complete details.
  • @AddedToThisFile - This @command returns a time-date value indicating when the document was created in the current file. (as opposed to the global created time returned by @Created)
  • @ModifiedInThisFile - This @command returns a time-date value indicating when the document was last modified in the current file (as opposed to the global modified time returned by @Modified).
  • @UserSecretKeys() Javascript function - This convenience function is used to obtain secret keys from a user's ID file.
  • @UserId() Javascript function - This function is to return the UserID object stored for a given user in the ID Vault.

In the area of Domino® Access Services (REST APIs), the following additions or changes have been made in this release:

New URL Parameters in the REST Calendar Service

For this release, two new URL parameters have been added to the Calendar events GET request. The parameters, sincenow and days, let you control the date range relative to the present day. In some circumstances, this approach works better than the absolute date-time values expected with since and before.

You can find the documentation for the Calendar events GET request at http://www-10.lotus.com/ldd/ddwiki.nsf/xpAPIViewer.xsp?lookupName=IBM+Domino+Access+Services+9.0.1#action=openDocument&res_title=Calendar_events_GET&content=apicontent.

The following table provides an addendum to that topic:

Table 1. New URL Parameters in the REST Calendar Service

URL Parameter Example Description
since since=2015-01-01T00:00:00Z The start time of the date range. If since is not specified, the default value is the time of the request.
before before=2015-02-02T00:00:00Z The end time of the date range. If before is not specified, the default value is one year from the value of the since parameter.
sincenow (new) sincenow=-60 The start time specified as a relative number of days since now. Must be an integer value (positive, zero, or negative). Must not be combined with since but can be combined with before or days.
days (new) days=120 The number of days in the date range. Must be a positive integer. Must not be combined with before, but can be combined with since or sincenow.