Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Klafu am 25.08.11 - 10:16:51

Titel: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 25.08.11 - 10:16:51
Hallo zusammen,

ich hab gerade den folgenden Fall, dass ich in einer DB ein neues Dokument erstelle.
Ich befülle alle Pflichtfelder (Prüfung im Querysave) und will das Dokument - via @Commands im Button - speichern.

Das passt auch alles soweit. Nur Im Script steigt er am Ende aus
Zitat
ergebnis := @Prompt([YesNo];"Hinweis";"Wollen Sie speichern?");
@If(ergebnis = 1&@Command([FileSave]);@Do(
...
@SetField
...
@If(@Command([FileSave]);@Command([ToolsRunMacro];"aSubmitApplication");""));@Return(""))
Das ist das Ende vom Script.  Dann kommt die Warnmeldung, dass das Dokument noch nicht gespeichert wurde und dann ist Schluss.

Wenn ich das Dokument schließ, kommt die Notes-Eigene Speicherabfrage. Wenn ich auf Nein klicke ist das Dokument trotzdem gespeichert und das Set Field ist auch noch gesetzt worden. Das heißt für mich, das es vermutlich am Agentenaufruf liegt - der ist in LS geschrieben und der Debugger wird auch nicht geöffnet.
Ich hab es auch schon mit @Command([RunAgent])  und @DocMark([Update]) probiert. Dort kommt aber die selbe Meldung.

Wie kann ich mit Formel einen Agenten in einem - mit @Command([FileSave)] gespeicherten Dok. - aufrufen?

Gruß Chris
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Axel am 25.08.11 - 13:48:29
Ich befülle alle Pflichtfelder (Prüfung im Querysave) und will das Dokument - via @Commands im Button - speichern.

Warum denn so umständlich?

Wenn du die Prüfung der Pflichtfelder im QuerySave ausführst warum rrufts du denn den Agenten auch nicht von dort aus? Mit Script bist du wesentlich flexibler und hast 1000 und eine Möglichkeit.

Axel
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 25.08.11 - 15:06:38
Hey Axel,

danke für die Antwort!
Geht das denn wenn der Agent das Dokument noch weiterverarbeiten und prüfen soll ?
Ab welcher stelle im QuerySave ist das Dokument denn gespeichert ?
Aber dem "END SUB"?  :)

Bekomm grad die Meldung
"Notes error: Unsupported trigger and search in the background or embedded agent"


Chris
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: koehlerbv am 25.08.11 - 21:34:05
Chris, mach das Überprüfungsgeraffel nur im QuerySave (oder rufe eine entsprechende Funktion in einer ScriptLibrary daraus auf). Das QuerySave hat nicht umsonst den Parameter Continue - wenn Du den im Fehlerfall auf False setzt, dann wird aus QuerySave ein "DoNotSave".

Beispiele:
Im QuerySave only:
... Code ...
If Source.Document.MyItem (0) = "" Then
   Messagebox "Gemecker!"
   Continue = False
   Exit Sub   'Besser: Sprung zu definiertem Ausstiegspunkt!
End If
... Code ...

In einer Function:
Function CheckMyValues (Source As NotesUIDocument) As Integer
... Code ...
If Source.Document.MyItem (0) = "" Then
   Messagebox "Gemecker!"
   CheckMyValues = False
   Exit Function   'Besser: Sprung zu definiertem Ausstiegspunkt!
End If
... Code ...

Der Aufrug der Function und der Bezug zu Continue sollte klar sein  :)

HTH,
Bernhard
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 25.08.11 - 22:17:19
Danke,  Bernhard!  :)
Das QuerySave hat ja bisher funktioniert und das Dokument wird auch gespeichert. Aber scheinbar nicht ganz.
Denn der Agent wird ja nicht aufgerufen, weil das Dokument angeblich nicht gespeichert ist.
Wenn ich dann aber das Script beende und das Dokument einfach nur schließe, dann passt das Dokument ja - Auch die wichtigen Felder sind gesetzt. Nur der Agent ist nicht geloffen.
Bisher hat ein einfach @Command([ToolsRunMacro];"AGENT")immer geklappt.
Ich hab nur bestimmt irgendwas übersehen  8)

