Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mgeidl am 28.02.06 - 11:18:53

Titel: Mailbenachrichtigung mit 5er geht, mit 6er nicht
Beitrag von: mgeidl am 28.02.06 - 11:18:53
Hallo,

ich hab folgendes Problem: Ich hab eine Urlaubsdatenbank, in der der Mitarbeiter seinen Urlaub beantragt und dann über einen Hotspot das Dokument mit DokLink an den Abteilungsleiter zur Genehmigung per Mail sendet.

Damit der User nicht immer in die Datenbank rein muß, hab ich die Mail-Schablone dahingehend modifiziert, daß über eine Schaltfläche, die ein @Command([Compose];...... ausführt, das Dokument gleich aufgerufen wird.

Unter dem 5er Client hat alles reibungslos funktioniert. Mit dem 6er Client wird die Mail-Benachrichtigung nur dann geschickt, wenn ich das Dokument aus der Datenbank selbst heraus aufrufe. Sobald ich´s über die Schaltfläche mach, werden alle Aktionen ausgeführt, nur das Senden der Mail nicht.

Bitte um eure Hilfe. DANKE

Marietta
Titel: Re: Mailbenachrichtigung mit 5er geht, mit 6er nicht
Beitrag von: Tode am 28.02.06 - 11:23:12
tja, da wirst Du wohl Opfer der neuen Ausführungsreihenfolge von Befehlen in R6.

Genau das sind die Dinge, die man vor der Migration von R5 auf R6 hätte prüfen müssen, denn genau hier hat sich vieles geändert ...

Aber genug "kluggeschi..en"...

Poste mal Deinen Kompletten Code, dann können wir Dir auch sagen, wo es Dir die Reihenfolge verdreht...

Gruß
Tode

Titel: Re: Mailbenachrichtigung mit 5er geht, mit 6er nicht
Beitrag von: mgeidl am 28.02.06 - 12:23:03
Hallo,

neue Reihenfolge?? Hier die Befehle, die ausgeführt werden:

@Command([ViewRefreshFields]);

tmpdoppelt:=@DbLookup( "": "NoCache" ;"":"";"doppelt";doppelt;1);
@If(@IsError(tmpdoppelt);"";@Prompt([Ok];"Fehler";"Eine Abwesenheit für diese Personalnummer und Datum wurde bereits eingetragen!"));

@If(Abwesenheit="Sonderurlaub" & Begründung="";@SetField("Begründung";@Prompt([OkCancelEdit]; "Pflichtfeld"; "Geben Sie eine Begründung für Ihre Abwesenheit ein!";""));Abwesenheit="unbez. Urlaub zu Lasten DN" & Begründung="";@SetField("Begründung";@Prompt([OkCancelEdit]; "Pflichtfeld"; "Geben Sie eine Begründung für Ihre Abwesenheit ein!";""));


@If(@IsError(tmpdoppelt);@MailSend(GenehmigungDurch;"";"";"Urlaubsantrag/Abwesenheitsmeldung für "+Name;"";"";[IncludeDoclink]);""));
@If(@IsError(tmpdoppelt);@PostedCommand([FileSave]);"");
@If(@IsError(tmpdoppelt);@Command([FileCloseWindow]);"")
Titel: Re: Mailbenachrichtigung mit 5er geht, mit 6er nicht
Beitrag von: Tode am 28.02.06 - 13:33:40
und wo ist in diesem code das Compose ?

nur mal so als Tipp nebenbei: Du machst Dir die Sache in der Programmierung wesentlich einfacher, wenn Du mit @Return arbeitest:

Diese Zeile:
@If(@IsError(tmpdoppelt);"";@Prompt([Ok];"Fehler";"Eine Abwesenheit für diese Personalnummer und Datum wurde bereits eingetragen!"));

einfach so erweitern:

@If(@IsError(tmpdoppelt);"";@Return( @Prompt( [Ok];"Fehler";"Eine Abwesenheit für diese Personalnummer und Datum wurde bereits eingetragen!")));

dadurch sparst Du Dir in die Folge alle @Ifs die auf @IsError... abfragen, weil Der Code durch das @Return an der Stelle abbricht...

AUch wenn das Compose im Code- Segment fehlt, vermute ich einen falschen Formel- Kontext:

Die Maske wird zwar "composed", aber der Code greift noch auf die Daten aus der Mail- DB zurück (also z.B. das dort gerade markierte Dokument). Dort gibt es höchstwahrscheinlich kein Feld "GenehmigungDurch", weshalb der @Mailsend fehlschlägt. Probiers mal mit

@UpdateFormulaContext

Gruß
Tode
Titel: Re: Mailbenachrichtigung mit 5er geht, mit 6er nicht
Beitrag von: Untitled am 28.02.06 - 13:36:53
Code
@If(@IsError(tmpdoppelt);@PostedCommand([FileSave]);"");
@If(@IsError(tmpdoppelt);@Command([FileCloseWindow]);"")

Also was ich gerade auf den ersten Blick sehe ist hier, dass das Fenster zuerst geschlossen wird und dann gespeichert. @PostedCommand wird doch immer am Ende ausgeführt, egal wo es steht.

Oder irre ich mich da jetzt?  ::)

Grüsse
Moritz
Titel: Re: Mailbenachrichtigung mit 5er geht, mit 6er nicht
Beitrag von: Tode am 28.02.06 - 13:42:31
Theoretisch hast Du recht @Untitled, wenn da nicht bestimmte "Restriktionen" in der Ausführungsreihenfolge wären:

1. FileCloseWindow und ToolsRunMacro (und einige weitere) laufen immer erst NACH der kompletten Ausführung des Codes, egal ob mit @Posted oder ohne...

In R6 ist das ganze ein wenig geändert worden, so dass man sich MEHR auf die Reihenfolge im Code verlassen kann und weniger auf solche Ausnahmen achten muss, bei vielen Befehlen gibt es dafür aber einen neuen Befehl, um das zu tun (z.B. ToolsRunMacro = RunAgent)

Das ist ein Grund, weshalb man Datenbanken, die unter R5 entwickelt wurden, sorgfältig testen sollte, bevor man sie nach R6 migriert, auch wenn mir das nie jemand glaubt, wenn ich bei Fragen "wie date ich schnell auf R6 ab...." darauf hinweise...

Gruß
Tode