Skip to main content

Como chamar uma API externa a partir do agilityflow

Este exemplo mostra como fazer uma requisição HTTP POST para uma API externa no contexto do AgilityFlow.

Importante sobre CancellationToken

O método PostAsync deve sempre utilizar um CancellationToken para garantir que a requisição seja cancelável, evitando problemas em fluxos interrompidos ou expirados.

Para recuperar o CancellationToken, utilize o método adequado ao contexto em que o código está sendo executado. Alguns exemplos:

  • Em regras de negócio do formulário:
    FormContext.GetCurrentCancellationToken()

  • Em chamadas feitas dentro de uma API customizada:
    ApiContext.GetCurrentCancellationToken()

  • Em componentes Razor (.cshtml) do formulário:
    PageContext.GetCurrentCancellationToken()

  • E assim por diante, conforme o contexto (GlobalContext,CustomPageContext,CardContext, etc.)

Basta utilizar o método GetCurrentCancellationToken() do contexto atual.

Observação

  • Troque <<URL_DA_API>> pela URL real da API que deseja acionar.

Como chamar a api em cada contexto?

No FormContext

Crie uma regra de negócio e dentro da regra de Programação em C#, utilize o código abaixo

public async Task ExecuteAsync()
{
    var formId = FormContext.FormId.Value.ToString();
    await CallExternalApiAsync(formId);
}

public async Task CallExternalApiAsync(string qualquerParametro)
{
    if (string.IsNullOrWhiteSpace(qualquerParametro)) return;

    var payload = new
    {
        parametroParaApi = qualquerParametro
    };

    using (var httpClient = new HttpClient())
    {
        var content = new StringContent(
            JsonConvert.SerializeObject(payload),
            Encoding.UTF8,
            "application/json"
        );

        await httpClient.PostAsync("<<URL_DA_API>>", content, FormContext.GetCurrentCancellationToken());
    }
}

Na ApiContext

Na programação em C#

public async Task RunAsync()
{
    await CallExternalApiAsync("exemplo de parametro");
}

public async Task CallExternalApiAsync(string qualquerParametro)
{
    if (string.IsNullOrWhiteSpace(qualquerParametro)) return;

    var payload = new
    {
        parametroParaApi = qualquerParametro
    };

    using (var httpClient = new HttpClient())
    {
        var content = new StringContent(
            JsonConvert.SerializeObject(payload),
            Encoding.UTF8,
            "application/json"
        );

        await httpClient.PostAsync("<<URL_DA_API>>", content, ApiContext.GetCurrentCancellationToken());
    }
}

No PageContext dos componentes Cshtml do formulário

Na programação em C# razor dos componente

@{
   
    string qualquerParametro = "";
    if (!string.IsNullOrWhiteSpace(qualquerParametro)){
      var payload = new
      {
          parametroParaApi = qualquerParametro
      };
  
      using (var httpClient = new HttpClient())
      {
          var content = new StringContent(
              JsonConvert.SerializeObject(payload),
              Encoding.UTF8,
              "application/json"
          );
  
          await httpClient.PostAsync("<<URL_DA_API>>", content, PageContext.GetCurrentCancellationToken());
      }
    }
}

No GlobalContext

Na programação em C#

public async Task CallExternalApiAsync(string qualquerParametro)
{
    if (string.IsNullOrWhiteSpace(requestId)) return;

    var payload = new
    {
        parametroParaApi = qualquerParametro
    };

    using (var httpClient = new HttpClient())
    {
        var content = new StringContent(
            JsonConvert.SerializeObject(payload),
            Encoding.UTF8,
            "application/json"
        );

        await httpClient.PostAsync("<<URL_DA_API>>", content, GlobalContext.GetCurrentCancellationToken());
    }
}

No CustomPageContext

Na programação em C# do custom page context

public async Task CallExternalApiAsync(string qualquerParametro)
{
    if (string.IsNullOrWhiteSpace(requestId)) return;

    var payload = new
    {
        parametroParaApi = qualquerParametro
    };

    using (var httpClient = new HttpClient())
    {
        var content = new StringContent(
            JsonConvert.SerializeObject(payload),
            Encoding.UTF8,
            "application/json"
        );

        await httpClient.PostAsync("<<URL_DA_API>>", content, CustomPageContext.GetCurrentCancellationToken());
    }
}