Funções do Power Automate: guia de referência completo

Por Erick Alves de Moura
Funções do Power Automate: guia de referência completo

Todo fluxo de Power Automate que cresce sem controle tem o mesmo sintoma: uma sequência de ações de “Inicializar variável”, “Definir variável” e “Condição” que poderia ter sido resolvida em uma única expressão. O motivo quase sempre é o mesmo: quem monta o fluxo não sabe que a função existe, ou não lembra da sintaxe exata na hora de escrever.

O Power Automate usa a Workflow Definition Language, a mesma linguagem de expressões dos Azure Logic Apps, para tudo que não é uma ação de conector. Ela tem mais de 140 funções distribuídas em nove categorias, todas documentadas pela Microsoft, mas espalhadas em uma única página longa, sem categorização fácil de escanear. Este guia organiza essas funções por finalidade, com sintaxe e link direto para a referência oficial, para consulta rápida enquanto você edita uma expressão no fluxo.

Por que escrever expressões em vez de empilhar ações

Cada ação adicionada a um fluxo tem custo. Custo de execução (mais chamadas, mais tempo, mais chance de throttling em conectores premium), custo de manutenção (mais passos para outra pessoa entender) e custo de licenciamento em cenários onde a ação dispara uma chamada a um conector premium desnecessário. Uma expressão bem escrita substitui, com frequência, três ou quatro ações por uma única linha dentro de um campo já existente.

Um exemplo comum: extrair o domínio de um e-mail. A abordagem por ações usa split em uma ação de composição, depois um índice, depois outra composição para montar o resultado. A abordagem por expressão resolve em uma linha:

split(triggerBody()?['Email'], '@')[1]

Isso não significa que expressão é sempre superior a ação. Fluxos muito densos em expressões aninhadas ficam ilegíveis para quem não domina a sintaxe, e depurar uma expressão longa dentro do editor do Power Automate é mais difícil do que inspecionar a saída de várias ações pequenas no histórico de execução. A recomendação prática é usar expressão para transformações pontuais de dado (formatar, extrair, comparar, converter) e manter ações separadas para passos que representam uma decisão de negócio relevante, algo que alguém vai querer localizar rápido ao revisar o fluxo.

Onde escrever a expressão

O editor de expressões fica disponível em qualquer campo dinâmico do fluxo, acessível pelo ícone de raio ou digitando diretamente entre chaves. No modo texto do fluxo (Editar em modo avançado, disponível ao exportar o fluxo como código ou usar o editor do Power Automate for desktop e do Copilot Studio), a sintaxe segue o padrão @{funcao(parametros)}. Dentro do editor visual padrão, basta digitar o nome da função e o Intellisense sugere os parâmetros esperados.

A documentação oficial completa da Workflow Definition Language, com todas as funções, parâmetros e exemplos atualizados pela Microsoft, está na referência de funções para expressões no Azure Logic Apps e Power Automate. As tabelas abaixo linkam direto para a seção correspondente dessa página.

Funções de texto

Manipulam strings: recorte, concatenação, busca de substring, mudança de caixa. São as mais usadas em fluxos que tratam entrada de formulário, e-mail ou arquivo, onde o dado raramente chega já formatado do jeito que o próximo passo espera.

FunçãoO que fazSintaxe
chunkDivide uma string ou coleção em blocos de tamanho igualchunk(collection, length)
concatJunta duas ou mais strings em uma sóconcat(text1, text2, ...)
endsWithVerifica se a string termina com o texto informadoendsWith(text, searchText)
formatNumberConverte um número em string usando um formato específicoformatNumber(number, format, locale)
guidGera um identificador único global (GUID) como stringguid(format)
indexOfRetorna a posição inicial de uma substringindexOf(text, searchText)
isFloatVerifica se uma string representa um número decimalisFloat(value, locale)
isIntVerifica se uma string representa um número inteiroisInt(string)
lastIndexOfRetorna a posição da última ocorrência de uma substringlastIndexOf(text, searchText)
lengthConta os caracteres de uma string ou itens de uma coleçãolength(collection)
nthIndexOfRetorna a posição da n-ésima ocorrência de uma substringnthIndexOf(text, searchText, occurrence)
replaceSubstitui uma substring por outra dentro do textoreplace(text, oldText, newText)
sliceRetorna um trecho de texto entre duas posiçõesslice(text, startIndex, endIndex)
splitDivide o texto em um array a partir de um delimitadorsplit(text, delimiter)
startsWithVerifica se a string começa com o texto informadostartsWith(text, searchText)
substringRetorna caracteres a partir de uma posição, com tamanho definidosubstring(text, startIndex, length)
toLowerConverte o texto para minúsculastoLower(text)
toUpperConverte o texto para maiúsculastoUpper(text)
trimRemove espaços em branco no início e no fim do textotrim(text)

