Exemplos de API Web (C#)
Publicado: janeiro de 2017
Aplicável a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Este tópico fornece informações sobre os exemplos da API Web implementados com C#. Embora cada exemplo se concentre em um aspecto diferente da API Web do Microsoft Dynamics 365, eles compartilham características e a estrutura semelhantes.
Observação
Esta abordagem de implementação usa a criação de objeto de baixo nível e chamadas de mensagem HTTP explícitas. Esta abordagem permite o controle e a demonstração das propriedades de objeto de baixo nível que controla o comportamento da API Web. Ela se destina a ajudar você a compreender os trabalhos internos, mas não representa necessariamente uma abordagem que fornecerá a melhor experiência de produtividade do desenvolvedor.
Em comparação, as bibliotecas de nível mais alto, como a Biblioteca OData, abstraem muito dessa lógica de cliente de baixo nível. O Modelo T4 OData pode ser opcionalmente usado em conjunto com a Biblioteca OData para gerar classes de entidade de cliente automaticamente.
Neste tópico
Pré-requisitos
Listagem de exemplos da API Web (C#)
Como baixar e executar os exemplos
Elementos comuns encontrados em cada exemplo
Pré-requisitos
O que se segue é necessário para compilar e executar os exemplos em C# da API Web do Dynamics 365:
Uma versão do Microsoft Visual Studio 2015 ou posterior. Uma versão gratuita, o Visual Studio Community, está disponível para download aqui.
Uma conexão com a Internet para baixar e atualizar os pacotes NuGet referenciados.
Acesso ao Dynamics 365 Online ou local (ou posterior). Para todos os tipos de instalação do Dynamics 365, será necessária uma conta de usuário com privilégios para executar operações CRUD.
Para executar exemplos no Dynamics 365 (online), você deve registrar seu aplicativo no Azure Active Directory para obter uma ID de cliente e a URL de redirecionamento. Para obter mais informações, consulte Passo a passo: Registrar o aplicativo Dynamics 365 com Ative Directory do Azure.
Listagem de exemplos da API Web (C#)
A tabela a seguir lista os exemplos implementados em C#. Cada exemplo é descrito de uma forma mais geral em um tópico de grupo de exemplos correspondente que se concentra em mensagens de solicitação e de resposta HTTP, como detalhado no tópico Exemplos de API Web.
Amostra |
Grupo de exemplo |
Descrição |
---|---|---|
Demonstra como criar, recuperar, atualizar, excluir, associar e desassociar os registros de entidade do Dynamics 365. |
||
Demonstra como usar funções e sintaxe de consulta OData v4, bem como funções de consulta do Microsoft Dynamics 365. Inclui exemplos de trabalho com consultas predefinidas e o uso do FetchXML para a execução de consultas. |
||
Demonstra como executar operações condicionais especificadas com os critérios de ETag. |
||
Demonstra como usar as funções e as ações associadas e não associadas, incluindo ações personalizadas. |
Como baixar e executar os exemplos
O código fonte de cada exemplo está disponível na Galeria de Códigos do MSDN O link para download de cada exemplo está incluído no tópico de exemplo. O download do exemplo é um arquivo .zip compactado, que contém os arquivos de solução do Visual Studio 2015 para o exemplo. Para obter mais informações, consulte a seção Executar este exemplo em cada tópico de exemplo.
Elementos comuns encontrados em cada exemplo
Muitos dos exemplos têm uma estrutura semelhante e contêm métodos e recursos comuns, geralmente para fornecer a infraestrutura básica para um programa C# da API Web.
Vários desses elementos comuns também estão presentes durante a criação de uma nova solução que acessará a API Web do Dynamics 365. Para obter mais informações, consulte Iniciar um projeto de API Web do Dynamics 365 no Visual Studio (C#).
Bibliotecas e estruturas utilizadas
Esta implementação do C# depende do seguinte código auxiliar para comunicação HTTP, configuração do aplicativo, autenticação, manipulação de erros e serialização do JSON.
As classes de mensagens HTTP padrão do .NET Framework contidas no namespace System.Net.Http, particularmente HttpClient, HttpRequestMessage e HttpResponseMessage, são usadas para mensagens HTTP.
A Biblioteca Auxiliar da API Web do Dynamics 365 é usada para ler o arquivo de configuração do aplicativo, autenticar no servidor do Dynamics 365 e auxiliar na manipulação de erros da operação. Para obter mais informações, consulte Use a Microsoft Dynamics 365 Biblioteca Auxiliar da API Web (C#).
A biblioteca Json.NET da Newtonsoft dá suporte ao formato de dados JSON.
Biblioteca Json.NET
Como o C# e a maioria das linguagens gerenciadas não dão suporte nativo ao formato de dados JSON, a melhor abordagem atual é usar uma biblioteca para esta funcionalidade. Para obter mais informações, consulte Introdução a JavaScript Object Notation (JSON) em JavaScript e .NET. O Json.NET é uma opção popular para projetos .NET. Ele oferece uma estrutura robusta, com bom desempenho, de software livre (licenciada pelo MIT) para serialização, conversão, análise, consultas e formatação de dados JSON. Para obter mais informações, consulte a documentação do Json.NET.
Nos exemplos do C#, esta biblioteca é principalmente usada para serializar dados entre objetos .NET e corpos de mensagem HTTP. Embora a biblioteca forneça vários métodos para cumprir essa tarefa, a abordagem usada pelos exemplos é criar instâncias individuais de JObject para representar as instâncias de entidade do Dynamics 365 (registros). Por exemplo, o código a seguir cria a variável contact1 que representa uma instância do Dynamics 365 contact EntityType e então fornece valores para um conjunto de propriedades select para esse tipo.
JObject contact1 = new JObject();
contact1.Add("firstname", "Peter");
contact1.Add("lastname", "Cambel");
contact1.Add("annualincome", 80000);
contact1["jobtitle"] = "Junior Developer";
O uso da notação de colchetes na última instrução é equivalente ao método Add. Essa instanciação também poderia ser realizada por meio do uso do método estático Parse:
JObject contact1 = JObject.Parse(@"{firstname: 'Peter', lastname: 'Cambel', "
+ @"annualincome: 80000, jobtitle: 'Junior Developer'}");
Como o JObject representa um tipo JSON geral, seu uso impede a verificação de tipo em tempo de execução. Por exemplo, embora a instrução a seguir seja sintaticamente válida, potencialmente ela levará a erros em tempo de execução porque o contact EntityType não contém uma propriedade age.
contact1.Add("age", 37); //Possible error--no age property exists in contact!
Assim que a variável entity tiver sido inicializada, poderá então ser enviada em um corpo de mensagem, com assistência de várias classes System.Net.Http, por exemplo:
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "contacts");
request.Content = new StringContent(contact1.ToString(), Encoding.UTF8, "application/json");
HttpResponseMessage response = await httpClient.SendAsync(request1);
Você também pode criar instâncias de JObject ao desserializar instâncias de entity durante operações de recuperação, por exemplo:
//contact2Uri contains a reference to an existing CRM contact instance.
string queryOptions = "?$select=fullname,annualincome,jobtitle,description";
HttpResponseMessage response = await httpClient.GetAsync(contact2Uri + queryOptions);
JObject contact2 = JsonConvert.DeserializeObject<JObject>(await response.Content.ReadAsStringAsync());
Manipulação de êxito e de erro de resposta
Em geral, os exemplos usam uma abordagem simples para o processamento de respostas HTTP. Se a solicitação for bem-sucedida, as informações sobre a operação normalmente terão o console como saída. Se a resposta também transportar uma carga JSON ou cabeçalhos úteis, essas informações só serão processadas após o êxito. E, pro fim, se uma entidade do Dynamics 365 tiver sido criada, a coleção entityUris será atualizada com o URI desse recurso. O método Método DeleteRequiredRecords usa essa coleção para excluir opcionalmente os dados criados pelo exemplo do seu servidor Dynamics 365.
Se a solicitação tiver falhado, o programa terá como saída uma mensagem contextual sobre a operação que falhou e então lançará uma exceção personalizada do tipo CrmHttpResponseException. O manipulador de exceções tem como saída mais informações sobre a exceção e então o controle passa para um bloco finally que inclui lógica de limpeza, novamente incluindo uma chamada a DeleteRequiredRecords. O código a seguir demonstra essa abordagem de manipulação de erros em uma solicitação POST para criar um registro.
if (response.StatusCode == HttpStatusCode.NoContent) //204
{
Console.WriteLine("POST succeeded, entity created!”);
//optionally process response message headers or body here, for example:
entityUri = response.Headers.GetValues("OData-EntityId").FirstOrDefault();
entityUris.Add(entityUri);
}
else
{
Console.WriteLine("Operation failed: {0}", response.ReasonPhrase);
throw new CrmHttpResponseException(response.Content);
}
HttpStatusCode.NoContent equivale a um status HTTP código 204, “Nenhum conteúdo”. Aqui, esse código de status indica que a solicitação POST foi bem-sucedida. Para obter mais informações, consulte Redigir solicitações HTTP e manipular erros.
Características e métodos
A maioria dos exemplos tem o mesmo padrão de arquitetura geral, com as seguintes características:
Todo o código de exemplo c# pertinente está contido no arquivo de origem principal chamado Program.cs, que contém uma única classe com o mesmo nome do projeto de exemplo.
As classes de exemplo, bem como a Use a Microsoft Dynamics 365 Biblioteca Auxiliar da API Web (C#), estão contidas no namespace Microsoft.Crm.Sdk.Samples.
Os exemplos estão livremente comentados: são fornecidos resumos nos níveis da classe e do método e a maioria das instruções individuais chave têm comentários na mesma linha ou de linha única associados. Os arquivos suplementares, como o arquivo de configuração do aplicativo App.config, também contêm comentários importantes.
A classe de exemplo principal é normalmente estruturada para conter o seguinte conjunto de métodos comum: Método Main, Método ConnectToCRM, Método CreateRequiredRecords, Método RunAsync, Método DisplayException e Método DeleteRequiredRecords.
Método Main
Por definição, esse método inicia a execução do exemplo. Ele só contém lógica de fluxo de controle de alto nível e de manipulação de erros, com frequência este código exato:
static void Main(string[] args)
{
FunctionsAndActions app = new FunctionsAndActions();
try
{
//Read configuration file and connect to specified CRM server.
app.ConnectToCRM(args);
app.CreateRequiredRecords();
Task.WaitAll(Task.Run(async () => await app.RunAsync()));
}
catch (System.Exception ex) { DisplayException(ex);
}
finally
{
if (app.httpClient != null)
{
app.DeleteRequiredRecords(true);
app.httpClient.Dispose();
}
Console.WriteLine("Press <Enter> to exit the program.");
Console.ReadLine();
}
}
Método ConnectToCRM
Esse método chama as bibliotecas auxiliares para ler o arquivo de configuração do aplicativo e então estabelece uma conexão com o servidor do Dynamics 365 especificado. O resultado destas etapas é a inicialização de uma propriedade de classe HttpClient que é usada no programa para enviar solicitações da Web e receber respostas. Observe que as seguintes propriedades estão definidas neste objeto:
//Define the Web API address, the max period of execute time, the Odata
// version, and the expected response payload format.
httpClient.BaseAddress = new Uri(config.ServiceUrl + "api/data/v8.1/");
httpClient.Timeout = new TimeSpan(0, 2, 0); // 2 minute timeout
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Para obter mais informações sobre a configuração e a autenticação do aplicativo de exemplo, consulte Use a Microsoft Dynamics 365 Biblioteca Auxiliar da API Web (C#).
Método CreateRequiredRecords
Esse método cria e inicializa registros de entidade exigidos pelo exemplo, somente quando essas operações não forem de interesse principal no exemplo. Por exemplo, o Amostra de operações básicas API da Web (C#) não contém esse método porque a criação de registro é uma das principais considerações do exemplo.
Método RunAsync
Esse método assíncrono contém o código fonte pertinente ou, para programas mais longos, chama métodos que agrupam o código de exemplo pertinente. O código contido é explicado por comentários inseridos e localizados na seção Comentários de cada tópico de exemplo correspondente.
Método DisplayException
Esse método auxiliar exibe informações sobre a exceção, incluindo exceções internas, no console padrão.
Método DeleteRequiredRecords
Esse método auxiliar opcionalmente exclui registros de exemplo e outros recursos de servidor do Dynamics 365 criados no programa e, em particular, pelo método Método CreateRequiredRecords. Ele consulta o usuário em relação à verificação desta operação, então itera na coleção entityUris e tenta excluir cada elemento com uma mensagem HTTP DELETE.
Confira Também
Use a API da Web do Microsoft Dynamics 365
Exemplos de API Web
Exemplos de API da Web (JavaScript do cliente)
Amostra de operações básicas API da Web (C#)
Exemplo de dados de consulta de API da Web (C#)
Amostra de operações de condição API da Web (C#)
Exemplo de funções API da Web e ações (C#)
Microsoft Dynamics 365
© 2017 Microsoft. Todos os direitos reservados. Direitos autorais