Usuário com melhor resposta
[CRM 2011] Recuperar valores de campos no plugin

Pergunta
-
Estou desenvolvendo um plugin e estou com dificuldades em capturar dados de um campo Lookup.
Inicialmente estou precisando pegar o ID e o tipo de entidade do campo para futuramente pesquisar um campo nesta entidade, já utilizei os códigos abaixo, mas não obtive sucesso. O campo e o regardingobjectid.
Entity entidadeConsulta = (Entity)localContext.PluginExecutionContext.InputParameters["Target"]; idReferentea = entidadeConsulta.GetAttributeValue<Guid>("regardingobjectid"); ////////////////////////////////////////////// Entity entidadeConsulta = (Entity)localContext.PluginExecutionContext.InputParameters["Target"]; idReferentea = entidadeConsulta.GetAttributeValue<EntityReference>("regardingobjectid");
Gostaria de saber se alguém conhece algum material que informa como pegar os valores dos diversos tipos de campos.
Obrigado.
- Editado Tiago Michelini CardosoMVP, Moderator quinta-feira, 8 de agosto de 2013 22:24 padronização
Respostas
-
Azevedo, mesmo utilizando seu exemplo acima, não consegui recuperar os dados.
Lembrando que registrei meu plugin no Pre-Operation, será que tem alguma coisa a ver?
Mas, consegui recuperar de uma forma diferente.
Coloquei os campos necessários no Pre-Image Alias como mostra a imagem abaixo:
Assim pude obter os dados utilizando o código abaixo:
if (localContext.PluginExecutionContext == null || localContext.PluginExecutionContext.Depth > 1) return; IPluginExecutionContext context = localContext.PluginExecutionContext; Entity preImageEntity = (context.PreEntityImages != null && context.PreEntityImages.Contains(this.preImageAlias)) ? context.PreEntityImages[this.preImageAlias] : null; var preMessageImage = (Entity)context.PreEntityImages["PreImage"]; EntityReference referentea = (EntityReference)preMessageImage.Attributes["regardingobjectid"];
não sei se a forma correta e esta, mas funcionou.
Azevedo, você teria um material sobre desenvolvimento de plugin mais completo.
Muito obrigado pela ajuda.
- Marcado como Resposta Daniel Jonathan quinta-feira, 1 de agosto de 2013 16:14
Todas as Respostas
-
Boas Daniel,
Mas o que você não consegue fazer? O código correto é o segundo. Ele no idRefrentea deve ser do tipo EntityReference sobre este podes obter o id do registo e a entidade. Vê aqui as propriedades dessa classe.
Espero ter ajudado.
Se respondi a sua pergunta por favor marque como resposta e\ou como útil.Pedro Azevedo Crm Specialist 4.0\2011
- Sugerido como Resposta Azevedo PedroMVP quinta-feira, 18 de julho de 2013 08:48
-
Utilizando o código abaixo esta apresentando o erro "Object reference not set to an instance of an object'.
private EntityReference referentea; Entity entidadeConsulta = (Entity)localContext.PluginExecutionContext.InputParameters["Target"]; referentea = entidadeConsulta.GetAttributeValue<EntityReference>("regardingobjectid"); throw new InvalidPluginExecutionException(referentea.Id.ToString());
-
-
Boas Daniel,
Você tente fazer debug para ver qual o objeto que está a null, por exemplo o objeto entidadeConsulta, ou colocar por exemplo:
if (localContext.PluginExecutionContext.InputParameters.Contains("Target") && localContext.PluginExecutionContext.InputParameters["Target"] is Entity) { entidadeConsulta = (Entity)localContext.PluginExecutionContext.InputParameters["Target"]; if(entidadeConsulta != null) { referentea = entidadeConsulta.GetAttributeValue<EntityReference>("regardingobjectid"); } }
Assim garantes que ninguém é null e já não deve dar erro agora é só fazeres debug e saberes como está a dar erro.
Espero ter ajudado
Pedro Azevedo Crm Specialist 4.0\2011
-
Azevedo, mesmo utilizando seu exemplo acima, não consegui recuperar os dados.
Lembrando que registrei meu plugin no Pre-Operation, será que tem alguma coisa a ver?
Mas, consegui recuperar de uma forma diferente.
Coloquei os campos necessários no Pre-Image Alias como mostra a imagem abaixo:
Assim pude obter os dados utilizando o código abaixo:
if (localContext.PluginExecutionContext == null || localContext.PluginExecutionContext.Depth > 1) return; IPluginExecutionContext context = localContext.PluginExecutionContext; Entity preImageEntity = (context.PreEntityImages != null && context.PreEntityImages.Contains(this.preImageAlias)) ? context.PreEntityImages[this.preImageAlias] : null; var preMessageImage = (Entity)context.PreEntityImages["PreImage"]; EntityReference referentea = (EntityReference)preMessageImage.Attributes["regardingobjectid"];
não sei se a forma correta e esta, mas funcionou.
Azevedo, você teria um material sobre desenvolvimento de plugin mais completo.
Muito obrigado pela ajuda.
- Marcado como Resposta Daniel Jonathan quinta-feira, 1 de agosto de 2013 16:14
-
Boas Daniel,
Realmente poderia ter referido mas sinceramente dei isso como adquirido, realmente o pre e post image é uma cópia do registo sobre o qual estamos a trabalhar. No campo parameters colocas apenas as propriedades que queres ter acesso.
Existe alguns artigos interessantes, este da microsoft é um guia bastante completo (esta questão está na passagem de contexto para o plugin), mas este aqui explica sucintamente esta questão das images.
Espero ter ajudado
PS: Coloca a sua resposta como uma resposta certa.
Pedro Azevedo Crm Specialist 4.0\2011