Analog zu den ViewDataSources lassen sich auch DocumentDataSources über die Adresszeile des Browsers manipulieren: Der URL-Parameter databaseName ermöglicht hierbei die Steuerung der zugrundliegenden Datenbank, und überschreibt einen eventuell in der XPage hinterlegten Wert.
<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> <xp:this.data> <xp:dominoDocument var="document1" databaseName="DB1.nsf"> </xp:dominoDocument> </xp:this.data> <xp:button value="Label" id="button1"> <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> <xp:this.action> <xp:save></xp:save> </xp:this.action> </xp:eventHandler> </xp:button> </xp:view>
Wird diese XPage mit dem Parameter databaseName=DB2.nsf aufgerufen und abgeschickt bzw. gespeichert, erfolgt das Anlegen des Dokumentes nicht wie definiert in der DB1.nsf, sondern in DB2.nsf.
Ebenso verhält es sich, wenn ein Dokument geöffnet wird: Auch hierbei lässt sich steuern, aus welcher Datenbank das Dokument stammten soll (in diesem Fall nur, solange keine documentId in der XPage eingestellt ist.)
Werden mehrere DataSources auf einer XPage verwendet, werden die URL-Parameter dort angewendet, „wo es passt“, d.h. es wird die nächste DataSource (View oder Document) verwendet, die nicht mit ignoreRequestParam=“true“ abgesichert wurde.
EDIT:
Das Überschreiben wirkt sich auch auf Datasources aus, die nicht direkt im UIViewRoot sitzen, sondern auch auf Unterkomponenten im JSF Baum. Also auch auf DocumentDataSources und ViewDataSources in Panels etc.
Google translate isn’t translating that well on this post 😉
Do I understand correctly that if an xpage has one datasource this could be changed using the URL parameter databaseName?
I’ve tested it and yes it does.
Yes, the database can be changed for a datasource by this. An existing defined database in the XPage will be overwritten. But not only if you have one datasource on your page, the change will be made to the next datasource available where ignoreRequestParam=“true“ is not set.
This will work for views too.
For example this would create the document in the mail.box instead:
http://www.example.com/db.nsf/example.xsp?action=createDocument&databaseName=mail.box
How to prevent the use of this param
http://www.xpagedeveloper.com/2012/how-to-prevent-databasename-to-change-datasource