Problem: Von MSCRM wird bei Datensatzerstellung automatisiert eine E-Mail verschickt. In dieser E-Mail kann man zwar sämtliche Informationen unterbringen, man hat aber keine Möglichkeit per Link dorthin zu gelangen. Microsoft stellt hier auch keine Lösung parat (zumindest nicht in Version 4 und ohne Drittanbietertools), zumal man im Workflow nicht direkt auf die ID der Entität zugreifen kann. Blöd!
Man will es wieder nicht glauben. DAS GANZE INTERNET hatte keine Lösung! Ich habe eine kreiert, aber ganz ohne blauem Auge (markiert mit blauer Schrift) kommt man nicht davon.
Dieser Link brachte mich auf die richtige Spur
Da der Workflow bei Erstellung startet und man weder im Workflow noch im "FormSave" des Entitäsformulars (zumindest zu diesem Zeitpunkt) die ObjectID zur Verfügung hat, muss man beim Formload bereits einmal speichern.
(Auge blau: Will man die Entität doch nicht anlegen und will das Formular über das X beenden wurde der Datensatz dennoch im Hintergrund bereits erstellt)
Um dies nur beim ersten Aufruf zu tun lege ich ein Attribut "new_issaved" (bit) an, welches ich als variable missbrauche. Zusätzlich brauchen wir ein Attribut "new_link" welches als Datentyp nvarchar und Format URL deklariert wird.
der Aufruf im "
onLoad" des Entitäsformulars eig. ist ganz simple:
if (crmForm.all.new_issaved.value == null)
{
crmForm.Save();
}
Hat man im Formular Pflichtfelder definiert kriegt man ein Problem, da er diese Felder beim Speichern im onLoad anmeckern würde. Ich habe die Pflichtfelder als "Eingabe empfohlen" gekennzeichnet, so erscheint zumindest anstelle des roten Sternchens. Die logische Prüfung erfolgt, ebenso wie die Prüfung auf das Kennzeichen "issaved", sowie die Befüllung der Link-Feldes mit der ObjectId im "onSave". In meinem Fall ist das betreff Feld ein Pflichtfeld:
if (crmForm.all.new_issaved.value == null)
{
//null beim ersten aufruf, false beim ersten pseudo save, true beim korrekten save
crmForm.all.new_issaved.value = false;
}
else
{
if (crmForm.all.new_betreff.value == "")
{
alert("Betreff muss gefüllt sein!");
event.returnValue = false;
}
else
{
crmForm.all.new_issaved.value = true;
crmForm.all.new_link.value = "Link zum Kunden";
}
}
Erklärung: Setzt man den Html-Tag direkt in der Workflow-E-Mail funktioniert es leider nicht. Erst wenn der komplette Html-String im new_link Feld gespeichert wird ist der Link in der E-Mail auch wirklich anklickbar. der Backslash vor der Hochkommas dient der korrekten Html schreibweise und wird von Javascript ignoriert.
Von Hinten durch die Brust ins Auge, da muss man erstmal draufkommen ;-)