miércoles, 2 de septiembre de 2009

Mostrar cantidad de Actividades/Historial en el formulario

He encontrado en el Blog de Jim Wang un pequeño desarrollo que me parece bastante útil.
Es simplemente un Javascript que sirve para que en el mismo "onLoad()" del formulario, nos muestre la cantidad de registros relacionados de Actividades (tanto programadas como cerradas).

Así es como se ve finalmente así por ejemplo en el formulario de "Contactos":


Lo único que hay que hacer es pegar el siguiente código en el "Onload()" de la entidad que se desea:

var buXml = GetRegardingActivity();

if(buXml != null)
{
var buNodes = buXml.selectNodes("//BusinessEntity/q1:statecode"); // CRM 4.0
var iActivity = 0;
var iHistory = 0;
if (buNodes != null) { /*get values*/

for (i = 0; i < buNodes.length; i++) {
switch (buNodes[i].text) {
case "Abierto": iActivity++; break;
case "Programado": iActivity++; break;
case "Completado": iHistory++; break;
case "Cancelado": iHistory++; break;
}
}
if (document.getElementById('navActivities') != null)
{
document.getElementById('navActivities').getElementsByTagName('NOBR')[0].innerText = document.getElementById('navActivities').getElementsByTagName('NOBR')[0].innerText + " (" + iActivity + ")";
}
if (document.getElementById('navActivityHistory') != null) {
document.getElementById('navActivityHistory').getElementsByTagName('NOBR')[0].innerText = document.getElementById('navActivityHistory').getElementsByTagName('NOBR')[0].innerText + " (" + iHistory + ")";
}
}
}
function GetRegardingActivity() {
var xml = "" + "" + "" + " " + " " + " activitypointer" + " " + " " + " statecode" + " " + " " + " false" + " " + " And" + " " + " " + " regardingobjectid" + " Equal" + " " + " " + crmForm.ObjectId + "" + " " + " " + " " + " " + " " + " " + "" + "";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2006/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2006/WebServices/RetrieveMultiple");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);
var resultXml = xmlHttpRequest.responseXML;
return resultXml;
}

Como se ve en el código, hace una llamada a los Web Services de CRM, para buscar en la entidad "ActivityPointer" todas las actividades que tiene relacionadas el registro en el que nos encontramos ("crmForm.ObjectId").
Luego, recorre los resultados para contar cuantas de esas actividades estan abiertas (iActivity) y cuantas estan completadas (iHistory).

Finalmente, hace algo "NO Soportado" como es el de "inyectar" html en el formulario de CRM para que muestre las cantidades entre paréntesis.

Espero les sirva.

un saludo

No hay comentarios:

Publicar un comentario