En esto de empezar a personalizar el CRM hice un workflow que enviaba un email a un usuario específico cuando alguien creaba una oportunidad, pero claro, el email avisaba simplemente. ¿A qué oportunidad se refería el email? Así que se me ocurrió meter un link en el email que llevara directamente a dicha oportunidad.
Buscando, buceando y trasteando dí con esta solución: (aunque hay alguna más)
PASO 1:
Crear dos atributos en la entidad (Oportunidad x ejemplo) de tipo nvarchar, a uno le llamaremos 'enlace' y a otro 'flag' con una longitud de 250 y 15 respectivamente.
Agregamos estos atributos al formulario de la entidad.
PASO 2:
Abrimos las propiedades del formulario y en el evento ONLOAD escribimos esto:
//Ocultamos los atributos flag y enlace xq no interesan al usuario pero sí a nosotros.
crmForm.all.new_flag_c.style.display='none';
crmForm.all.new_flag_d.style.display='none';
crmForm.all.new_enlace_c.style.display='none';
crmForm.all.new_enlace_d.style.display='none';
var url ="<a href='http://crm-dynamic/CRM/sfa/leads/edit.aspx?id="
if(crmForm.FormType == 2)
{
//Si es el formulario de modificación
if ((crmForm.all.new_flag.DataValue == null )||(crmForm.all.new_flag.DataValue==""))
crmForm.all.new_enlace.DataValue= url + crmForm.ObjectId + "'> clic </a>";
else
{
//Comprobamos el Flag para saber en que estado nos encontramos
switch(crmForm.all.new_flag.DataValue)
{
case "SAVEANDCLOSE":
crmForm.all.new_flag.DataValue = "HECHO"
crmForm.all.new_enlace.DataValue= url + crmForm.ObjectId + "'>aqui.</a>";
crmForm.SaveAndClose();
break
case "SAVE":
crmForm.all.new_flag.DataValue = "HECHO"
crmForm.all.new_enlace.DataValue= url + crmForm.ObjectId + "'>aqui.</a>";
crmForm.Save();
break
case "SAVEANDNEW":
crmForm.all.new_flag.DataValue = "HECHO"
crmForm.all.new_enlace.DataValue= url + crmForm.ObjectId + "'>aqui.</a>";
crmForm.SubmitCrmForm(59, true, true, false);
break
default:
break
}
}
}
PASO 3:
en el evento ONSAVE escribimos esto:
//Si el Flag ya está relleno no haremos nada.
if ((crmForm.all.new_flag.DataValue == null )||(crmForm.all.new_flag.DataValue==""))
{
if (event.Mode==2)
crmForm.all.new_flag.DataValue="SAVEANDCLOSE";
else if (event.Mode==59)
crmForm.all.new_flag.DataValue="SAVEANDNEW";
else
crmForm.all.new_flag.DataValue="SAVE";
//Forzamos a guardar para que se cree el GUID del registro.
crmForm.Save();
//Impedimos que haga el guardado del evento original puesto que lo hemos manipulado
event.returnValue=false;
return false;
}
PASO 4:
Editamos la tarea 'Enviar email' del workflow.
Ahora podemos agregar el atributo 'enlace' de la entidad quedando de la siguiente forma:
Se ha creado una nueva Oportunidad con el tema
{Tema(Oportunidad)} y requiere su validación.
Puede visualizarla haciendo clic
{enlace(Oportunidad)}
CONSIDERACIONES:
La url que guardamos en el atributo 'enlace' en el ejemplo es
http://crm-dynamic/CRM/sfa/leads/edit.aspx?id= donde
crm-dynamic es el nombre de nuestro servidor CRM y
CRM es el nombre de la compañía matriz (es case sensitive). El resto de la url dependerá de la entidad que vayamos a manejar, copio aquí los posibles casos:
- SFA - Sales Force Automation (accounts,contacts etc)
- CS - Customer Service (cases,contracts etc)
- MA - Marketing Automation (campaigns, marketing lists etc)
Sales Force Automation:
Accounts: http://<crm-url>/sfa/accts/edit.aspx
Contacts: http://<crm-url>/sfa/conts/edit.aspx
Leads: http://<crm-url>/sfa/leads/edit.aspx
Opportunities: http://<crm-url>/sfa/opps/edit.aspx
Marketing Automation
Campaigns: http://<crm-url>/ma/camps/edit.aspx
Marketing Lists: http://<crm-url>/ma/lists/edit.aspx
Campaign Response: http://<crm-url>/ma/campaignresponse/edit.aspx
Case Management:
Cases: http://<crm-url>/cs/cases/edit.aspx
Contracts: http://<crm-url>/cs/contracts/edit.aspx
KB Articles: http://<crm-url>cs/articles/edit.aspx
Custom Entities:
Custom: http://<crm-url>/userdefined/edit.aspx