CRUD in Microsoft Dynamics CRM 4

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Veja como Se realiza um CRUD (Crete, Retrieve, Update e Delete) nos dados do Microsoft Dynamics CRM 4, A plataforma da Microsoft de Gerenciamento de Relacionamento com o Cliente

E ai pessoal, tudo bem? Como diz o título deste artigo, vamos ver aqui como se realiza um CRUD (Create, Retrieve, Update e Delete) ou no velho português: Como Criar, Obter, Atualizar e Apagar um dado no Microsoft Dynamics CRM 4.0..

Mas antes, vamos falar um pouco sobre a Plataforma Dynamics CRM 4.0: Como o nome do produto mesmo diz, o Dynamics CRM 4.0 é a ultima versão do Sistema de Relacionamento com o Cliente da Microsoft. Atualmente está disponível o Rollup 6 para correções de problemas na aplicação.
Totalmente desenvolvido em .Net C#, o CRM é muito mais do que um simples sistema de Relacionamento com o Cliente, ele também é  uma plataforma altamente customizável, tanto a nível de tela (com alguns cliques é possível tanto criar entidades como campos) como a nível de customização de código. Como outros produtos Microsoft, o CRM possui uma série de Webservices que permitem sua integração via código com outras aplicações e é nisto que se baseia este artigo.

Para começar, vamos criar um novo projeto no Visual Studio 2008, aqui no nosso exemplo vamos criar um Console Application com o nome de CRM – Contatos.
 
 

Agora com nossa aplicação criada, vamos adicionar uma referencia web ao CRM, para isto vamos ao Solution Explorer, botão direito em cima do nome do projeto e clique em Add Service Reference > Advanced > Add Web Reference >
                Na tela que se abriu no campo URL, vamos digitar o endereço do Webservice:

O CRM disponibiliza para nós dois Webservices:

·         CrmService: interface de acesso aos dados contidos no CRM, é com ele que vamos trabalhar.

·         MetaDataService: interface para trabalhar com os meta dados do CRM, ou seja, entidades, campos, regras, etc.

Normalmente, o endereço dos webservices do CRM é http:// / mscrmservices/2007/.

