Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: oz am 26.09.05 - 12:56:30

Titel: Änderung eines Feldes vor dem Speichern Prüfen
Beitrag von: oz am 26.09.05 - 12:56:30
Hallo Forum,

Ich möchte vor dem speichern prüfen, ob sich der Wert eines Feldes durch den Benutzer geändert wurde. Ich habe daher folgenden Code in die Querysave meines Formulars gelegt.

   Dim uiName As String
   uiName = Source.FieldGetText("fldGlobalProfileName")
   
   Dim beName As String
   beName = Source.Document.fldGlobalProfileName(0)
   
   Messagebox uiName & " " & beName

Die Messagebox gibt zwei gleiche Werte zurück. Wieso ist das? Kann mir jemand sagen wie ich diese Problem löse.

Vielen Dank für Eure Hilfe

oz

Titel: Re: Änderung eines Feldes vor dem Speichern Prüfen
Beitrag von: Thomas Schulte am 26.09.05 - 12:58:45
Indem du im Queryopen des Dokumentes ein
set histDoc = source.document einbaust.
und dann
gegen HistDoc.fldGlobalProfileName(0) prüfst
Titel: Re: Änderung eines Feldes vor dem Speichern Prüfen
Beitrag von: Axel am 26.09.05 - 13:09:26
Hi,

wenn es nur um die Prüfung geht, ob ein User einen Feldwert geändert hat, brauchst du nicht unbedingt ein Profildokument.

Füge in den Declarations - Abschnitt der Maske eine Variable ein. Diese setzt du dann im Postopen-Event mit dem Wert des entsprechenden Feldes. Im QuerySave-Event kannst du dann den aktuellen Inhalt des Feldes mit der Variablen vergleichen und entsprechend reagieren.


Axel
Titel: Re: Änderung eines Feldes vor dem Speichern Prüfen
Beitrag von: Thomas Schulte am 26.09.05 - 13:17:48
Stimmt Axel aber mit dem Dokument geht das auch und es hat den Vorteil das du nicht jede einzelne Variable deklarieren musst.
Titel: Re: Änderung eines Feldes vor dem Speichern Prüfen
Beitrag von: oz am 26.09.05 - 13:42:10
Hallo Forum,

erst mal Danke für Eure Beiträge.
Ich habe jetzt folgendes getan:
In den Declarations meines Formulars:

Dim origDoc As NotesDocument

Dann im Postopen:
   Set origDoc = Source.Document
   Messagebox  origDoc.fldGlobalProfileName(0)

Die Ausgabe hier ist (welch Wunder) tatsächlich der Wert des Feldes im Backend Dokument. Soweit so Gut.

Dann im Querysave:

   Dim uiName As String
   uiName = Source.FieldGetText("fldGlobalProfileName")
   
   Dim beName As String
   beName = origDoc.fldGlobalProfileName(0)
   
   Messagebox uiName & " " & beName

Hier greife ich also nun nochmals auf die Variable origDoc zu. Nun enthalten die Variablen uiName und beName die gleichen Werte.
Offensichtlich werden hier nur Referenzen übergeben, die dann zur Laufzeit geändert werden.

Der Trick ist im PostOpen gleich einen String zu deklarieren, der den Wert des Feldes enthält und darauf zuzugreifen. Strings werden byvalue übegeben und bleiben somit stabil. Dann geht das ganze.

Vielen Dank Trotzdem

Oz