Autor Thema: @Command([ReloadWindow]) macht nicht das was ich erwarte  (Gelesen 4157 mal)

Offline gstueb

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
  • God is real unless declared integer
Hallo,

ich habe eine Maske, die entweder zum Bearbeiten oder zur Ansicht geöffnet ist. Es gibt dort einen Aktionsbutton "Erste Beurteilung erfolgt". Wenn die Maske zum bearbeiten geöffnet ist, soll sie erst gespeichert werden, anschließend wird ein Agent aufgerufen, der im Dokument ein paar Felder setzt.

Soweit klappt auch alles. Nach dem Klick auf die Aktion befinde ich mich im Vorschaumodus, allerdings werden mir die Felder, die der Agent gesetzt hat, nicht angezeigt. Wenn ich aus dem Dokument raus- und wieder reingehe, werden mir die geänderten Daten angezeigt.

Warum funktioniert der @Command([ReloadWindow]) hier nicht? Wer kann mir den genauen Unterschied zwischen @Command([ReloadWindow]) und @Command([RefreshWindow]) erklären?

Code
@If(@IsDocBeingEdited;
   @If( @Command([FileSave]);"";@Return(0) );
"");
@Command([EditDocument];"0");
@Command([ToolsRunMacro];"(Erste Beurteilung erfolgt)");
@Command([ReloadWindow])

Der Agent (Erste Beurteilung erfolgt):

Code
FIELD SKBeurteilt1 := @Text(@Now) + " " + @UserName;
Aktion := "Erste Beurteilung";
FIELD Protokoll:=Protokoll + @NewLine + Aktion + " am " + @Text(@Now) + " von " + @UserName;
SELECT @All

Danke & Gruß,
Gregor

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #1 am: 13.09.10 - 15:44:36 »
Irgendwo in der Hilfe steht, dass Agentenaufrufe immer am Ende der Formel ausgeführt werden, unabhängig davon, wo sie in der Formel stehen. Folglich wird ReloadWindow wohl vor dem Agentenlauf ausgeführt.

klaussal

  • Gast
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #2 am: 13.09.10 - 15:46:53 »
RelaodWindow:
Zitat
This command executes after all @functions.

RefreshWindow:
Zitat
This command executes immediately.

Steht alles in der Hilfe.....

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #3 am: 13.09.10 - 16:07:32 »
Zitat
This command executes after all @functions.
Das steht bei ToolsRunMacro auch in der Hilfe.

Welches Event nun als letztes von den zuletzt ausgeführten Events ausgeführt wird?

Habe dabei auch @Command ([RunAgent]; ...) gefunden, das soll sofort ausgeführt werden, sollte vielleicht mal probiert werden.

Offline gstueb

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
  • God is real unless declared integer
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #4 am: 13.09.10 - 16:30:26 »
Irgendwo in der Hilfe steht, dass Agentenaufrufe immer am Ende der Formel ausgeführt werden, unabhängig davon, wo sie in der Formel stehen. Folglich wird ReloadWindow wohl vor dem Agentenlauf ausgeführt.

Das hatte ich auch vermutet, aber da auch ein wiederholtes klicken auf meinen Button nichts anzeigte, konnte ich dies als Grund eigentlich ausschließen.

Aber auch das Ändern des Agent-Aufrufes auf

Code
@Command ([RunAgent];"(Erste Beurteilung erfolgt)");

bringt nichts. Auch das Aktualisieren mit F9 zeigt die Änderungen nicht an. Ich muss das Dokument verlassen und wieder reingehen, vorher klappt nichts.

Hmm?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #5 am: 13.09.10 - 16:49:06 »
Ich verstehe aber auch nicht, wozu das Dokument vor den Änderungen in den Lesemodus gebracht wird. Mit Script über's Backend das Dokument zu ändern halte ich übrigens für besser. Neue Werte reinschreiben, fertig. Wenn die Felder nicht Richtext sind, ist das kein Problem und wird sofort angezeigt. Kein Gehampel mit irgendwelchen Agenten usw.

Dim session As New NotesSession
Dim username As New NotesName (session.Username)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Dim doc As NotesDocument
Set doc = uidoc.Document

doc.SKBeurteilt1 = Format (Now, "dd.mm.yyyy hh:nn:ss") & " " & username.Abbreviated
doc.Protokoll = doc.Protokoll (0) & Chr (13) & Chr (10) & "Erste Beurteilung am " & doc.SKBeurteilt1 (0)

Wenn's danach unbedingt der Lesemodus sein soll, dann noch

Call doc.Save (True, True)
uidoc.EditMode = False

Das hebelt allerdings die Validierungsformeln aus. Falls Validierung notwendig ist, dann mit uidoc.Save arbeiten

Ungetestet, sollte so funktionieren

Offline heini_schwammerl

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 697
  • Geschlecht: Männlich
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #6 am: 13.09.10 - 16:51:21 »
Das Verhalten ist in Verbindung mit einem Agenten meiner Meinung nach typisch da der Agent Veränderungen vornimmt die vom Frontend nicht gesehen werden. Man müsste wahrscheinlich das aktuelle Dokument schliessen und wieder öffnen oder auf den Einsatz von Agenten verzichten.
Inwieweit hier die neue Möglichkeit in 8.5.2, einem Agenten ein doc mitzugeben, etwas ändert kann ich leider nicht sagen.
Leider kann ich den Sachverhalt nicht so gut erklären, evtl. liege ich auch falsch.

