Also warum Du das hier datum := @Text(@GetField("verleihdatum"));
tust, ist mir erst mal schleierhaft: wie willst Du nachher mit einem Text weiterarbeiten, Du brauchst doch ein datum. Damit fallen dann die Zeilen hier @If(
@Today <= @Adjust(datum;0;0;-7;0;0;0) & MailSent != "1";emailsenden;
@Today <= @Adjust(datum;0;0;-7;0;0;0) & MailSent != "1";
FIELD MailSent := "1";
"")
auf die Schnauze... Mal ganz abgesehen davon, dass "emailsenden" einfach nur eine Variable ist, der das Ergebnis des Mailsend vorher zugewiesen wird... Man kann in der Formelsprache keinen Code "Zwischenparken". Hier emailsenden := @MailSend(@GetField("an"); @GetField("verleiher");"";"Erinnerung zur Rückgabe";"";"Hallo Frau/Herr " + name + ","+ @NewLine + @NewLine+ "Bitte denken Sie daran Ihr geliehenes Gerät zuzückzugeben." + @NewLine +details);
wird die Mail bereits versendet...
Weil ich dachte das man es umwandeln muss, ich hatte mir den Wert immer per prompt ausgeben lassen und da gab es bei dem Datumsfeld immer leichte Probleme.
Also müsste es dann quasi einfach so sein:
datum := @GetField("verleihdatum");
Okay, dass man das nicht so zuweisen kann wusste ich nicht. ich hatte es gemacht, weil ich mir nicht sicher war ob die @mailsend formel in der if Abfrage stört und diese daher nicht funktioniert.
Quasi nun so:
@If(
@Today <= @Adjust(datum;0;0;-7;0;0;0) & MailSent != "1";@MailSend(@GetField("an"); @GetField("verleiher");"";"Erinnerung zur Rückgabe";"";"Hallo Frau/Herr " + name + ","+ @NewLine + @NewLine+ "Bitte denken Sie daran Ihr geliehenes Gerät zuzückzugeben." + @NewLine +details);
@Today <= @Adjust(datum;0;0;-7;0;0;0) & MailSent != "1";
FIELD MailSent := "1";
"")
Vielen Dank schon mal für die Antworten.
Ist denn der Grundaufbau meines Agenten richtig?
Hallo,
Warum holst Du Dir die Werte aus den entsprechenden Felden mit @GetField(...) in eine Variable?
Du kannst doch die Felder direkt ansprechen.
@If(@Today <= @Adjust(verleihdatum; 0; 0; -7; 0; 0; 0)
Warum fragst Du die 'Datumsdifferenz' (@Adjust) eigentlich zweimal ab? (zumal die zweite Abfrage warscheinlich eh nichts bringt, da diese sich im Else-Zweig Deiner @If-Abfrage befindet und somit nie zum Zuge kommt.
Andreas
In der Formelspracher verzichtet man im Normalfall auf verschachtelte Ifs und macht etwas, was man in anderen Programmiersprachen eigentlich nicht macht: Man bricht einfach die Code- Verarbeitung an passenden Stellen per @Return ab....
Laut Deiner Anforderung muss es im übrigen @Today != @Adjust( verleihdatum; 0 ; 0 ; -7; 0 ; 0 ; 0 ) heissen. Deine Variante bedeutet, dass bis sieben Tage vorher jeden Tag eine Mail versendet wird, danach nicht mehr (also selbst wenn Du AB sieben Tage vorher jeden Tag eine Mail versenden willst, ist das falsch, dann müsste es @Today >= @Adjust... heissen).
Dein Code würde (besser aber noch lange nicht gut) so aussehen:
@If( @Today != @Adjust(datum;0;0;-7;0;0;0) | MailSent = "1"; @Return( "" ) ; "" );
REM "Der Code hier wird nur ausgeführt, wenn der @Return oben die Ausführung nicht ebgebrochen hat";
datum := @Text(verleihdatum));
name := @Name([CN];an);
details := "Hallo Frau/Herr " + name + ","+ @NewLine + @NewLine+ "Bitte denken Sie daran Ihr geliehenes Gerät zuzückzugeben." + @NewLine + @NewLine +
"Anbei Ihre Informationen zu dem Gerät:" + @NewLine + @NewLine +
"-------------------------------------------------" +@NewLine +
"Gerät: " + neuGerät + " " + Workstationfeld + " " + Notebookfeld + " " + Sonstigefeld + " (" + neuHostname + ")" + @NewLine +
"-------------------------------------------------" + @NewLine +
"Verliehen bis: " + datum + @NewLine +
"-------------------------------------------------" + @NewLine +
"Sonstige Infos: " + infos + @NewLine +
"-------------------------------------------------" + @NewLine;
@MailSend(an; verleiher;"";"Erinnerung zur Rückgabe";"";details);
FIELD MailSent := "1";