Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: emadowo am 02.08.06 - 09:18:20
-
Hallo!
Hab im Querysave eine "Pflichtfeld-Abfrage" eingefügt, sprich: es müssen bestimmte Felder gefüllt sein, damit das Dokument gespeichert werden kann. Klappt eigentlich auch, sofern es sich um Textfelder handelt. Ist ein Pflichtfeld nicht gefüllt, springt Notes zurück zu diesem Feld, speichern ist nicht möglich. Beim Datumfeld springt Notes nicht zum Dokument (Feld) zurück, sondern schmeißt das neue Dokument weg.
Sicher sitze ich auf der Leitung - aber ihr könnt mir helfen!? Vielen Dank!
Der Code (ok, ich gebs zu: vom Forum hier "übernommen" ;) und modifiziert):
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If (source.document.VerArt(0) = "") Then
Msgbox ("Bitte erfassen Sie die Vertragsart!")
source.gotofield("VerArt")
continue = False
Exit Sub
End If
If (source.document.VerBeginn(0) = "") Then
Msgbox ("Bitte erfassen Sie den Vertragsbeginn!")
source.gotofield("VerBeginn")
continue = False
Exit Sub
End If
End Sub
-
If (source.document.VerBeginn(0) = "") Then
... würde ich so lösen:
If Trim(source.document.VerBeginn(0)) = "" then....
... sieh dir mal die Stellung der runden Klammern in der IF-Abfrage an...
-
Ist VerBeginn denn ein Textfeld? Was sagt der Debugger? Ein ErrorHandling wäre wohl auch gesprächiger ...
Wenn VerBeginn ein Datumsfeld ist:
If Not (IsDate (Source.Document.VerBeginn (0))) Then ...
Bernhard
-
Hallo und vielen Dank für die prompte Antwort!
Also: es wird noch der Hinweis "Bitte erfassen Sie den Vertragsbeginn" ausgegeben. Heißt doch, die IF-Abfrage hat Notes gemacht!?
EDIT durch Moderator: Bild auf Bitte des Autors entfernt.
-
Was passiert denn, wenn du vor dem "Exit Sub" in besagter If noch eine MsgBox ausgibst?
Das ganze hat nix mit Dialogboxen zu tun, oder? Hier gibts so einen ähnlichen Bug...
Mit
schmeißt das neue Dokument weg
meinst du, das Doc wird normal gespeichert und geschlossen, oder?
Grüsse
Moritz
-
Hallo!
Hab eine Msgbox vor ExitSub eingegeben, und diese wird auch ausgegeben. Es kommt somit die erste Msgbox, dann die zweite Msgbox, dann schließt sich das Dokument ohne es zu speichern - einfach weg, das erfaßte, im nirwana, niente, nothing :-: Vermutlich wird die Zeile gotofield.. nicht ausgeführt.
Vielen Dank für weitere Tipps! :-))
-
Also ich hab das eben getestet und bei mir funktioniert dein Code.
Die Frage stellt sich mir, warum wird das Doc geschlossen wenn du nur speicherst?
Wie wird das QueryClose aufgerufen? Durch "Ctrl + S"?
Bitte beschreibe mal ein bisschen das Umfeld.
Grüsse
Moritz
-
Hm, ich möchte ja speichern, aber er tus ja gar nicht. Das QueryClose wird durch Klick auf eine Schaltfläche "speichern" ausgelöst, hinter der ein "FileSave" steckt:@Command([FileSave]) und
@Command([FileCloseWindow]). Strg+S bewirkt dasselbe.
Btw: der Code für das Datumsfeld lautet dank der obigen Antworten jetzt anders:
If Trim(source.document.VerBeginn(0)) = "" Then
Msgbox ("Bitte erfassen Sie den Vertragsbeginn!")
source.gotofield("VerBeginn")
continue = False
Msgbox ("Testmeldung - verschwindet wieder!")
Exit Sub
End If
Das Umfeld beschreiben? Was meinst damit?
-
Oh, sorry, Strg+S bewirkt nicht dasselbe. Also:
wenn ich über meine Schaltfläche "Speichern" (command(FileSave) + CloseWindow) rausgehe, treten oben beschriebene Probleme auf, wenn ich über Strg+S raus möchte, funktioniert die Formel, der Cursor geht zum Datumsfeld.
Ein erster Erfolg, juhu! Jetzt müßt ich nur noch wissen, wo ich welche "FileSave"-Kommandos ins script einbauen muß, dann hau' ich die @-Formel aus der Schaltfläche raus. Vermutlich wärs das.
Hier nochmal das ganze Script:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If (source.document.VerArt(0) = "") Then
Msgbox ("Bitte erfassen Sie die Vertragsart!")
source.gotofield("VerArt")
continue = False
Exit Sub
End If
If (source.document.VerTitel(0) = "") Then
Msgbox ("Bitte erfassen Sie den Vertragstitel!")
source.gotofield("VerTitel")
continue = False
Exit Sub
End If
If (source.document.VerPartner(0) = "") Then
Msgbox ("Bitte erfassen Sie den Vertragspartner!")
source.gotofield("VerPartner")
continue = False
Exit Sub
End If
If (source.document.Verantwortlich(0) = "") Then
Msgbox ("Bitte erfassen Sie die verantwortliche Abteilung!")
source.gotofield("Verantwortlich")
continue = False
Exit Sub
End If
If (source.document.Verwahrort(0) = "") Then
Msgbox ("Bitte erfassen Sie den Verwahrort!")
source.gotofield("Verwahrort")
continue = False
Exit Sub
End If
If Trim(source.document.VerBeginn(0)) = "" Then
Msgbox ("Bitte erfassen Sie den Vertragsbeginn!")
source.gotofield("VerBeginn")
continue = False
Exit Sub
End If
End Sub
-
Und was steht in Deiner Schaltfläche konkret? Verwendest Du @PostedCommand für FileClose Window?
Bernhard
-
Konkret:
@Command([FileSave]);
@Command([FileCloseWindow])
-
Hallo, Freunde des Forums!
Es liegt wohl an der Kombination von FileSave mit FileCloseWindow! Habe letzteres weggelassen und auf der Schaltfläche "Speichern" auch wirklich nur speichern, dann klappen die Abfragen und die goto's.
Vielen Dank an alle fürs mithelfen! Einfach genial dieses Forum, da findet man immer eine Lösung (wenns auch manchmal Zeit zum durchforsten kostet, aber es macht tierisch Spaß sich durchzuwühlen)! :) :) :)
-
Und was passiert bei der Kombination
@Command ([FileSave]);
@PostedCommand ([FileCloseWindow]) ?
Bernhard
-
...gleiches Fänomän wie ursprünglich beschrieben...
Nachdem ich nun die Schaltflächen aufgedröselt habe in SPEICHERN und SCHLIESSEN separat, in SPEICHERN command>FileSave, in SCHLIESSEN postedcommand >FileCloseWindow und es so funktioniert, würde ich diesen Thread nicht mehr weiter vertiefen, es gibt sicher wichtigeres.
Vielen Dank nochmal!
:)
-
@Command([FileSave]);
@Command([FileCloseWindow])
macht man nicht! Sondern so:
@If(
@Command([FileSave]);
@Command([FileCloseWindow]);
""
)
So kann man dann auch auf ein Continue = false im Querysave reagieren.
Andreas
-
Wow - einfach genial - und funktioniert!
Interessant, daß eine IF-Bedingung auch ohne "Bedingung" geschrieben werden kann, also da wär ich nieeeee drauf gekommen.
::)
-
So ganz Stimmt das ja nicht was Du da jetzt sagst...
Syntax
@If( Bedingung1; Aktion1 ; Bedingung2; Aktion2 ; ... ; Bedingung99; Aktion99 ; Sonst-Aktion )
Die "" sind einfach nur eine leere Anweisung.
In Nicht-Formel könnte man schreiben
--> der Code ist nur exemplarisch zu sehen <--
If FileSave then
FileCloseWindow
else
' hier passiert nu nix
EndIf
Ist unschön, deswegen mache ich das nicht... Aber Kollgen würden sowas machen. Ist Philosophie. :)
André
-
If FileSave then
FileCloseWindow
else
' hier passiert nu nix
EndIf
Mein Verständnis einer "Bedingung" in IF-Schleifen war, daß ein Operator (istgleich, ungleich, oder, usw.) dabei sein muß. Dass nur ein Kommando allein schon eine "Bedingung" ist, war mir neu.
Man lernt halt nie aus!
-
Du kannst es auch ausschreiben: @If (@Command [Filesave]) = @True; ...)
Par definitionem geht sowohl Formelsprache als auch LotusScript davon aus, dass mit einem fehlenden @True / True eben dieses gemeint ist.
Bernhard