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“]