Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: tfrenz am 30.03.17 - 17:28:05

Titel: XPage QuerySave und PostSave
Beitrag von: tfrenz am 30.03.17 - 17:28:05
Hallo,
ich habe mir eine Verwaltung für Vereinsmitglieder über die jahre gebaut.
In der Eingabemaske arbeite ich beim Speicher mit PostSave und QuerySave Lotusscript.
Da werden z.B. auf richtigkeit einer telefonnummer überprüft, telefonnummer für Sync mit PerName auf International gesetz, Mitgliedsnummer überprüft, geänderte Felder in ein Feld History schreiben, .....

Habe mir nun mal Xpage angesehen, und mir die Ansichten und Forms gebaut.
Das ganze mit CustomControl.
Funktioniert alles schon gut, auch der Edit Modus, uns Save.
Aber wie mache ich nun solche eine Validierung?
Da komme ich nicht weiter.
Titel: Re: XPage QuerySave und PostSave
Beitrag von: umi am 31.03.17 - 09:14:41
Moin

Da gibt es pro Feld die Validators https://www-10.lotus.com/ldd/ddwiki.nsf/dx/validation-on-an-xpage.htm (https://www-10.lotus.com/ldd/ddwiki.nsf/dx/validation-on-an-xpage.htm) .
Oder Du machst es im Submit Event des Forms
Titel: Re: XPage QuerySave und PostSave
Beitrag von: Sven Hasselbach am 31.03.17 - 09:59:02
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:

Code
<?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
Titel: Re: XPage QuerySave und PostSave
Beitrag von: tfrenz am 17.04.17 - 11:50:49
Hallo, habe es mit dem Aufrruf des Agenten umgesetzt.
Soweit funktioniert alles.
Nur habe ich in Notes z.B. Felder nur zum "Computed for Display", die habe ich als "Hidden Input" nachgebaut.
Die werden aber nicht zum Agent mit übergeben.
Wie kann ich das sonst umsetzen?

Danke
Thomas
Titel: Re: XPage QuerySave und PostSave
Beitrag von: Sven Hasselbach am 18.04.17 - 11:47:53
Werte temporär ins Dokument, dass an den Agenten übergeben wird, reinschreiben, danach wieder rauslöschen. Wie mit dem Feld "SaveOK".
Titel: Re: XPage QuerySave und PostSave
Beitrag von: tfrenz am 27.04.17 - 17:15:31
Danke Sven,
hat super grklappt.