Microsoft Dynamics CRM - Web Services

O Microsoft Dynamics CRM fornece dois importantes serviços da web que são usados ​​para acessar o CRM de um aplicativo externo e invocar métodos da web para realizar operações comuns de dados de negócios, como criar, excluir, atualizar e localizar no CRM.

Considere os seguintes cenários -

  • Você tem um aplicativo .NET externo, que precisa se comunicar com o CRM. Por exemplo, você pode inserir um registro de contato no CRM quando um novo cliente for registrado em seu aplicativo externo.

  • Ou talvez você queira pesquisar registros no CRM e exibir os resultados da pesquisa em seu aplicativo externo.

Em tais cenários, você pode usar os serviços da web expostos pelo CRM para consumi-los em seu aplicativo e executar operações de criação, exclusão, atualização e localização no CRM.

Serviço da Web IDiscoveryService

Este serviço da web retorna uma lista de organizações às quais o usuário especificado pertence e o endpoint de URL para cada organização.

IOrganizationService Web Service

Este serviço da web é o principal serviço da web usado para acessar dados e metadados no CRM. O IOrganizationService usa dois assemblies importantes -Microsoft.Xrm.Sdk.dll e Microsoft.Crm.Sdk.Proxy.dll. Esses assemblies podem ser encontrados no pacote CRM SDK dentro doBin pasta.

Microsoft.Xrm.Sdk.dll

Este conjunto define os métodos e tipos de xRM principais, incluindo classes de proxy para tornar a conexão com o Microsoft Dynamics CRM mais simples, métodos de autenticação e contratos de serviço.

Microsoft.Crm.Sdk.Proxy.dll

Este assembly define as solicitações e respostas para mensagens não essenciais, bem como as enumerações necessárias para trabalhar com os dados da organização. A seguir estão os namespaces com suporte por esses dois assemblies.

Cada um desses assemblies suporta determinadas mensagens, que serão utilizadas para trabalhar com os dados armazenados em qualquer entidade. Uma lista completa de mensagens suportadas por eles pode ser encontrada nos seguintes links -

Supported xRM Messages - https://msdn.microsoft.com/en-us/library/gg334698.aspx

Supported CRM Messages - https://msdn.microsoft.com/en-us/library/gg309482.aspx

Métodos de serviço da web IOrganizationService

o IOrganizationService fornece oito métodos que permitem que você execute todas as operações comuns no sistema e entidades personalizadas, bem como metadados da organização.

Sr. Não Método e Descrição
1

IOrganizationService.Create

Cria um registro.

2

IOrganizationService.Update

Atualiza um registro existente.

3

IOrganizationService. Retrieve

Recupera um registro.

4

IOrganizationService. RetrieveMultiple

Recupera uma coleção de registros.

5

IOrganizationService. Delete

Exclui um registro.

6

IOrganizationService. Associate

Cria um link entre os registros.

7

IOrganizationService.Disassociate

Exclui um link entre os registros.

8

IOrganizationService.Execute

Usado para processamento de registro comum, bem como processamento especializado, como resolução de caso, detecção de duplicados, etc.

Exemplo de serviço da web

Para entender como os serviços da web funcionam no CRM, veremos um exemplo fornecido pelo SDK do CRM. Neste exemplo, vamos criar um novo registro de conta, atualizá-lo e, finalmente, excluí-lo usando o CRMIOrganizationService serviço de internet.

Step 1- Abra a pasta onde você extraiu o CRM SDK. Agora abra a solução QuickStartCS.sln navegando até o seguinte local: SDK \ SampleCode \ CS \ QuickStart

Step 2 - Estaremos explorando o QuickStart com Simplified Connectionprojeto. Abrirapp.configNeste projeto. Por padrão, oconnectionStrings seção neste arquivo será comentada.

A partir disso, descomente a primeira chave da string de conexão e edite os três detalhes a seguir -

Url- Especifique o URL da sua instância de CRM. No nosso caso, como estamos usando a versão online do CRM, você terá que mencionar essa URL.

Username - Seu nome de usuário do CRM Online.

Password - Sua senha do CRM Online.

Step 3 - Abra o SimplifiedConnection.cs arquivo neste projeto e Runmethod dentro dele.

