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, enviando um identificador no corpo da requisição.

Pré-requisitos:

 

Importante sobre CancellationToken

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

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

    • Para recuperar

      Em os CancellationToken depende do contexto onde está:

    • Para o contexto de  regras de negócio do Form:formulário:
      FormContext.GetCurrentCancellationToken()

    • Para o

      Em contextchamadas feitas dentro de Api:uma API customizada:
      ApiContext.GetCurrentCancellationToken()

    • Em Paracomponentes oRazor context de componente Cshtml(.cshtml) do Form Page:  formulário:
      PageContext.GetCurrentCancellationToken()

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


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

 

Observações

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

  • Esse padrão é recomendado quando a API espera dados estruturados via payload, e não via query string.

 

Como chamar a api?

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(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, FormContext.GetCurrentCancellationToken());
    }
}

 

Na ApiContext

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

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, ApiContext.GetCurrentCancellationToken());
    }
}