CRM 4 – Acesso ao Web Service


Um colega de fórum criou uma thread no fórum da MSDN solicitando um passo-a-passo de uma conexão com o Web Service do CRM 4, sei que pode que pode ser um assunto já batido para muitos, pois estamos com a versão 2011 em plena atividade, porém como o tempo de migração não é tão rápido assim e muita coisa está e ficará na versão 4 por algum tempo.

Sendo assim, irei fazer um breve exemplo de como criar uma conexão com o Web Service (na versão On-Premise sem IFD) e como criar um registro na entidade account, utilizarei o material do SDK e Training Kit da Microsoft, vamos lá…

1. Abra o Visual Studio e crie um projeto em C# ou VB.NET

2. Navegue até o Solution Explorer e clique com o botão direito e depois em References.

3. Clique em Add Web Reference (Visual Studio 2005) ou Add Service  Reference >> Advanced >> Add Web Reference… (Visual Studio 2008 ou superior)

4. No campo URL, cole a string: “http://<servername%5B:port%5D>/mscrmservices/2007/crmservice.asmx&#8221;. Substituindo o servername e port pelos que estão configurados em sua instalação

5. Clique em Go

6. Altere o nome do Web Service para algo mais usual, como por exemplo CrmSdk

7. Clique em Add Reference

Com isso temos acesso ao Web Service do CRM, é com ele que iremos interagir com a base de dados, agora basta criar uma Web Page e realizar uma chamada.

1. Importe o Web Service no code-behind:

using CrmSdk;

2. Crie a conexão e autenticação com o Web Service

// Set up the CRM Service.
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "SUA_ORGAZNIZAÇÃO";

CrmService service = new CrmService();
service.Url = "http://SEU_SERVER:PORTA/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
// DefaultCredentials, recupera o usuário autenticado no AD, caso deseje outro, troque por:
// service.Credentials = new System.Net.NetworkCredential(username, password, domain);
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

3. Como havia dito, iremos fazer um “create” na entidade account, segue o script da MS de exemplo:

// Create the account object.
account account = new account();

// Set the properties of the account object.
account.name = "Fourth Coffee";
account.address1_line1 = "23 Market St.";
account.address1_city = "Sammamish";
account.address1_stateorprovince = "MT";
account.address1_postalcode = "99999";
account.donotbulkemail = new CrmBoolean();
account.donotbulkemail.Value = true;

// Create the target object for the request.
TargetCreateAccount target = new TargetCreateAccount();

// Set the properties of the target object.
target.Account = account;

// Create the request object.
CreateRequest create = new CreateRequest();

// Set the properties of the request object.
create.Target = target;

// Execute the request.
CreateResponse created = (CreateResponse)service.Execute(create);

4. Pronto, basta executá-lo, lembrando que provavelmente no ambiente de debug terá que autenticar o Web Service manualmente para que funcione corretamente, ou seja, “service.Credentials = new System.Net.NetworkCredential(username, password, domain);”

Bom é isso, tem muito mais coisas para serem discutidas, porém o básico está aqui.

Referências:

http://msdn.microsoft.com/en-us/library/bb928392.aspx – Sobre  Web Service CRM

http://msdn.microsoft.com/en-us/library/cc151015.aspx – Adicionar o Web Service CRM

http://msdn.microsoft.com/en-us/library/bb928393.aspx – Acessar o Web Service

http://msdn.microsoft.com/en-us/library/cc151049.aspx – Como não falei nada do modo Online e autenticação via IFD, segue o material

http://msdn.microsoft.com/en-us/library/cc151175.aspx – Exemplo completo

4 comentários em “CRM 4 – Acesso ao Web Service

  1. Ficou muito bom este Post Tiago.
    Agradeço a paciência e dedicação a esta exemplificação, pois como citou você mesmo citou, para alguns pode ser algo passado ou tão obvio, mas que pra muitos que estão começando são essências para o entendimento e funcionamento destes web-services.

    Obrigado!

    Curtir

  2. Olá Tiago tudo bom?!
    Talvez a duvida que tenho deva ser tratada em algum assunto especifico. Mas vamos lá!
    Fiz todo o seu passo a passo e funcionou perfeitamente. Porem, com os dados de exemplo fixados no código certo?

    Agora estou fazendo alguns testes, onde para inserir os dados na entidade account, ele busque os dados de um arquivo XML em alguma pasta x. Mas estou com dificuldade em importar estes dados. A estrutura do xml seria mais ou menos assim.

    Geraldo Jr
    Nome da rua
    Sao Paulo

    Tiago Michelini
    Nome da rua
    Sao Paulo

    Será que consegue me ajudar?

    Segue o código que estou utilizando.
    Desde já Obrigado!

    private void button1_Click(object sender, EventArgs e)
    {
    // Set up the CRM Service.
    CrmAuthenticationToken token = new CrmAuthenticationToken();
    token.AuthenticationType = 0;
    token.OrganizationName = “XXX”;

    CrmService service = new CrmService();
    service.Url = “http://XXX:5555/mscrmservices/2007/crmservice.asmx”;
    service.CrmAuthenticationTokenValue = token;
    // DefaultCredentials, recupera o usuário autenticado no AD, caso deseje outro, troque por:
    service.Credentials = new System.Net.NetworkCredential(“XXX”, “XXX”, “XXX”);
    service.Credentials = System.Net.CredentialCache.DefaultCredentials;

    // Create the account object.
    account account = new account();

    // Set the properties of the account object.

    string nome = string.Empty;
    string endereco = string.Empty;
    string cidade = string.Empty;
    string estado = string.Empty;
    string cep = string.Empty;
    string filename = @”C:\XML\arquivo.xml”;

    XmlTextReader tr = new XmlTextReader(filename);
    int i = 0;
    while (tr.Read())
    {
    if (tr.NodeType == XmlNodeType.Text)
    {

    switch (i)
    {
    case 0:
    nome = tr.Value;
    break;
    case 1:
    endereco = tr.Value;
    break;
    case 2:
    cidade = tr.Value;
    break;
    case 3:
    estado = tr.Value;
    break;
    case 4:
    cep = tr.Value;
    break;
    default:
    break;
    }
    i++;
    }
    }

    account.name = nome;
    account.address1_line1 = endereco;
    account.address1_city = cidade;
    account.address1_stateorprovince = estado;
    account.address1_postalcode = cep;
    account.donotbulkemail = new CrmBoolean();
    account.donotbulkemail.Value = true;

    Curtir

    1. Geraldo,

      Não ficou claro qual o tipo de problema que está tendo e não simulei seu código, porém chegou a verificar o que está contido no objeto “tr”? Coloque um breakpoint e avalie se seu XML está ok, outra dica uma estrutura XML obrigatoriamente deve possui um “elemento pai” na raiz, por exemplo:

      João
      Manuel
      Paulo

      Verifique se o seu XML está nesta estrutura.

      Por fim, não esqueça de inserir o método Create do WebService do CRM para que seja inserido o registro.

      Como você mesmo falou, sua dúvida por ser mais específica poderia ser melhor trabalhada no próprio fórum, neste caso o de .Net, mas estou aqui para ajudar no que der, certo?

      Obrigado pela confiança e visitação.

      Att,
      Tiago Cardoso

      Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.