public void Run(StringconnectionString, boolpromptforDelete) {
   try {
      
      // Establish a connection to the organization web service using CrmConnection.
      Microsoft.Xrm.Client.CrmConnection connection =
         CrmConnection.Parse(connectionString);
      
      // Obtain an organization service proxy.
      // The using statement assures that the service proxy will be properly disposed.
      using(_orgService = new OrganizationService(connection)) {

         //Create any entity records this sample requires.
         CreateRequiredRecords();
         
         // Obtain information about the logged on user from the web service.
         Guid userid = ((WhoAmIResponse)_orgService.Execute(new WhoAmIRequest())).UserId;
         SystemUser systemUser = (SystemUser)_orgService.Retrieve("systemuser",userid,
            new ColumnSet(newstring[]{"firstname","lastname"}));
         
         Console.WriteLine("Logged on user is {0} {1}.",
            systemUser.FirstName,systemUser.LastName);

         // Retrieve the version of Microsoft Dynamics CRM.
         RetrieveVersionRequest versionRequest = new RetrieveVersionRequest();
         RetrieveVersionResponse versionResponse =
            (RetrieveVersionResponse)_orgService.Execute(versionRequest);
         Console.WriteLine("Microsoft Dynamics CRM version {0}.",
            versionResponse.Version);
         
         // Instantiate an account object. Note the use of option set
         enumerations defined in OptionSets.cs.
         
         // Refer to the Entity Metadata topic in the SDK documentation to
         determine which attributes must
         
         // be set for each entity.
         Account account = new Account{Name = "Fourth Coffee"};
         account.AccountCategoryCode = new OptionSetValue(
            (int)AccountAccountCateg oryCode.PreferredCustomer);
         account.CustomerTypeCode = new OptionSetValue(
            (int)AccountCustomerTypeCod e.Investor);
         
         // Create an account record named Fourth Coffee.
         _accountId = _orgService.Create(account);
         Console.Write("{0} {1} created, ",account.LogicalName,account.Name);
         
         // Retrieve the several attributes from the new account.
         ColumnSet cols = new ColumnSet(
            new String[]{"name","address1_postalcode","lastusedincampaign"});
         Account retrievedAccount =
            (Account)_orgService.Retrieve("account", _accountId, cols);
         Console.Write("retrieved, ");

         // Update the postal code attribute.
         retrievedAccount.Address1_PostalCode = "98052";

         // The address 2 postal code was set accidentally, so set it to null.
         retrievedAccount.Address2_PostalCode = null;

         // Shows use of a Money value.
         retrievedAccount.Revenue = new Money(5000000);

         // Shows use of a Boolean value.
         retrievedAccount.CreditOnHold = false;
         
         // Update the account record.
         _orgService.Update(retrievedAccount);
         Console.WriteLine("and updated.");
         
         // Delete any entity records this sample created.
         DeleteRequiredRecords(promptforDelete);
      } 
   } 
   // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
   catch(FaultException<microsoft.xrm.sdk.organizationservicefault>) {

      // You can handle an exception here or pass it back to the calling method.
      throw;
   }
}

Step 4- Este método demonstra basicamente todas as operações CRUD usando serviços web de CRM. O código primeiro cria uma instância de organização, em seguida, cria um registro de conta, atualiza o registro criado e, finalmente, o exclui. Vejamos os componentes importantes desse código. Para ver as mudanças em movimento no CRM quando este código é executado, você pode depurar esse código passo a passo (como discutiremos abaixo) e simultaneamente ver as mudanças no CRM.

Step 4.1 - Estabelece a conexão com a organização usando a string de conexão que modificamos em Step 2.

Microsoft.Xrm.Client.CrmConnection connection = CrmConnection.Parse(connectionString);

Step 4.2 - Obtém uma instância de proxy do serviço web da organização CRM.

_orgService = new OrganizationService(connection)

Step 4.3 - Cria um novo objeto de entidade Conta e define seu Nome, AccountCategoryCode e CustomerTypeCode.

Account account = new Account{Name = "Fifth Coffee"}; 
account.AccountCategoryCode = new OptionSetValue(
   (int)AccountAccountCategoryCode.P referredCustomer); 
account.CustomerTypeCode = new OptionSetValue(
   (int)AccountCustomerTypeCode.Investor);

Step 4.4 - Cria o novo registro usando o método Criar do serviço de organização.

_accountId = _orgService.Create(account);

Se você navegar até o CRM, verá um registro de conta recém-criado.

Step 4.5 - Depois que a conta é criada, o serviço recupera o registro do CRM usando o método de serviço da web Retrieve.

ColumnSet cols = new ColumnSet(new String[]{
   "name","address1_postalcode","lastusedincampaign"}); 
Account retrievedAccount = 
   (Account)_orgService.Retrieve("account", _accountId, cols);

Step 4.6 - Depois de ter o registro recuperado, você pode definir o valor atualizado do registro.

retrievedAccount.Address1_PostalCode = "98052"; 
retrievedAccount.Address2_PostalCode = null; 
retrievedAccount.Revenue = new Money(5000000); 
retrievedAccount.CreditOnHold = false;

Step 4.7 - Depois de definir o valor atualizado do registro, atualize o registro de volta no banco de dados do CRM usando o método de serviço da web de atualização.

_orgService.Update(retrievedAccount);

Se você abrir o registro no CRM, verá esses valores atualizados lá.

Step 4.8 - Por fim, exclua o registro usando o método Excluir serviço da web.

_orgService.Delete(Account.EntityLogicalName, _accountId);

Se agora você atualizar o mesmo registro no CRM, verá que o registro não está mais disponível, pois já foi excluído.

Conclusão

Neste capítulo, lidamos com dois importantes serviços da web fornecidos pelo CRM e um exemplo prático de como esses serviços da web podem ser usados ​​a partir de um aplicativo externo para realizar várias operações CRUD.