Chris
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: koehlerbv am 25.08.11 - 22:40:22
Warum verwendest Du denn da überhaupt einen Agent? Von dem kriegst Du doch gar keine Rückmeldung. Zumindest nicht so, wie Du im Code gepostet hast, und auch sonst halte ich das bei einer Verifizierung für "schräg".

Sag mal an, Chris. Dir wird geholfen (hab' ja noch Urlaub).

Benrhard
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 25.08.11 - 23:22:25
Okay Bernhard. ;D

Ich fasse mich aber trotzdem kurz ;)

Also, in jedem Dokument ist ein Feld alà "Kategorie".
Je nachdem welcher Wert in diesem Feld steht, soll beim speichern eine Mail an eben diese Gruppe geschickt werden.
Gruppe heißt in dem Fall, dass in der Datenbank ein Konfig Dokument(Profildok) ist, in dem knapp 10 Felder sind, wo man jeweils die Mitglieder der Gruppe eintragen kann.

Der Agent soll also den Wert dieses Feldes prüfen, die Mitglieder aus dem entsprechenden Feld auslesen und ihnen eine Mail schicken.
Ansich bekomm ich dann von dem Agent wirklich keine Rückmeldung.
Der Agent ist in LS geschrieben und sollte auch funktionieren.
Beim ausführen der Aktion im Debugger wird der Agent aber nicht aufgerufen.

Mir kommt es grad so vor als würde alles vor und nach diesem Agentenaufruf funktionieren.
Gibt es für ToolsRunMacro irgendwelche Vorraussetzungen?

Chris
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 26.08.11 - 08:50:01
Live-Ticker:
26.08.2011 8:50 Uhr: Ungeklärter Fehler auf unerklärliche Weise verschwunden - Agent wird gestartet!



Vielleicht find ich dir Ursache noch >:(

Danke !!  :)
Chris
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 26.08.11 - 09:49:01
Live-Ticker:
26.08.2011 9:49 Uhr: Zu früh gefreut  :(


Edit: Hier der Betroffene Code - Das "Agent" bekomm ich noch angezeigt

ergebnis := @Prompt([YesNo];"Hinweis";"Wollen Sie das Dokument speichern?");
@If(ergebnis = 1;@Do(replicID := "svz.nsf";MyView := "($NamesFieldLookup2)";
auswahl := @PickList([Custom]:[Single];"SERVER":replicID;MyView;"Auswahl";"Wählen Sie den Vorgesetzten aus, wer diesen Antrag prüfen wird";1);
Vorname:= @DbLookup("":"NoCache";"SERVER":"svz.nsf";MyView;auswahl;"FirstName");
Nachname:= @DbLookup("":"NoCache";"SERVER":"svz.nsf";MyView;auswahl;"LastName");
Mail:= @DbLookup("":"NoCache";"SERVER":"svz.nsf";MyView;auswahl;"InternetAddress");
@SetField("Vorgesetzter"; "Das Dokument wurde an " +  Vorname + " " + Nachname + " zur Info weitergegeben");
@SetField("txtMailInfo";Mail);
@If(@Command([FileSave]);@Prompt([Ok];"test";"agent")&@Command([RunAgent];"aSubmitApplication");@Prompt([Ok];"test";"NICHT")));@Return(""))
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: koehlerbv am 26.08.11 - 12:57:22
Code
@Prompt([Ok];"test";"agent")[color=red][u][b]&[/b][/u][/color]@Command([RunAgent]

Das geht natürlich gar nicht - Du versuchst, die Ergebnis von @Prompt und @Command mit AND zu verknüpfen.

Bernhard
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Axel am 26.08.11 - 17:06:04
@If(@Command([FileSave]);@Prompt([Ok];"test";"agent")&@Command([RunAgent];"aSubmitApplication");@Prompt([Ok];"test";"NICHT")));@Return(""))

Bernhard hast es ja schon geschrieben, dass geht so nicht.

Wenn du mehrere Formelanweisungen hintereinander, z.B. in einem IF-Zweig, ausführen willst, dann musst du das mit @Do(...) machen.

