Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Bensen am 05.10.05 - 13:50:00

Titel: Täglicher Agent - Datumsvergleich
Beitrag von: Bensen am 05.10.05 - 13:50:00
Hallo alle zusammen,

ich hab ein problem mit meiner betrieblichen abschlussprojektarbeit. ich entwickle eine ln-datenbank um verträge abzulegen. dabei würde ich gerne einen agenten anbieten, der einen datumsvergleich durchführt (und ja ich weiß das es auch schon 1000 mal durchgekaut wurde, ich aber in den anderen threads nichts für mich passendes gefunden habe :( )

also ich habe ein feld, in welches das ablaufdatum des vertrages eingegeben wird und ein feld in welches das aktuelle datum per @today eingetragen wird.
einen agenten, der das "@today" feld täglich aktualisiert habe ich bereits erstellt.

der agent soll folgendes "können"
das ablaufdatum mit dem heutigen datum vergleichen und wenn die anzahl der tage zwischen den daten <14 ist, soll eine email verschickt werden.

tut mir echt leid, aber ich blick es einfach nicht, wie ich das auf die beine stellen kann :( - hoffe einer von euch kann mir helfen ...  :-:

danke schon mal!!
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: koehlerbv am 05.10.05 - 13:59:07
Formel oder LS oder Java ?
Und wozu schreibst Du (offensichtlich täglich) @Today in ein Feld jeden Dokuments ?

Darfst Du die Abschlussarbeit auch ohne Grossbuchstaben schreiben ?

Bernhard
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: Bensen am 05.10.05 - 14:08:07
Also Formelsprache wäre mir am liebsten, da ich mich mit LS / Java nicht wirklich auskenne.

Das "Today" - Feld ist in einer Teilmaske welche ich in verschiedenen anderen Masken auch noch verwende.

Und nein leider darf ich das nicht, es würde einiges vereinfachen ;) - wie du siehst versuche ich mich schon an die Grossbuchstaben zu gewöhnen :)
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: koehlerbv am 05.10.05 - 14:13:28
Der Sinn eines täglich aktualisierten Feldes mit dem Inhalt "heute" erschliesst sich mir überhaupt nicht ... Jeden Tag ist heute heute (und gestern wird übermorgen vorgestern sein  ;D).

Da Du Deine Arbeit ja selber schreiben musst:
Dein Agent muss prüfen, ob er gerade ein entsprechendes Dokument am Wickel hat (Form = "...").
Wenn das gegeben ist, dann nimmst Du @Today (nicht das sinnlose Feld) und vergleichst diesen Datumswert mit dem Ablauftermin-Feld - 14 Tage. Hierzu gibst Du der @Adjust-Function eine Chance.

HTH,
Bernhard
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: Gandhi am 05.10.05 - 14:18:35
Die so erzeugten Daten kannst Du einfach per < > = vergleichen.
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: Bensen am 05.10.05 - 14:43:31
sry aber ich blicks nicht  ??? kann mir nicht einer nen konkreten ansatz geben

To find the difference between two dates, subtract them. The result is returned in seconds. To adjust the result to days, divide the result by 86,400 - which is the number of seconds in a day. For example, if you have two date fields, date1, which contains [07/01/01] and date2, which contains [07/05/01], use the following formula to return the number of days between the two dates:
(date2-date1)/86400
This code returns 4.


das ist ja genau das was ich brauche aber ich kriegs net auf die kette
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: koehlerbv am 05.10.05 - 14:48:02
dusollstnichtsubtrahierensondernvergleichen.
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: Bensen am 05.10.05 - 14:56:04
muss toll sein von etwas soviel ahnung zu haben ... wie soll ich denn sonst bitte auf die 14 tägige differenz kommen um dann zu sagen "hallo - email muss raus"??
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: klaussal am 05.10.05 - 14:56:17
Wenn man sich das Problem näher anschaut, dann kriegt da jemand 14 Tage lang eine Mail gesendet  ;D

Zitat
dusollstnichtsubtrahierensondernvergleichen
Ist das das 11. Gebot  ??? ;D ???
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: Gandhi am 05.10.05 - 15:05:02
Wenn das Ergebnis Deiner Subtraktion <=14 ist, dann ist es an der Zeit ein echter Mann zu sein und ein Mail zu versenden. 8)
Richtig ist: Erst subtrahieren und dann das Ergebnis mit 14 vergleichen.
Ist es grösser als 14, ist das eine Datum vom anderen weniger als 14 Tage entfernt (Achtung: je nach Reihenfolge der Daten können auch falsche Werte - negative rauskommen - einfach probieren).
Ist es kleiner oder gleich 14, dann versende das mail

@if(((date2-date1)/86400)>14;@return(0);@do(.........));

.....heisst in dem Fall: Mail versenden - und was sonst noch so dazugehört.
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: koehlerbv am 05.10.05 - 15:09:37
Einfacher geht es mit Adjust - dann kann man auf Subtraktion und Division verzichten und kommt mit einem schlichten "<" aus  ;)

Dann sollte man sich noch was einfallen lassen, dass bei Erfüllung der Bedingung das Mail nur einmal versandt wird.
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: Gandhi am 05.10.05 - 15:14:27
Na ja, wie man auf die Differenz kommt ist meiner Meinung nach eine Geschmacksfrage.
Das Senden den Mails könnte man mit dem Setzen eines Flags (=Feld/Feldwert) dokumentieren - und dieses Flag in der Formel mitabfragen.
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: Bensen am 05.10.05 - 15:20:39
also erstmal danke für die hilfe, der agent läuft und das nimmt mir erstmal ne menge last von den schultern ..

das mit dem ständigen sende der mail stimmt - ist wirklich ein problem, obwohl es da auf die leute ankommt die die mail erhalten ;)

@gandhi
kann ich dann praktisch ein verstecktes feld im dokument erstellen, diesem den wert 1 (oder was auch immer) geben, wenn ich bei genau 14 tagen die mail versandt habe und dann auf das feld abfragen -> wenn feld den wert 1 besitzt, dann keine mail ??
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: Gandhi am 05.10.05 - 15:24:54
genau
Titel: Re: Täglicher Agent - Datumsvergleich
Beitrag von: koehlerbv am 05.10.05 - 15:34:37
Dafür brauchst Du noch nicht mal ein (verstecktes) Feld erstellen: Lass den Agent einfach ein Item erstellen:
FIELD MailSent := "1"
Vor dem Mailen fragst Du dann ab, ob das MailSent-Feld (mit "1") gefüllt ist ...

Die Maske sollte aber die Property "Replizierkonflikte mischen" haben, damit Du Dir hier durch den Agent keine Konflikte ins Haus holst.

Da Du jetzt schon eine Lösung hast:
@If (@Today <= @Adjust (Vertragsende; 0; -14; 0; 0; 0; 0) & MailSent != "1"; @MailSend (...); @Return (""))

HTH,
Bernhard