Speichert man ein Dokument über die Javascript-Methode „save()„, werden die Events (QuerySave, Compute und PostSave) nicht ausgeführt.
<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> <xp:this.data> <xp:dominoDocument var="doc"> <xp:this.querySaveDocument> <![CDATA[#{javascript:print ( "querySave" ) }]]> </xp:this.querySaveDocument> </xp:dominoDocument> </xp:this.data> <xp:link escape="true" text="Link" id="link1"> <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> <xp:this.action> <xp:executeScript script="#{javascript:doc.save()}"> </xp:executeScript> </xp:this.action> </xp:eventHandler> </xp:link> </xp:view>
[In Fett: Speichern mittels „save()“]
Auf der Serverkonsole wird kein „QuerySave“ ausgegeben, das Event wird nicht ausgeführt. Damit die Events ausgeführt werden, muß die XPages-interne Funktion aufgerufen werden:
<xp:link escape="true" text="Link" id="link1"> <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> <xp:this.action> <xp:saveDocument></xp:saveDocument> </xp:this.action> </xp:eventHandler> </xp:link>
Verwendet man mehrere Datasources, muß die Reihenfolge beachtet werden, denn nur die letzte Datenquelle ist von der Aktion betroffen.
Allerdings kann man auch die Eigenschaften eines Save-Buttons verwenden, um ein Event dazu zu bewegen, ein Dokument zu speichern und die Events der Datenquellen auszuführen:
<xp:link escape="true" text="Link" id="link2"> <xp:eventHandler event="onclick" submit="true" refreshMode="complete" immediate="false" save="true"> </xp:eventHandler> </xp:link>
[In Fett: Die Eigenschaften eines Save-Buttons auf einem Link]
EDIT:
Nutzt man die Aktion „<xp:saveDocument>“ kann man die zu speichernde Datasource mittels dem „var„-Parameter angeben. Dann ist die Reihenfolge der Datasources irrelevant:
<xp:saveDocument var="trialDoc"></xp:saveDocument>
[In Fett: Erzwungene Speicherung der Datasource „trialDoc“]