In deinem Fall müsste das so aussehen:

@If(@Command([FileSave]);@Do(@Prompt([Ok];"test";"agent"); @Command([RunAgent];"aSubmitApplication"));@Prompt([Ok];"test";"NICHT")));@Return(""))

Axel
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: koehlerbv am 26.08.11 - 17:25:00
Friggelt der Agent eventuell auch noch am geöffneten Dokument im Backend herum? Das würde auch die Meldung "Wollen Sie speichern?" erklären.

Ich verstehe nach wie vor nicht, warum Du das nicht gleich alles in LotusScript machst. Die Lösung mit dem Buhtong halte ich auch für kritisch - zum Speichern / Beenden muss man ja nicht zwingend eben diesen benutzen.

Bernhard
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 29.08.11 - 08:22:23
Danke euch beiden.
Diese Nachricht hab ich nur Testweise eingebaut. Das heißt, dass auch ohne diese Prompts der Fehler kommt.
Genau so, wenn ich ein DO einbauen - selber Erfolg.

Der Agent jedoch, greift tatsächlich auf das Dokument zu. Und zwar über NotesDocument und NotesUIDocument.
Kann das daran liegen?
Sollte dann der Debugger aber nicht erst starten?

Warum ich es so mache ist, weil es den Button schon gab und ich die Funktion durch den Agenten gerne erweitern würde.
Und da davon nicht nur diese Maske betroffen ist, dachte ich mir, ich regel das Zentral über einen Agentenaufruf.

Chris
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 29.08.11 - 16:47:12
Also, ich hab es nun geschluckt und hab das ganze in LS umgesetzt. Warum das nicht tut, hab ich dennoch nicht verstanden.
Den Button gibts aber auch noch. Nur eben kürzer :)

ergebnis := @Prompt([YesNo];"Hinweis";"Wollen Sie den Dokument speicher?");
@If(ergebnis = 1;@Do(@Command([FileSave]);@Command([ToolsRunMacro];"aSubmitApplication2"));@Return(""))

Nun läuft es auf jeden Fall ... fast, denn sobald im Agenten einmal ein Call Uidoc.Save kommt, wird der Agent kommentarlos beendet.
Kommt er damit nicht klar, dass er im QuerySave Felder prüfen muss?

Chris
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: ata am 30.08.11 - 07:24:21
... wenn du im QuerySave - also vor der eigentlichen Speicherung über einen Agenten einen Save absetzt, dann kann das nicht gehen - Nested event...

Du hast ein Problem mit den Events - du musst dir klar machen wann die laufen und was sie ausführen. Bernhard und Axel hatten dir ja die Tipps für die Architektur bereits gegeben... ;) - deine Idee den Button mittels eines Agenten zu erweitern, damit der Agent auch weiterverwendet werden kann ist zunächst ja richtig - aber umständlich und in deinem Fall mit den Events eben falsch.

Nimm alles in eine LS-Library und ruf die entsprechenden Funktionen von dort aus auf...

Toni
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: Klafu am 30.08.11 - 10:56:18
Danke für die Antwort Toni.

Bei Script Libraries bewege ich mich auf dünnem Eis - das hab ich nämlich noch nie gemacht.
Ist der grobe Workflow so richtig?

- Ich übernehme den Code com Agenten in eine neue Script Lirary YYY
- Ich erstelle in der SL eine neues Sub XXX()
- ich geh in die entsprechende Maske und lad im Option-Event der Aktion "Use YYY" die SL
- Ich ruf über Call XXX() die Funktion auf
Aktuell bekomm ich so die Meldung Wrong Number of Arguments for: XXX
Ich konnte gerade leider keine Anleitungen oder Beispiele dazu finden.

Chris


EDIT: Es Funktioniert !! ;D
Die Frage ist nur, wie lange noch  :-P

Danke euch allen  ;)

Chris
Titel: Re: Das Dokument wurde noch nicht gespeichert
Beitrag von: ata am 30.08.11 - 11:55:03
... freut mich zu hören - aller Anfang ist schwer  ;) ;) ;)

Toni