none
Criar entidade dentro de outra via plugin RRS feed

  • Pergunta

  • Bom dia,

    Gostaria de saber como faço para criar e manipular uma entidade dentro de outra, exemplo, tenho como target a entidade oportunidade e preciso de acessar a campanha, e não na forma de query e sim pelos atributos (ter acesso a classe).

    Tentei assim:

    Guid solID = (Guid)context.OutputParameters[ParameterName.Id];

    CrmWebService.campaign entCampanha = service.Retrieve("campaign", solID, new CrmWebService.AllColumns());

    E assim:

    DynamicEntity entCampanha = (DynamicEntity)context.InputParameters.Properties["campaign"];

    E nenhuma funcionou...

    quarta-feira, 4 de março de 2009 14:25

Respostas

  • Olá Tiago,

    Uma vez com o ID da campanha "em mãos", faça a busca da campanha no CRM, retornando o objeto como uma DynamicEntity, da seguinte forma:

    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.Sdk.Query;
    using Microsoft.Crm.SdkTypeProxy;

    ICrmService service = context.CreateCrmService(true);

    TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
    targetRetrieve.EntityName = EntityName.campaign.ToString();
    // EntityId = ID DA CAMPANHA
    targetRetrieve.EntityId = new Guid("1564F593-75F7-DD11-AB09-0015F2044350");
    RetrieveRequest retrieve = new RetrieveRequest();
    retrieve.Target = targetRetrieve;
    retrieve.ColumnSet = new AllColumns();
    retrieve.ReturnDynamicEntities = true;
    RetrieveResponse retrieved = (RetrieveResponse)service.Execute(retrieve);
    DynamicEntity entity = (DynamicEntity)retrieved.BusinessEntity;

    foreach (Property prop in entity.Properties)
    {
     if (prop.Name.Equals("nome_campo"))
     {
      string str = ((StringProperty)prop).Value;
      break;
     }
    }

    Fonte: http://msdn.microsoft.com/en-us/library/cc151178.aspx


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta Tiago Cardoso quarta-feira, 4 de março de 2009 20:26
    quarta-feira, 4 de março de 2009 15:49
  • Consegui... criei uma propriedade para me auxilar:


    CrmNumber
    number = new CrmNumber(valor);

    CrmNumberProperty property = new CrmNumberProperty("atributo", number);

    service.Update(entidade);

    • Marcado como Resposta Tiago Cardoso quinta-feira, 5 de março de 2009 12:38
    quinta-feira, 5 de março de 2009 12:38

Todas as Respostas

  • Olá Tiago,

    Uma vez com o ID da campanha "em mãos", faça a busca da campanha no CRM, retornando o objeto como uma DynamicEntity, da seguinte forma:

    using Microsoft.Crm.Sdk;
    using Microsoft.Crm.Sdk.Query;
    using Microsoft.Crm.SdkTypeProxy;

    ICrmService service = context.CreateCrmService(true);

    TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
    targetRetrieve.EntityName = EntityName.campaign.ToString();
    // EntityId = ID DA CAMPANHA
    targetRetrieve.EntityId = new Guid("1564F593-75F7-DD11-AB09-0015F2044350");
    RetrieveRequest retrieve = new RetrieveRequest();
    retrieve.Target = targetRetrieve;
    retrieve.ColumnSet = new AllColumns();
    retrieve.ReturnDynamicEntities = true;
    RetrieveResponse retrieved = (RetrieveResponse)service.Execute(retrieve);
    DynamicEntity entity = (DynamicEntity)retrieved.BusinessEntity;

    foreach (Property prop in entity.Properties)
    {
     if (prop.Name.Equals("nome_campo"))
     {
      string str = ((StringProperty)prop).Value;
      break;
     }
    }

    Fonte: http://msdn.microsoft.com/en-us/library/cc151178.aspx


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta Tiago Cardoso quarta-feira, 4 de março de 2009 20:26
    quarta-feira, 4 de março de 2009 15:49
  • Ok Gilberto muito obrigado, só um porém não estou conseguindo fazer um update com a resposta encontrada:

    CrmWebService.entidadepersonalizada entidade = new CrmWebService.entidadepersonalizada();

    entidade.atributo.Value += 1;

    service.Update(entidade);

    quarta-feira, 4 de março de 2009 20:29
  • Consegui... criei uma propriedade para me auxilar:


    CrmNumber
    number = new CrmNumber(valor);

    CrmNumberProperty property = new CrmNumberProperty("atributo", number);

    service.Update(entidade);

    • Marcado como Resposta Tiago Cardoso quinta-feira, 5 de março de 2009 12:38
    quinta-feira, 5 de março de 2009 12:38
  • Tiago,

    Pelo seu exemplo, você está criando um novo registro para uma entidade personalizada, certo? Note que para este caso, você deve usar o método [Create]  e não [Update].

    Então substitua a linha

        service.Update(entidade);

    por

        service.Create(entidade);


    Dica: Sempre coloque o código que executa o WS do CRM em um try catch (System.Web.Services.Protocols.SoapException ex) para obter detalhes de erros.


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 5 de março de 2009 12:47