Uma pegadinha frequente com substring e slice: os índices são baseados em zero e um valor de início maior que o comprimento da string gera erro em tempo de execução, não retorna vazio. Se o dado de origem pode variar de tamanho (nome de arquivo, e-mail sem domínio), combine com length dentro de uma verificação antes de fatiar, ou use if para tratar o caso em que a string é mais curta que o esperado.

Funções de coleção

Atuam sobre arrays: filtrar, ordenar, combinar, dividir. Ganham relevância em fluxos que processam listas do SharePoint, resultados de uma consulta ao Dataverse ou arrays retornados por uma chamada HTTP a uma API externa.

FunçãoO que fazSintaxe
chunkDivide uma coleção em partes de tamanho igualchunk(collection, length)
containsVerifica se a coleção contém determinado itemcontains(collection, value)
emptyVerifica se a coleção está vaziaempty(collection)
firstRetorna o primeiro item de uma coleçãofirst(collection)
intersectionRetorna os itens em comum entre as coleções informadasintersection(collection1, collection2, ...)
itemRetorna o item atual dentro de um loopitem()
joinConcatena os itens de um array em uma string, com delimitadorjoin(collection, delimiter)
lastRetorna o último item de uma coleçãolast(collection)
lengthConta os itens de um arraylength(collection)
reverseInverte a ordem dos itens de um arrayreverse(collection)
skipRemove uma quantidade de itens do início e retorna o restanteskip(collection, count)
sortOrdena os itens de uma coleçãosort(collection, sortBy)
takeRetorna os primeiros N itens de uma coleçãotake(collection, count)
unionCombina os itens de múltiplas coleções, removendo duplicadosunion(collection1, collection2, ...)

Uma decisão de arquitetura relevante aqui: filter como ação nativa do Power Automate já resolve boa parte do que se tentaria fazer combinando contains e intersection em expressão. Quando o filtro depende de uma condição simples sobre um array vindo de uma ação anterior, use a ação Filtrar array, que gera um log de execução legível. Reserve as funções de coleção em expressão para transformações que a ação nativa não cobre, como cruzar dois arrays de origens diferentes.

Funções de comparação lógica

Constroem a lógica condicional que, de outra forma, exigiria várias ações de Condição aninhadas. São a base de qualquer expressão dentro de um campo de “Condição” configurado em modo avançado.

FunçãoO que fazSintaxe
andRetorna verdadeiro se todas as expressões forem verdadeirasand(expression1, expression2, ...)
equalsVerifica se dois valores são iguaisequals(object1, object2)
greaterVerifica se o primeiro valor é maior que o segundogreater(value, compareTo)
greaterOrEqualsVerifica se o primeiro valor é maior ou igual ao segundogreaterOrEquals(value, compareTo)
ifRetorna um valor ou outro conforme uma expressão booleanaif(expression, valueIfTrue, valueIfFalse)
isFloatVerifica se uma string representa um decimalisFloat(value, locale)
isIntVerifica se uma string representa um inteiroisInt(string)
lessVerifica se o primeiro valor é menor que o segundoless(value, compareTo)
lessOrEqualsVerifica se o primeiro valor é menor ou igual ao segundolessOrEquals(value, compareTo)
notInverte o resultado de uma expressão booleananot(expression)
orRetorna verdadeiro se pelo menos uma expressão for verdadeiraor(expression1, expression2, ...)

