none
[CRM 2011] Recuperar valores de campos no plugin RRS feed

  • 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.


    quarta-feira, 17 de julho de 2013 20:52

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
    sexta-feira, 19 de julho de 2013 12:48

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
    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());

    quinta-feira, 18 de julho de 2013 18:10
  • Parece que meu problema e com todos os campos pois tentei pegar o valor de um outro campo e apresentou a mensagem abaixo:

    quinta-feira, 18 de julho de 2013 18:50
  • 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

    quinta-feira, 18 de julho de 2013 21:40
  • 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
    sexta-feira, 19 de julho de 2013 12:48
  • 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

    sábado, 20 de julho de 2013 11:08