09 mayo 2013

Profile SQL de Consultas CRM

- Cuando implementamos aplicaciones que realizan operaciones sobre CRM, debemos tener en cuenta todas las capas que intervienen en cada operación, desde la consulta mediante SDK, al web service de CRM que procesa la petición, hasta la capa de datos SQL

- En este ejemplo vamos a lanzar una consulta de Actividades cuyo campo Referente a sea una entidad de tipo Account, y comprobaremos la consulta efectiva mediante SQL Profiler

- Comprobar y medir estos tiempos de respuesta puede ser decisivo para perfilar la implementación de la consulta desde SDK

- El código de consulta es el siguiente

QueryExpression qe = new QueryExpression(ActivityPointer.EntityLogicalName)
{
    Distinct = true,
    ColumnSet = new ColumnSet(new string[] { "subject", "actualstart", "actualend" }),
    LinkEntities = { new LinkEntity() 
    {
        LinkFromEntityName = ActivityPointer.EntityLogicalName,
        LinkToEntityName = Account.EntityLogicalName,
        LinkFromAttributeName = "regardingobjectid",
        LinkToAttributeName = "accountid"
    }}
};

EntityCollection ec = orgService.RetrieveMultiple(qe);

foreach (ActivityPointer ap in ec.Entities)          
    Console.WriteLine(ap.Subject);



- Para comprobar el proceso de consulta interno en SQL iniciaremos la tool SQL Profiler de nuestro servidor SQL de CRM y comenzaremos una nueva traza



- En la selección de eventos de profile marcaremos las opciones de traceo, en nuestro caso son las secciones SQL:BatchCompleted y SQL:BatchStarting las que capturarán la sentencia SQL generada por la consulta desde SDK



- El resultado cuando la consulta ha completado es el siguiente:

- En el resultado del informe podemos distinguir columnas como ApplicationName, NTUserName, y LoginName, distintivas de la aplicación SDK y la autenticación provista, y la duración de proceso de la consulta





Innovar Tecnologías

No hay comentarios:

Publicar un comentario