Many customers, esp. at Lotusphere, have asked me how you can deploy NSF based composite applications that contain NSF components in other databases. In most cases people have development environments and separate production environments. They were wondering about how and when the links of the NSF components are changed as part of the deployment.
In this entry I use the following terminology:
- CA database: the NSF that contains the CA XML
- component databases: the NSFs that contain the NSF components
In Notes 8.0 you can link to a NSF component via Notes URL (e.g. Notes://server1/repid/...?OpenView) that is defined within the CA XML, precisely in the preferences of the component view. When you deploy CA database to your production environment the links to your component databases break since they still link to the component databases in your development environment. There are different solutions to handle this in 8.0:
1. You can deploy the component databases first. Then you change the CA XML in the CA database (e.g. via CAE) in your development environment and after this you deploy the CA database.
2. Deploy all databases and then open the comp app. It will result in many rectangles with error messages that the component databases cannot be found. Then you can open CAE and fix the links there via advanced component properties.
The current mechanisms have some issues. For example you cannot change the links programmatically which is what many customers do today with their own deployment tools. Also this deployment is very different from how Notes databases are deployed today. I've heard from many customers who have built their own types of 'composite applications' with multiple NSFs that they use profile documents. The profile documents contain the real links to the NSFs and all application logic reads the configuration from the profile documents rather than to access databases directly.
So the idea for Notes 8.0.1 is to allow a similar mechanism: We use profile documents as a level of indirection. Profile documents are very fast since they are cached in memory. You can put the real Notes URL in a field in a profile document that is then read at runtime. The profile document needs to be stored in the CA database. It is the customers' responsibility to create the profile documents and to populate the fields with valid Notes URLs. This can be done either via UI/form or programmatically as part of their existing deployment tools.
We add two new preferences in addition to the current 'notesurl':
<base:value readOnly="false" required="false" value="notes:///corpacct.nsf/All+by+Company?OpenView" xsi:type="base:String"/>
<base:value readOnly="false" required="false" value="MyProfileDocName" xsi:type="base:String"/>
<base:value readOnly="false" required="false" value="MyProfileDocFieldName" xsi:type="base:String"/>
The name or an alias of the profile document
The name of the field in the document that contains the Notes URL
The field needs to be a text field. If it has multiple entries only the first one is used
Whenever the NSF component is supposed to be opened we first check whether the 'notesurl' is set. If so we do exactly what we do today in 8.0. If not we use the two new preferences. We locate the appropriate profile document in the CA database and read the Notes URL from a certain field in that document.
In order to contain this I'm suggesting to do the following simplifications:
- This feature will not be supported for portal based apps yet
- There is no new tooling. In order to set these settings the advanced properties need to be used in CAE
- You can not use an @Formula as a more powerful mechanism to get the Notes URLs from anywhere else
My feeling is that even this simple design covers many of the issues in 8.0. Customers that have their own LotusScript based deployment tools could now automate the whole deployment process by changing the profile docs automatically and they don't have to touch the CA XML anymore. And this mechanism is very similar to how many customers do the deployment of multiple NSFs together today.
As always, pls let us know what you think. We're working on the plan for 8.0.1. So now there is a very good chance that your feedback directly influences features for the next release.