Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: emadowo am 02.08.06 - 09:18:20

Titel: querysave Datumfeld
Beitrag 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
Titel: Re: querysave Datumfeld
Beitrag von: klaussal am 02.08.06 - 09:28:25
Zitat
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...
Titel: Re: querysave Datumfeld
Beitrag von: koehlerbv am 02.08.06 - 09:29:47
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
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 02.08.06 - 09:58:57
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.
Titel: Re: querysave Datumfeld
Beitrag von: Untitled am 02.08.06 - 14:40:12
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
Zitat
schmeißt das neue Dokument weg
meinst du, das Doc wird normal gespeichert und geschlossen, oder?

Grüsse
Moritz
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 09.08.06 - 08:21:58
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! :-))
Titel: Re: querysave Datumfeld
Beitrag von: Untitled am 09.08.06 - 08:33:05
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
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 09.08.06 - 17:42:04
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?
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 09.08.06 - 17:48:16
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

Titel: Re: querysave Datumfeld
Beitrag von: koehlerbv am 09.08.06 - 17:53:22
Und was steht in Deiner Schaltfläche konkret? Verwendest Du @PostedCommand für FileClose Window?

Bernhard
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 11.08.06 - 08:06:04
Konkret:

@Command([FileSave]);
@Command([FileCloseWindow])
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 14.08.06 - 10:36:44
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)!  :) :) :)
Titel: Re: querysave Datumfeld
Beitrag von: koehlerbv am 14.08.06 - 11:05:10
Und was passiert bei der Kombination
@Command ([FileSave]);
@PostedCommand ([FileCloseWindow]) ?

Bernhard
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 16.08.06 - 13:53:49
...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!

 :)
Titel: Re: querysave Datumfeld
Beitrag von: Glombi am 16.08.06 - 14:13:06
@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
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 17.08.06 - 11:39:37
Wow - einfach genial - und funktioniert!


Interessant, daß eine IF-Bedingung auch ohne "Bedingung" geschrieben werden kann, also da wär ich nieeeee drauf gekommen.
 ::)
Titel: Re: querysave Datumfeld
Beitrag von: DerAndre am 17.08.06 - 11:47:22
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é
Titel: Re: querysave Datumfeld
Beitrag von: emadowo am 17.08.06 - 12:02:25
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!
Titel: Re: querysave Datumfeld
Beitrag von: koehlerbv am 17.08.06 - 12:06:02
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