if aninhado substitui bem uma cadeia de Condições quando o resultado é um valor simples (texto, número, booleano) a ser usado em outro campo. Quando o resultado de cada ramificação é uma sequência de ações diferentes, mantenha a ação Condição nativa: aninhar mais de dois ou três níveis de if numa única expressão produz uma string difícil de revisar e praticamente impossível de depurar a olho nu.

Funções de conversão

Convertem entre tipos e formatos: texto, número, binário, base64, URI, JSON, XML. Essenciais em qualquer fluxo que troca dado com uma API REST, processa anexos ou lê arquivo.

FunçãoO que fazSintaxe
arrayConverte um valor único em arrayarray(value)
base64Codifica uma string em base64base64(value)
base64ToBinaryConverte uma string base64 em bináriobase64ToBinary(value)
base64ToStringConverte uma string base64 em texto planobase64ToString(value)
binaryConverte um valor em representação bináriabinary(value)
boolConverte um valor em booleanobool(value)
createArrayCria um array a partir dos valores informadoscreateArray(object1, object2, ...)
dataUriRetorna o URI de dados de um valordataUri(value)
dataUriToBinaryConverte um URI de dados em bináriodataUriToBinary(value)
dataUriToStringConverte um URI de dados em texto planodataUriToString(value)
decimalConverte uma string decimal em número decimaldecimal(value)
decodeBase64Decodifica uma string base64 em texto planodecodeBase64(value)
decodeDataUriConverte um URI de dados em bináriodecodeDataUri(value)
decodeUriComponentDecodifica um componente de URIdecodeUriComponent(value)
encodeUriComponentCodifica um valor como componente de URIencodeUriComponent(value)
floatConverte um valor em número de ponto flutuantefloat(value)
intConverte uma string em número inteiroint(value)
jsonInterpreta uma string ou XML como JSONjson(value)
stringConverte um valor em stringstring(value)
uriComponentCodifica um valor como componente de URIuriComponent(value)
uriComponentToBinaryConverte um componente de URI em bináriouriComponentToBinary(value)
uriComponentToStringConverte um componente de URI em texto planouriComponentToString(value)
xmlConverte uma string em XMLxml(value)

A função json merece atenção especial: é o caminho mais direto para parsear a resposta de uma chamada HTTP sem precisar de uma ação separada de Analisar JSON. A troca é que, sem o schema declarado que a ação Analisar JSON exige, o Intellisense não sugere as propriedades internas, e você precisa conhecer a estrutura do payload de antemão ou consultar a documentação da API de origem.

Funções matemáticas

Operações aritméticas básicas e geração de intervalos numéricos. Curtas, mas frequentes em cálculo de paginação, distribuição de carga entre lotes e geração de índices para loops.

FunçãoO que fazSintaxe
addSoma dois númerosadd(number1, number2)
divDivide dois númerosdiv(dividend, divisor)
maxRetorna o maior valor de um conjunto ou arraymax(number1, number2, ...)
minRetorna o menor valor de um conjunto ou arraymin(number1, number2, ...)
modRetorna o resto de uma divisãomod(dividend, divisor)
mulMultiplica dois númerosmul(number1, number2)
randGera um número inteiro aleatório dentro de um intervalorand(minValue, maxValue)
rangeCria um array de inteiros a partir de um número inicialrange(startIndex, count)
subSubtrai dois númerossub(number1, number2)

Funções de data e hora

São, na prática, a categoria com mais chance de erro silencioso em produção, porque o Power Automate trabalha internamente em UTC. Um fluxo que soma dias ou horas sem converter para o fuso do usuário final envia notificação no horário errado, e o erro só aparece quando alguém reclama, não durante o teste no editor.

