Skip to main content

Como chamar uma API POST externa dentro 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());
    }
}