Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet 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!!
-
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
-
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 :)
-
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
-
Die so erzeugten Daten kannst Du einfach per < > = vergleichen.
-
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
-
dusollstnichtsubtrahierensondernvergleichen.
-
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"??
-
Wenn man sich das Problem näher anschaut, dann kriegt da jemand 14 Tage lang eine Mail gesendet ;D
dusollstnichtsubtrahierensondernvergleichen
Ist das das 11. Gebot ??? ;D ???
-
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.
-
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.
-
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.
-
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 ??
-
genau
-
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