No Web reference name digite CRMSDK e clique em Add Reference

  1. Adicionar o NameSpace do CRM
    Para começar, vamos colocar o namespace do CrmSdk na nossa aplicação, para isto basta digitarmos Using CrmSdk na parte superior do nosso código.


  2. Instanciar o CrmService
    A classe CrmService é a responsável pela comunicação da nossa aplicação com os dados internos do nosso CRM
    Vamos instanciar a nossa classe de forma que a realizar a nossa conexão com o CRM da nossa empresa, para isto precisamos informar o nosso login, URL do webService e um detalhe a mais que não exisita em versões anteriores o CRMAuthenticationToken, Ele informa qual a forma de login da nossa aplicação e também a qual empresa estamos tentando conectar, já que agora com o CRM 4.0 Enterprise pode disponibilizar varias empresas (também visto como instancias nomeadas)


    private CrmService crm;

    public CrmService CRM

    {

         get

         {

                    if (crm == null)

                    {

                        crm = new CrmService();

                        //Autenticação passando Login e Senha

                        crm.Credentials = new System.Net.NetworkCredential("Administrator", "qwer1234", "Dominio");

     

                        //URL do WebService

                        crm.Url = "http://endereco:5555/mscrmservices/2007/CrmService.asmx";

     

                        //Instanciar a classe CrmAuthenticationToken

                        CrmAuthenticationToken token = new CrmAuthenticationToken();

                        token.AuthenticationType = 0;//Autenticação via AD

                        /*Nome da Organização ao qual vamos conectar

                         * Em caso de dúvida, o nome fica em frente a url de acesso ao CRM

                         * Por exemplo: http://endereco:5555/ORGANIZACAO */

                        token.OrganizationName = "Organizacao";

                        crm.CrmAuthenticationTokenValue = token;

                        return crm;

                    }

                    else

                      return crm;

       }

    }


  3. Criando um Contanto no CRM
     vamos lá... agora vamos criar um contanto na entidade Contato do nosso CRM. A forma de inserção é sempre a mesma, só muda o nome da entidade que vamos instanciar.
    Como o CRMService nos proporciona um acesso altamente tipa do as nossas entidades, é bastante simples trabalharmos com os dados que elas contem ou irão conter, por exemplo, se queremos criar um contato, basta instanciarmos as classe contacto e preenchermos as devidas propriedades da
    classe, conforme o exemplo abaixo:

    public void CriaContato()

    {

                //Cria uma instancia da classe Contact

                contact contato = new contact();

                contato.firstname = "Olavo";

                contato.lastname = "Neto";

     

                this.CRM.Create(contato);

    }


    Após a execução da nosso novo método, se tudo ocorrer bem, poderemos ver dentro do CRM, na devida entidade, o nosso novo contato com os dados preenchidos



    Bastante Simples né;
  4. Capturando um dado no CRM
    Bom, agora que já criamos um contanto, vamos ver como capturá-lo. Como eu falei no tópico anterior, existem várias maneiras de se fazer algo no CRM, mas vou listar aqui o que considero as duas principais maneiras de capturar um dado dentro do CRM:

    Capturar uma coleção de dados dentro do CRM
    Retornar uma coleção de dados de dentro do CRM é bem parecido com executar uma QUERY dentro do SQL Server. De certa forma, o que vamos fazer é montar uma query através de um conjunto de classe e métodos do SDK.

    public List<contact> CapturaContatos{

    List<contact> contatos = new List<contact>();

     

    Como toda query em SQL, devemos iniciar informando às colunas que queremos obter na nossa consulta, em SQL utilizamos o SELECT. No CRM utilizamos o ColumnSet:

    ColumnSet columns = new ColumnSet();

    columns.Attributes = new string[] { "contactid", "fullname" };

    caso queria-se obter todas as colunas de uma única vez(SELECT * FROM) pode-se utilizar a classe AllColumns

    AllColumns columns = new AllColumns();

    Vamos agora continuar nossa query com as restrições. Como no SQL, não é obrigatório o uso das restrições caso se deseje obter todos os dados das entidades.

    A restrições do CRM se baseiam em duas classes, a primeira é a ConditionExpression aonde informamos o nome do campo que queremos pesquisar o operador da busca (Equal, Like, etc.) e o valor a ser pesquisado.

    A segunda classe é a FilterExpression aonde iremos informar todas as Condições já criadas e o operador entre elas (AND ou OR)

     

    ConditionExpression conditionNome = new ConditionExpression();

    conditionNome.AttributeName = "firstname";

    conditionNome.Operator = ConditionOperator.Equal;

    conditionNome.Values = new object[] { "Olavo" };

     

     FilterExpression filter = new FilterExpression();
     filter.Conditions = new ConditionExpression[] { conditionNome };

     

    Agora, vamos ordenar nossa busca atraves da classe OrderExpression.

     

    OrderExpression order = new OrderExpression();

    order.AttributeName = "fullname";

    order.OrderType = OrderType.Ascending;

               

    Para finalizar, vamos juntar tudo no QueryExpression, classe principal da nossa busca, aonde informamos as colunas, os filtros, a entidade que iremos realizar a busca e os ordenadores.

               

    QueryExpression query = new QueryExpression();

    query.ColumnSet = columns;

    query.Criteria = filter;

    query.EntityName = EntityName.contact.ToString();

    query.Orders = new OrderExpression[] { order };

     

    Realizando a consulta atraves do metodo RetrieveMultiple que retorna uma BusinessEntityCollection(coleção de entidades).

     

    BusinessEntityCollection bu = this.CRM.RetrieveMultiple(query);

    foreach (BusinessEntity b in bu.BusinessEntities)

    {

    contact contato = (contact)b;

          contatos.Add(contato);

          Console.Write("Anote este ID:" + contato.contactid.Value);

          Console.ReadLine();

    }

     

    return contatos;

    }

     

    Execute o metodo, copie o ID que apareceu, ele será importante para o proximo exemplo.

    Capturar um dado especifico
    já vimos como realizar uma consulta completa no Dynamics CRM, agora vamos ver como criar uma busca direta pelo ID da entidade, para isto basta termos o Guid identificador da entidade e informamos as colunhas que desejamos obter.
    Para nosso exemplo, usei o AllColumns para retornar todas as colunas da entidade Contato
    A consulta é feita através do método Retrieve que retorna uma BusinessEntity

    public contact CapturaContato()

    {

    AllColumns columns = new AllColumns();

                  return ((contact)this.CRM.Retrieve(EntityName.contact.ToString(),

                               new Guid("e2850cd6-9cb6-dd11-b305-0014d11389c6"), columns));

     

    }

     
  5. Atualizando um Dado no CRM
    Atualização é extremamente parecido com a inserção de dados. A única diferença é que se faz necessário informar a chave do registro que será modificado e em vez do método Create, utilizaremos o Update.

    public void AtualizaContato()

            {

                contact contato = new contact();

                contato.contactid = new Key();

                contato.contactid.Value = new Guid("e2850cd6-9cb6-dd11-b305-0014d11389c6");

                contato.emailaddress1 = "luke_neto@hotmail.com";

                this.CRM.Update(contato);

            }

                                    Veja o resultado dentro do CRM
                                     

  6. Deletando um Dado no CRM
     Deleção de dados é quase sempre o mais simples a ser feito, no CRM não é diferente. Para isto, basta chamarmos o método Delete e passar como parâmetro o nome da entidade que iremos deletar e a chave do registro.

     

    public void DeletaContato()

     {

                this.CRM.Delete(EntityName.contact.ToString(),

                    new Guid("e2850cd6-9cb6-dd11-b305-0014d11389c6"));

     }

     

    Dicas

    Algumas dicas que eu consideroo serem de ajuda para quem for trabalhar com o SDK do CRM:

    1.       Também é possível realizar todos os procedimentos aqui mostrados, inclusive retornar os dados em XML, para isto basta usar o método Fetch da classe CrmService.

    2.       Quando for digitar o nome das colunas a serem capturadas no ColumnSet, nunca digite o nome delas ou coloque qualquer letra em MAISCULO.

    3.       A melhor maneira de verificar o que aconteceu de errado na sua aplicação é através do SoapExcepetion.

    catch (System.Web.Services.Protocols.SoapException soapEx)

     {

                    throw new System.Web.Services.Protocols.SoapException(soapEx.Detail.InnerText,     soapEx.Code);

     }

    4.       Não é possivel trabalhar com entidades associativas(entidades intermediarias de relacionamento N:N) diretamente, somente atrasves do Fecth.

    5.       Não se preocupe com os dados a serem retornados a nível de permissão, o CRM só traz os dados que aquele usuário logado tem permissão para ver.

    6.       Existe um bug no CRM 4 no qual não é possivel retornar as colunas StatusCode e StateCode de nenhuma entidade, este problema foi resolvido no RollUp 2.

    7.       Tente não usar o AllColumns, ele é tão prejudicial como o Select * From.

    

 

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?