Alternativ kannst Du auch deinen bestehenden LotusScript Code weiterverwenden, wenn sich die Validierung hierfür auf Backend-Klassen beschränkt.
Hierfür kann in den jeweiligen Events der Datenquelle ein Agent aufgerufen werden, der das aktuelle Dokument per DocumentContext übergeben bekommt, und in einem temporären Feld das Ergebnis der Operation zurück liefert. Das Event kann dann mit "return false" abgebrochen werden.
So was in etwa:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="document1">
<xp:this.querySaveDocument>
<![CDATA[#{javascript:
var agent:NotesAgent = database.getAgent("Validator");
var doc:NotesDocument = document1.getDocument( true );
agent.runWithDocumentContext( doc );
var result:String = doc.getItemValueString( "SaveOK" );
doc.removeItem("SaveOK")
if( result == "0" )
return false;
}]]>
</xp:this.querySaveDocument>
</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:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
Der Agent muss die "Run as Webuser"-Eigenschaft aktiviert haben