martes, 17 de noviembre de 2009

Incluir un link referente a una entidad en emails

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