Offline gstueb

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
  • God is real unless declared integer
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #7 am: 13.09.10 - 17:06:01 »
Ich verstehe aber auch nicht, wozu das Dokument vor den Änderungen in den Lesemodus gebracht wird. Mit Script über's Backend das Dokument zu ändern halte ich übrigens für besser.

Wenn das Dokument "beurteilt" wurde, werden bestimmte Abschnitte gesperrt, so dass dort nichts mehr geändert werden darf. Deshalb will ich das dem Edit-Mode raus.

Auch wenn ich das ganze per Script mache, wird mir das Frontend nicht aktualisiert, wenn ich die Aktion im Lesemodus ausführe.

Hmm, eigentlich hätte ich den Button aber schon gerne auch im Vorschaumodus in der Maske angeboten... Ich werde dann eben versuchen, das Dokument zu schließen und wieder zu öffnen.

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #8 am: 13.09.10 - 17:07:52 »
im Backend ändern - Frontend schließen - Forntend mit geänderten Werten wieder anzeigen.

wieso soll das nicht gehen?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline gstueb

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
  • God is real unless declared integer
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #9 am: 13.09.10 - 17:57:23 »
im Backend ändern - Frontend schließen - Forntend mit geänderten Werten wieder anzeigen.
wieso soll das nicht gehen?

Stimmt, das funktioniert. Dann mach' ich das jetzt so.

Vielen Danke für die ganzen Tipps.

Gruß,
Gregor

Offline gstueb

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
  • God is real unless declared integer
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #10 am: 13.09.10 - 18:18:48 »
Call doc.Save (True, True)
uidoc.EditMode = False

Das hebelt allerdings die Validierungsformeln aus. Falls Validierung notwendig ist, dann mit uidoc.Save arbeiten

Ich habe im Querysave ein Script, welches verschiedene Felder auf Plausibilität prüft.

Kann ich irgendwie feststellen, ob der uidoc.Save ausgeführt wurde? Im Gegensatz zum doc.Save gibt mir der uidoc.Save ja keinen Rückgabewert zurück. Ansonsten würde ich im QuerySave halt eine globale Variable setzen und die abfragen...

Code
Dim session As New NotesSession
Dim username As New NotesName (session.Username)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Dim doc As NotesDocument
Set doc = uidoc.Document

If uidoc.EditMode = False Then 
      Call uidoc.Save ' Wie prüfe ich, ob das erfolgreich war?
      uidoc.EditMode = False
End If

doc.SKBeurteilt1 = Format (Now, "dd.mm.yyyy hh:nn:ss") & " " & username.Abbreviated
doc.Protokoll = doc.Protokoll (0) & Chr (13) & Chr (10) & "Erste Beurteilung am " & doc.SKBeurteilt1 (0)

Call doc.Save (True, False)

Call uidoc.Close
Call workspace.EditDocument(False, Doc, False)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #11 am: 13.09.10 - 18:32:15 »
Dazu verwende ich eine eigene Routine

Function DokumentSpeichern (uidoc As NotesUIDocument) As Integer
   On Error Goto Fehler   
   DokumentSpeichern = True
   Call uidoc.Save
   Exit Function
Fehler:
   DokumentSpeichern = False
   Exit Function
End Function

Die rufe ich dann auf

If DokumentSpeichern (uidoc) Then
   ... Speichern war erfolgreich
Else
   ... Speichern war nicht erfolgreich
End If

Offline gstueb

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
  • God is real unless declared integer
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #12 am: 14.09.10 - 11:06:14 »
Dazu verwende ich eine eigene Routine

Function DokumentSpeichern (uidoc As NotesUIDocument) As Integer
   On Error Goto Fehler   
   DokumentSpeichern = True
   [...]

Ok, das werde ich auch so machen. Gibt es einen Grund, warum die Funktion als Integer und nicht als boolean deklariert wurde oder ist das ein Vertipper?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Command([ReloadWindow]) macht nicht das was ich erwarte
« Antwort #13 am: 14.09.10 - 12:11:56 »
... Gibt es einen Grund, warum die Funktion als Integer und nicht als boolean deklariert wurde oder ist das ein Vertipper?
Der Hauptgrund dafür ist der, dass ich erst sehr spät irgendwo gesehen habe, dass es auch Boolean gibt. Funktioniert mit Integer aber gut, kann man auch auf True und False abfragen, also bleibe ich dabei, bis ich irgendwann eines Besseren belehrt werde.

Habe auch schon erlebt, dass Funktionen später unerwartet neben "ja" und "nein" auch ein "vielleicht" oder "ja, ganz sicher" zurückgeben müssen, dann brauche ich den Parameter nicht zu ändern, was ich in zentralen Bibliotheken, die in allen DB verwendet werden, gerne vermeide.

Du kannst das aber gerne mit Boolean schreiben, ist ja, wie alles, was ich hier von mir gebe, nur eine Anregung.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz