Cloud Jasmin DesenvolvimentoGuias
DesenvolvimentoGuias
Guias
Voltar | Lista de artigos

Como utilizar OData para obter uma lista de encomendas?

Última alteração a 12/08/2022

O exemplo de utilização da Web API ilustra a utilização da API para obter a lista de encomendas disponíveis no sistema, de forma filtrada, com recurso a OData.

O código apresentado foi desenvolvido em C# para uma aplicação de consola está disponível no repositório de exemplos de código.

Este exemplo utiliza os pedidos à WebAPI Jasmin. Para o Rose poderá ser necessário ajustar propriedades da entidade.

AccountKey e SubscriptionKey

Em primeiro lugar é necessário definir no código estes dois dados requeridos pela Web API. No exemplo, usamos duas constantes para o efeito que serão utilizadas no URL dos pedidos.

private const string AccountKey = "XXXXX"; // TODO: put your account key here
private const string SubscriptionKey = "XXXXX-XXXX"; // TODO: put your account key here

Access token

Para aceder à Web API também é necessário o token de autorização associado ao utilizador e à subscrição. Mais uma vez, no exemplo, usamos uma constante para armazenar o seu valor.

private const string AccessToken = "XXXX"; // TODO: put the authorization access token here (this should be obtained previously)

HttpClient

Para fazer chamadas a uma Web API REST em C# pode utilizar-se a classe System.Net.Http.HttpClient.

using (HttpClient client = new HttpClient())
{
    (…)
}

Configuração do access token

Os pedidos à Web API requerem sempre o access token anterior. Deve ser incluído nos headers do pedido.

client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);

Dados da encomenda

No caso do endpoint de consulta de encomendas com recurso a filtros OData, os dados da encomenda serão devolvidos no corpo da mensagem do resultado em JSON.

Para o efeito, criamos uma classe C# muito simples que inclui apenas os atributos da encomenda necessários para o exemplo.

internal class OrderResource
{
    #region Internal Properties
  
    public Guid Id
    {
        get;
        set;
    }
    public string DocumentType
    {
        get;
        set;
    }
    public string Serie
    {
        get;
        set;
    }
    public int SeriesNumber
    {
        get;
        set;
    }
    public string Company
    {
        get;
        set;
    }

    #endregion
}

Execução do pedido

De seguida, a chamada à Web API pode ser executada usando o endpoint correto. Note-se que o verbo é um GET e que a resposta é devolvida num tipo IDisposable HttpResponseMessage.

// URI of the endpoint

string endpoint = string.Format(CultureInfo.CurrentCulture, "{0}/{1}/{2}/sales/orders", ApiBaseAddress, AccountKey, SubscriptionKey);

// Send the request (GET)

Uri endpointUri = new Uri(endpoint);
using (HttpResponseMessage response = await client.PostAsync(endpointUri, content))
{
    (…)
}

Tratamento da resposta

O endpoint pode devolver dois tipos de respostas: sucesso ou erro. No caso de sucesso, o corpo inclui a lista de encomendas, de acordo com os filtros OData aplicados. Em caso de erro, o resultado incluirá uma mensagem de erro, dependendo do erro.

// Failed?

if (!response.IsSuccessStatusCode)
{
    string errorContent = await response.Content.ReadAsStringAsync();
    StringBuilder sb = new StringBuilder();
    sb.AppendLine(string.Format(CultureInfo.CurrentCulture, "The requested failed with status code {0} ({1}).", (int)response.StatusCode, response.StatusCode));
    if (!string.IsNullOrWhiteSpace(errorContent))
    {
        sb.Append(string.Format(CultureInfo.CurrentCulture, "Message: {0}.", errorContent));
    }

    throw new InvalidOperationException(sb.ToString());
}

// Succeeded

string json = await response.Content.ReadAsStringAsync();
JsonSerializerSettings settings = new JsonSerializerSettings()
{
  ContractResolver = new CamelCasePropertyNamesContractResolver(),
  Formatting = Formatting.Indented
};

PageResult orders = JsonConvert.DeserializeObject(json);
Console.WriteLine("The orders attributs were obtained with success.");
foreach (OrderResource order in orders)
{
  Console.WriteLine("Order: {0}.{1}.{2}", order.DocumentType, order.Company, order.SeriesNumber);
}
Console.WriteLine("Count: {0}", orders.Count);

É assim tão simples obter os atributos pretendidos, de acordo com os filtros aplicados, à lista de encomendas com a utilização de OData na Web API.

Adicionar aos favoritos ou partilhar este artigo
Esta página foi útil?
Obrigado pelo seu voto.

login para deixar a sua opinião.

Obrigado pelo seu feedback. Iremos analisá-lo para continuarmos a melhorar!
Artigos Relacionados
Boas práticas de integração Como executar queries OData sobre os dados? Actualización de los endpoints de las integraciones [ES] Códigos de estado das respostas Como usar campos e entidades personalizadas?