Autor Thema: Täglicher Agent - Datumvergleich - Email senden  (Gelesen 9141 mal)

Offline Amelia

  • Frischling
  • *
  • Beiträge: 4
  • Geschlecht: Weiblich
Täglicher Agent - Datumvergleich - Email senden
« am: 06.11.12 - 10:31:33 »
Hallo Zusammen,

ich soll für eine Abteilung eine Lotus Notes Datenbank erstellen(Azubiprojekt), bei der man Geräte verwalten kann, quasi eine "Verleihdatenbank". Diese ist bereits erstellt und funktioniert soweit.

In den Dokumenten werden Geräteinformationen abgespeichert, unter anderem Geräte Typ, an wen und wie lange es verliehen wird. Die Info wie lange es verliehen wird, wird ein einem Datumsefld ausgewählt(Feld:"verleihdatum").

Die "Verleiher" möchten nun dass eine automatische Erinnerungsmail kommt, sobald das aktuelle Datum sieben Tage vor dem Abgabe Termin ist, also immer eine Woche vor Ablauf eine Erinnerung.

Ich für diese Aufgabe leider noch keine passende Hilfe gefunden. Hier im Forum gab es ein fast identisches Problem,  habe auch die Lösungsvorschläge versucht die dort gegeben wurden.
(http://atnotes.de/index.php?action=printpage;topic=26094.0)

Leider kam ich bisher auf keine funktionierende Lösung. Daher nun hier meine Frage an euch ob ihrmir weiterhelfen und Tipps geben könnt wo meine Fehler liegen und was ich anders machen müsste.

Ich poste euch einfach mal was ich bisher habe (bitte behachten das ich zum ersten mal mit Notes arbeite und auch nicht wirklich die Zeit habe mich viel damit zu beschäftigen :-[)

Das habe ich im Agent stehen:

SELECT @All;

datum := @Text(@GetField("verleihdatum"));
name := @Name([CN];@GetField("an"));

details := + @NewLine + @Text(
+ @NewLine + "Anbei Ihre Informationen zu dem Gerät:" + @NewLine + @NewLine +  "-------------------------------------------------" +@NewLine + "Gerät: " + @GetField("neuGerät")  + " " + @GetField("Workstationfeld") + @GetField("Notebookfeld") + @GetField("Sonstigefeld") + " (" + @GetField("neuHostname") + ")" +  @NewLine +
"-------------------------------------------------" + @NewLine +
"Verliehen bis: " + datum + @NewLine +
"-------------------------------------------------" + @NewLine +
"Sonstige Infos: " + @Text(@GetField("infos")) + @NewLine +
 "-------------------------------------------------" + @NewLine
);

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);

@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";
"")



Mir ist bewusst das der Code nicht gerade das gelbe von Ei ist, gerade was die Feldnamen betrifft. Aber ich hoffe ihr könnt trotzdem verstehen was ich meine.

Ich würde mich über Lösungsansätze freuen.

Vielen Dank schon mal im Vorraus.


LG Amelia

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.696
  • Geschlecht: Männlich
Re: Täglicher Agent - Datumvergleich - Email senden
« Antwort #1 am: 06.11.12 - 11:10:58 »
Hallo,

Und was funktioniert nicht bzw. wo haengt es denn jetzt?

In dem verlinkten Post ist doch die Loesung schon enthalten.


Andreas

Offline Amelia

  • Frischling
  • *
  • Beiträge: 4
  • Geschlecht: Weiblich
Re: Täglicher Agent - Datumvergleich - Email senden
« Antwort #2 am: 06.11.12 - 11:15:24 »
Das hab ich natülrich vergessen aufzuschreiben, sorry.

Also wenn ich den Agent teste/starte, geht er durch alle Dokumente durch, die fi Abfrage greift quasi nicht?  :-:

Ich habe mir den verlinkten Post mehrmals duchgelesen, auch meine anderen Azubikollegen haben mit drüber geschaut, aber wir kommen nicht auf die Lösung was bei uns falsch ist.

Deswegen ja meine Frage an euch ob ihr seht wo der Fehler liegt, und was ich evtl ändern müsste.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Täglicher Agent - Datumvergleich - Email senden
« Antwort #3 am: 06.11.12 - 11:16:55 »
Also warum Du das hier
Code
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
Code
@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
Code
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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Amelia

  • Frischling
  • *
  • Beiträge: 4
  • Geschlecht: Weiblich
Re: Täglicher Agent - Datumvergleich - Email senden
« Antwort #4 am: 06.11.12 - 14:25:32 »
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:
Code
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:
Code
@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?

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.696
  • Geschlecht: Männlich
Re: Täglicher Agent - Datumvergleich - Email senden
« Antwort #5 am: 06.11.12 - 14:41:05 »
Hallo,

Warum holst Du Dir die Werte aus den entsprechenden Felden mit @GetField(...) in eine Variable?
Du kannst doch die Felder direkt ansprechen.

Code
@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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Täglicher Agent - Datumvergleich - Email senden
« Antwort #6 am: 06.11.12 - 16:27:24 »
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:
Code
@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";
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Amelia

  • Frischling
  • *
  • Beiträge: 4
  • Geschlecht: Weiblich
Re: Täglicher Agent - Datumvergleich - Email senden
« Antwort #7 am: 07.11.12 - 08:37:02 »
Zitat
Warum holst Du Dir die Werte aus den entsprechenden Felden mit @GetField(...) in eine Variable?
Wie vorhin schon erklärt hatte ich das so, weil ich dachte das Notes sonst das Feld nicht verarbeiten kann, weil ich keinen richtigen Rückgabewert des Feldes hatte.

Zitat
In der Formelspracher verzichtet man im Normalfall auf verschachtelte Ifs und macht etwas, was man in anderen Programmiersprachen eigentlich nicht macht
Okay, Notes ist für mich in vielen Dingen noch sehr unversändlich, gerade was die Formelsprache betrifft.


Das mit dem Adjust hatte ich so aus dem anderem Thread den ich gepostet hatte übernommen. Da ich mir selbst nicht ganz sicher war.


Schon mal vielen herzlichen Dank für die große Hilfe, werde mich gleich dran setzen und versuchen es umzusetzen.

Habe noch eine Frage an dich Tode:
Du hattest mir ja einen Vorschlag für den Code wie er aussehen könnte geschickt, und unter anderem "datum := @Text(verleihdatum));" mit aufgeführt. Brauche ich nun das @Text, oder nicht? So wie du ja schon geschrieben hattest, eigentlich nicht? Hatte mich jetzt etwas verwirrt. Ich bin anfangs davon ausgegangen, da prompt mir ohne das @text davor keinen Wert ausgibt, dass das Datum dann auch nicht mit @Adjust verglichen werden kann.


Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Täglicher Agent - Datumvergleich - Email senden
« Antwort #8 am: 07.11.12 - 08:42:55 »
Du willst das Datum in Deinem MailTEXT verwenden... Ein Datum kann man aber nicht mittels "+" mit einem Text verknüpfen (ungültiger Operator, Text erwartet). Deshalb die Hilfsvariable, aber eben nur für den Text der Mail.

Ach: Habe noch einen Fehler in meiner Formel entdeckt... in der ersten Zeile muss es natürlich heissen
@Adjust(verleihdatum;0;0;-7;0;0;0)
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz