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