CRM 2015/2016 – Plugin Trace Logs


Pessoal,

Desde o Update 1 do CRM 2015, podemos observar de forma centralizada (em um único local) os logs dos plugins ou custom workflows que temos registrados no Dynamics CRM. Isso nos auxiliará bastante em relação a visualização de erros e execuções.

O log apresenta um conteúdo detalhado do plugin/custom workflow, com informações do Nome do Plugin, Mensagem, Entidade Primária, Valores de Configuração (seguros ou não), Hora da Execução, Tempo de Execução, Detalhamento do Erro, entre outros!

plugintracelog_1

plugintracelog_2

 

O recurso não vem ativado por padrão, assim devemos, primeiramente ativá-lo, navegue em Configurações > Administração > Configurações do Sistema > Aba Customizações > Opção Plugin e Workflow Customizado Trace de Atividade (Plug-in and Custom Workflow Activity Trace), selecione as opções “Todos” ou “Exceções“:

plugintracelog_3

 

Caso tenha selecionado a opção Exceções, todas as exceções de plugins/custom worflows serão logadas automaticamente! Para acessá-las navegue em Configurações > Log de Execução de Plugins (Plug-in Trace Logs)

Caso tenha selecionado Todos, todas as execuções de plugins/custom workflows serão logados! Vale lembrar que para que todos os plugins e custom workflows executados sejam apresentados na listagem, teremos que incluir informações de Trace na codificação, como no exemplo abaixo:

public void Execute(IServiceProvider serviceProvider)
{
    ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
    IOrganizationService service = factory.CreateOrganizationService(context.UserId);

    try
    {
        Entity entity = (Entity)context.InputParameters["Target"];

        if (tracer == null)
            throw new InvalidPluginExecutionException("Failed to retrieve the tracing service.");


        // The InputParameters collection contains all the data passed in the message request.
        if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
        {
            // Verify that the target entity represents an account.
            // If not, this plug-in was not registered correctly.
            if (entity.LogicalName != "account")
                return;

            tracer.Trace("Tracing started...");

            //Query Project Link Settings
            QueryExpression query = new QueryExpression("account");
            ColumnSet cols = new ColumnSet();
            cols.AllColumns = true;
            query.ColumnSet = cols;

            EntityCollection settings = service.RetrieveMultiple(query);
            foreach (Entity ent in settings.Entities)
            {
                tracer.Trace("account name " + ent.Attributes["name"]);
            }

            tracer.Trace("The Plugin tracing has finished...");
        }
    }
    catch (Exception e)
    {
        throw new InvalidPluginExecutionException(e.Message);
    }
}

Vejam que no código acima, eu faço uso do objeto ITracingService, que de acordo com as funções do código podemos inserir pontos de trace “tracer.Trace(‘MENSAGEM’)”. Podemos utilizar como boa prática a implementação do trace para facilitar a resolução de bugs nos plugins/custom workflows!

Para maiores informações consulte:

Debug a plug-In

CRM2011: Useful ITracingService addiion when creating plugin assemblies

[]’s,

Tiago Cardoso

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.