Benutzer mit den meisten Antworten
"nächster Geburtstag" ausrechnen

Frage
-
Hallo,
wie kann ich den nächsten Geburtstag ausrechen?
Ich brauche ja das Feld Geburtstag.
Dann muss ich kucken, hatte die Person dieses Jahr schon Geburtstag?
Oder wie bekomme ich das aktuelle Datum in eine Variable?
und wenn ich das akutelle Datum dann habe, kann ich es ja nicht einfach mit dem Geburtsdatum vergleichen, denn das ist ja ein ganz anderes Jahr.
In diesem Zusammenhang wäre auch nicht soooo unwichtig, dass ich das Alter der Person ausrechnen kann.
Irgendwie ist es heute schon zu spät für sowas, oder hab ich ne Totalblockade?
Gibt es hierfür ein howto?:
- ausrechnen des aktuellen Alters
- ausrechnen des nächsten Geburtstages
- ist der Geb. noch in diesem JahrDas Forum habe ich nach "nächster Geburtstag" und nach "Geburtstag" durchsucht. Für letzeres bekam ich 3 Treffer, die mir nicht geholfen haben und fürs erste keinen Treffer.
Danke.
Gruss Pit
Antworten
-
Hallo Pit,
z.B. mit folgendem Script von dieser Seite: Gefunden hier: http://www.stunnware.com/crm2/contentPage.aspx?id=JS12
Calculating durations The following code subtracts the current date from a date specified on a CRM form and calculates the remaining or elapsed days, hours or minutes. var displayField = crmForm.all.<name of a string field>; var formDate = crmForm.all.<name of a datetime field>.DataValue; var now = new Date(); var ms = formDate.valueOf() - now.valueOf(); var minutes = ms / 1000 / 60; var hours = minutes / 60; var days = hours / 24; if (days >= 1) { displayField.DataValue = Math.floor(days) + " day(s) left"; } else if (hours >= 1) { displayField.DataValue = Math.floor(hours) + " hour(s) left"; } else if (minutes >= 1) { displayField.DataValue = Math.floor(minutes) + " minute(s) left"; } else if (days <= -1) { displayField.DataValue = Math.floor(-days) + " day(s) late"; } else if (hours <= -1) { displayField.DataValue = Math.floor(-hours) + " hour(s) late"; } else if (minutes <= -1) { displayField.DataValue = Math.floor(-minutes) + " minute(s) late"; } else { displayField.DataValue = "NOW"; }
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
www.msdynamics.de- Als Antwort markiert Michael Sulz Sonntag, 7. November 2010 10:07
-
Hallo Pit,
das Script ist ein Beispiel in JavaScript, wie du mit den Datumfeldern umgehen kannst. Wie du richtig erkannt hast, kannst du kein JavaScript in einem Workflow ausführen.
Um jetzt deine Berechnung pereodisch ausführen zu lassen, wirst du ein Workflow PlugIn programmieren müssen.
Schau doch einfach mal hier nach: http://www.youtube.com/watch?v=T6aT8gBE-b4
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
www.msdynamics.de- Als Antwort markiert Michael Sulz Sonntag, 29. Dezember 2013 09:09
-
Hallo Peter,
wieso benötigst du ein extra Attribut? Im CRM gibt es beim Kontakt ein Feld Geburtstag, das du verwenden kannst. Dann hast du auch keine Probleme, wenn der Workflow mehrfach ausgeführt wird. Ein Beispiel für ein einfaches Workflow PlugIn kannst du hier finden: http://www.msdynamics.de/viewtopic.php?f=48&t=9730
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
www.msdynamics.de- Als Antwort markiert Michael Sulz Sonntag, 29. Dezember 2013 09:13
-
Hallo Pit,
auf der Seite kannst du nicht nur die DLL downloaden, sondern auch die Sourcen der DLL. Die kannst du dann bearbeiten und mit VS neu kompilieren.
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
www.msdynamics.de- Als Antwort markiert Michael Sulz Sonntag, 7. November 2010 10:07
Alle Antworten
-
Hallo Pit,
z.B. mit folgendem Script von dieser Seite: Gefunden hier: http://www.stunnware.com/crm2/contentPage.aspx?id=JS12
Calculating durations The following code subtracts the current date from a date specified on a CRM form and calculates the remaining or elapsed days, hours or minutes. var displayField = crmForm.all.<name of a string field>; var formDate = crmForm.all.<name of a datetime field>.DataValue; var now = new Date(); var ms = formDate.valueOf() - now.valueOf(); var minutes = ms / 1000 / 60; var hours = minutes / 60; var days = hours / 24; if (days >= 1) { displayField.DataValue = Math.floor(days) + " day(s) left"; } else if (hours >= 1) { displayField.DataValue = Math.floor(hours) + " hour(s) left"; } else if (minutes >= 1) { displayField.DataValue = Math.floor(minutes) + " minute(s) left"; } else if (days <= -1) { displayField.DataValue = Math.floor(-days) + " day(s) late"; } else if (hours <= -1) { displayField.DataValue = Math.floor(-hours) + " hour(s) late"; } else if (minutes <= -1) { displayField.DataValue = Math.floor(-minutes) + " minute(s) late"; } else { displayField.DataValue = "NOW"; }
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
www.msdynamics.de- Als Antwort markiert Michael Sulz Sonntag, 7. November 2010 10:07
-
Hallo Michael,
vielen Dank.
Trotzdem noch eine Frage:
Wo und wie führe ich das Script (Javascript?) aus?
In nem Workflow kann ich keine Scripte ausführen, oder?
Wie kann ich es dann aber erreichen, dass ich nen Workflow schreibe, der dieses Script ausführt / startet?Danke + Gruss Pit
-
Hallo Pit,
das Script ist ein Beispiel in JavaScript, wie du mit den Datumfeldern umgehen kannst. Wie du richtig erkannt hast, kannst du kein JavaScript in einem Workflow ausführen.
Um jetzt deine Berechnung pereodisch ausführen zu lassen, wirst du ein Workflow PlugIn programmieren müssen.
Schau doch einfach mal hier nach: http://www.youtube.com/watch?v=T6aT8gBE-b4
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
www.msdynamics.de- Als Antwort markiert Michael Sulz Sonntag, 29. Dezember 2013 09:09
-
Hallo Michael,
also die Überprüfung, wann der nächste Geburtstag ist, kann ich mit nem WF machen.
Dafür benötige ich aber ein Attribut "nächster Geburtstag".
Wie / wann befülle ich dieses Feld aber, denn Javacript kann ich ja nicht mit nem WF ausführen.
Am besten wohl, wenn der Datensatz neu erstellt wird und / oder wenn sich das Feld Geburtstag ändert.
Dann wird das Javacript ausgeführt und rechnet den nächsten Geburtstag aus und trägt diesen in der Feld "nächster Geburtstag" ein.Wenn der Geburtstags-WF aber das erste mal ausgeführt wird, muss ich das Feld "nächster Geburtstag" um 1 Jahr erhöhen.
Soweit noch logisch.Was ich nicht so ganz gut finde ist, wenn ich aus irgendeinem Grund einen logischen Fehler habe und das Feld "nächster Geburtstag" mehrmals (innerhalb eines Jahres) um 1 erhöht wird, dann habe ich ein Problem.
Wenn ich jedoch richtig verstanden habe, gibt es dafür keine bessere Lösung.
Ich perönlich hätte lieber, wenn der WF nicht einach um 1 Jahr erhöht, sondern wenn er noch prüfen könnte, ob "nächster Geburtstag" auch richtig befüllt wurde. Wenn ich das Feld zB. 2 x innhalb eines Jahres ausführen würde und dieser Fehler erkannt würde und dann nicht erhöht wird, wäre ich glücklicher.
Das YouTube-Beispiel zeigt aber nicht was ein Workflow-Plugin ist oder?
Hast du hierfür noch ein Beispiel?Nochmals danke + Gruss Peter
-
Hallo Peter,
wieso benötigst du ein extra Attribut? Im CRM gibt es beim Kontakt ein Feld Geburtstag, das du verwenden kannst. Dann hast du auch keine Probleme, wenn der Workflow mehrfach ausgeführt wird. Ein Beispiel für ein einfaches Workflow PlugIn kannst du hier finden: http://www.msdynamics.de/viewtopic.php?f=48&t=9730
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
www.msdynamics.de- Als Antwort markiert Michael Sulz Sonntag, 29. Dezember 2013 09:13
-
Hallo Pit,
in einem Workflow:
DateTime nextBirthday = myBirthdayField.AddYears(1); ergibt den nächsten Geburtstag.
http://msdn.microsoft.com/en-us/library/system.datetime.addyears.aspx
Da brauchst Du kein neues Attribut. Du greifst einfach auf das Geburtstagsattribut zu und zählst ein Jahr hinzu. Das berücksichtigt dann auch Schaltjahre.
Gruß,
Reinhold
-
Hallo Pit,
auf der Seite kannst du nicht nur die DLL downloaden, sondern auch die Sourcen der DLL. Die kannst du dann bearbeiten und mit VS neu kompilieren.
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
www.msdynamics.de- Als Antwort markiert Michael Sulz Sonntag, 7. November 2010 10:07