FunçãoO que fazSintaxe
addDaysAdiciona dias a um timestampaddDays(timestamp, days, format)
addHoursAdiciona horas a um timestampaddHours(timestamp, hours, format)
addMinutesAdiciona minutos a um timestampaddMinutes(timestamp, minutes, format)
addSecondsAdiciona segundos a um timestampaddSeconds(timestamp, seconds, format)
addToTimeAdiciona uma unidade de tempo específica a um timestampaddToTime(timestamp, interval, timeUnit, format)
convertFromUtcConverte um timestamp UTC para o fuso de destinoconvertFromUtc(timestamp, destinationTimeZone, format)
convertTimeZoneConverte um timestamp entre dois fusos horáriosconvertTimeZone(timestamp, sourceTimeZone, destinationTimeZone, format)
convertToUtcConverte um timestamp de um fuso local para UTCconvertToUtc(timestamp, sourceTimeZone, format)
dayOfMonthRetorna o dia do mês de um timestampdayOfMonth(timestamp)
dayOfWeekRetorna o dia da semana de um timestampdayOfWeek(timestamp)
dayOfYearRetorna o dia do ano de um timestampdayOfYear(timestamp)
formatDateTimeFormata um timestamp conforme o padrão informadoformatDateTime(timestamp, format, locale)
getFutureTimeRetorna a hora atual mais um intervalo de tempogetFutureTime(interval, timeUnit, format)
getPastTimeRetorna a hora atual menos um intervalo de tempogetPastTime(interval, timeUnit, format)
parseDateTimeConverte uma string em timestampparseDateTime(timestamp, locale, format)
startOfDayRetorna o início do dia de um timestampstartOfDay(timestamp, format)
startOfHourRetorna o início da hora de um timestampstartOfHour(timestamp, format)
startOfMonthRetorna o início do mês de um timestampstartOfMonth(timestamp, format)
subtractFromTimeSubtrai uma unidade de tempo de um timestampsubtractFromTime(timestamp, interval, timeUnit, format)
ticksRetorna o valor em ticks de um timestampticks(timestamp)
utcNowRetorna o timestamp atual em UTCutcNow(format)

A dupla convertFromUtc e convertTimeZone resolve o problema de fuso, mas exige o nome exato do fuso horário no formato aceito pelo Windows (por exemplo, E. South America Standard Time para o horário de Brasília), não o nome IANA usado em outras plataformas. Errar essa string não gera erro de sintaxe, gera conversão silenciosamente incorreta, porque a função ignora fuso não reconhecido e mantém UTC.

Funções de workflow

Acessam o contexto de execução do próprio fluxo: saída de uma ação anterior, corpo do gatilho, valor de uma variável, índice de iteração dentro de um loop. São a categoria mais usada, ainda que de forma invisível, porque o editor do Power Automate gera boa parte dessas expressões automaticamente quando você seleciona um conteúdo dinâmico na interface.

FunçãoO que fazSintaxe
actionRetorna a saída da ação atualaction().property
actionBodyRetorna o corpo da saída de uma ação específicaactionBody('actionName')
actionOutputsRetorna a saída de uma ação em tempo de execuçãoactionOutputs('actionName')
actionsRetorna a saída de uma ação ou um par nome-valor do JSONactions('actionName').property
bodyRetorna o corpo de saída de uma açãobody('actionName')
formDataMultiValuesCria um array com os valores correspondentes a uma chaveformDataMultiValues('actionName', 'key')
formDataValueRetorna o valor correspondente a uma chaveformDataValue('actionName', 'key')
itemRetorna o item atual em um loop Apply to eachitem()
itemsRetorna o item atual em um loop nomeadoitems('loopName')
iterationIndexesRetorna o índice atual dentro de um loop UntiliterationIndexes('loopName')
listCallbackUrlRetorna a URL de callback de um gatilho ou açãolistCallbackUrl()
multipartBodyRetorna o corpo de uma parte de uma saída multipartmultipartBody('actionName', index)
outputsRetorna a saída completa de uma açãooutputs('actionName')
parametersRetorna o valor de um parâmetro do fluxoparameters('parameterName')
resultRetorna entradas e saídas de uma ação com escoporesult('scopedActionName')
triggerRetorna a saída do gatilho do fluxotrigger().property
triggerBodyRetorna o corpo de saída do gatilhotriggerBody()
triggerFormDataValueRetorna o valor de uma chave nas saídas do gatilhotriggerFormDataValue('key')
triggerFormDataMultiValuesCria um array com os valores de uma chave do gatilhotriggerFormDataMultiValues('key')
triggerMultipartBodyRetorna o corpo de uma parte da saída do gatilhotriggerMultipartBody(index)
triggerOutputsRetorna a saída completa do gatilhotriggerOutputs()
variablesRetorna o valor de uma variável do fluxovariables('variableName')
workflowRetorna detalhes sobre o próprio fluxoworkflow().property

