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!
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“:
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:
CRM2011: Useful ITracingService addiion when creating plugin assemblies
[]’s,
Tiago Cardoso