A diferença entre body('actionName') e outputs('actionName') confunde bastante gente: body retorna só a propriedade body da saída da ação, outputs retorna a saída inteira, incluindo cabeçalhos e status code de uma chamada HTTP, por exemplo. Se você precisa validar o status de uma resposta HTTP antes de seguir, é outputs, não body, que traz essa informação.

Funções de parsing de URI

Quebram uma URI em seus componentes. Usadas com frequência em fluxos que recebem um link (de um item do SharePoint, de um e-mail, de um webhook) e precisam extrair só uma parte dele, como o host para validação de domínio ou a query string para ler parâmetros.

FunçãoO que fazSintaxe
uriHostRetorna o host de uma URIuriHost(uri)
uriPathRetorna o caminho de uma URIuriPath(uri)
uriPathAndQueryRetorna caminho e query string de uma URIuriPathAndQuery(uri)
uriPortRetorna a porta de uma URIuriPort(uri)
uriQueryRetorna a query string de uma URIuriQuery(uri)
uriSchemeRetorna o esquema (http, https) de uma URIuriScheme(uri)

Funções de manipulação de JSON e XML

Editam objetos JSON e navegam em XML sem precisar reconstruir o objeto inteiro em uma ação separada. Particularmente úteis quando o fluxo precisa enriquecer um payload antes de enviá-lo a uma API, adicionando ou removendo uma propriedade pontual.

FunçãoO que fazSintaxe
addPropertyAdiciona uma propriedade e seu valor a um objeto JSONaddProperty(object, property, value)
coalesceRetorna o primeiro valor não nulo entre os parâmetros informadoscoalesce(value1, value2, ...)
removePropertyRemove uma propriedade de um objeto JSONremoveProperty(object, property)
setPropertyDefine o valor de uma propriedade em um objeto JSONsetProperty(object, property, value)
xpathRetorna nós ou valores que correspondem a um XPathxpath(xml, path)

coalesce resolve um padrão que, sem ela, vira uma torre de if aninhado: pegar o primeiro valor preenchido entre vários campos opcionais de um formulário. Em vez de if(empty(campoA), if(empty(campoB), campoC, campoB), campoA), a expressão fica coalesce(campoA, campoB, campoC), mais curta e muito mais fácil de auditar depois.

Como usar esta referência no dia a dia

Nenhuma equipe de automação memoriza 140 funções. O ganho real de ter essa lista organizada por categoria é outro: quando você sente que uma transformação está exigindo ações demais, a primeira pergunta vira “existe uma função para isso” em vez de “que ação eu adiciono agora”. Isso muda o hábito de construção do fluxo, e fluxos construídos com esse hábito tendem a ter menos ações, menos pontos de falha e menos consumo desnecessário de conectores premium.

Vale também documentar, dentro do próprio fluxo, expressões que combinam três ou mais funções aninhadas. Um comentário na ação, ou um nome descritivo na variável que recebe o resultado, economiza tempo de quem vai dar manutenção seis meses depois e não tem a lógica da expressão fresca na cabeça.

Se o seu fluxo já cresceu a ponto de virar um emaranhado de condições e variáveis, ou se a dúvida é sobre onde a lógica de negócio deveria morar (no fluxo, num conector customizado, num Power Automate Desktop, numa Function do Azure), essa é uma conversa de arquitetura que vale a pena ter antes de continuar empilhando ações.

Ver mais artigos

Entre em Contato

Vamos juntos transformar sua dor
em solução!

#moveFast