Livro de receitas de expressão para fluxos de nuvens

Este artigo explica 30 padrões de expressão prontos a usar para cenários comuns nos fluxos cloud do Power Automate. Podes copiar, adaptar e usar estes padrões nos teus fluxos.

Observação

Estas expressões funcionam em todos os níveis de licença cloud flow do Power Automate. Encontre a referência completa da função nas funções de expressão do fluxo de trabalho.

Operações de texto

1. Converter para maiúsculas ou minúsculas

Cenário: Normalizar a entrada do utilizador antes da comparação ou armazenamento.

Expressão: toUpper(variables('input')) ou toLower(variables('input'))

Exemplo: toLower('John.Smith@Contoso.COM')john.smith@contoso.com

Important

toUpper() é sensível a maiúsculas minúsculas quando usado em comparações. Se usares toUpper(A) = B, certifica-te de que aplicas em ambos os lados. toUpper(A) = B falha se B for de caso misto.

2. Extrair substring (esquerda, direita, meio)

Cenário: Retira uma parte específica de um valor de texto. Escolhe os primeiros N caracteres, o último N ou um intervalo do meio.

Expressão:

  • Esquerda: substring(variables('text'), 0, 5)
  • Certo: substring(variables('text'), sub(length(variables('text')), 5), 5)
  • Mid: substring(variables('text'), 3, 4)

Exemplo: substring('Invoice-2026-0042', 8, 4)2026

Tip

O segundo parâmetro é o índice inicial (baseado em 0), o terceiro é o comprimento, não o índice final. substring('ABCDE', 1, 3) retorna BCD, não BC.

3. Substituir texto

Cenário: Limpar ou transformar os valores do texto. Remover caracteres, trocar delimitadores, corrigir a formatação.

Expressão: replace(variables('input'), 'old', 'new')

Exemplo: replace('2026/03/18', '/', '-')2026-03-18

Observação

replace() diferencia maiúsculas de minúsculas. replace('Hello', 'hello', 'Hi') Retornos Hello inalterados. Converte primeiro para um caso comum, se necessário.

4. Dividir a cadeia em array

Cenário: Dividir um valor delimitado (CSV, emails separados por ponto e vírgula) em itens individuais para looping.

Expressão: split(variables('input'), ',')

Exemplo: split('alice@contoso.com,bob@contoso.com,carol@contoso.com', ',')["alice@contoso.com","bob@contoso.com","carol@contoso.com"]

Tip

Os espaços após o delimitador são preservados. split('a, b, c', ',') retorna ["a"," b"," c"] com espaços à frente. Use trim() em cada item numa ação Select depois.

5. Concatenar com quebras de linha (para emails)

Cenário: Constrói um corpo de mensagens com várias linhas para notificações por email ou Teams.

Expressão: concat('Line 1', decodeUriComponent('%0A'), 'Line 2')

Exemplo: Use decodeUriComponent('%0A') para uma nova linha ou decodeUriComponent('%0D%0A') para quebras de linha ao estilo Windows.

Important

Usar \n expressões diretamente não produz uma quebra de linha. Produz os caracteres \nliterais . Use sempre a decodeUriComponent abordagem, ou use <br> se a saída for HTML.

6. Verificar se a cadeia contém texto

Cenário: Encaminhe um fluxo com base em se a linha de assunto, corpo do email ou campo contém uma palavra-chave.

Expressão: contains(toLower(triggerBody()?['subject']), 'urgent')

Exemplo: contains('Project Alpha Review', 'Alpha')true

Observação

contains() diferencia maiúsculas de minúsculas. Enrole sempre tanto o palheiro como a agulha para toLower() que não sejam sensíveis a maiúsculas minúsculas: contains(toLower(value), toLower(search)).

Data e hora

7. Obter data/hora atual num formato específico

Cenário: Carimbe um nome de ficheiro, entrada de registo ou email com a data e hora atuais.

Expressão: formatDateTime(utcNow(), 'yyyy-MM-dd HH:mm')

Exemplo: Retornos 2026-03-18 14:30 (UTC). Use convertTimeZone() para a hora local.

Tip

utcNow() é sempre o UTC. Para a hora local, encadeie com convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time', 'yyyy-MM-dd HH:mm').

8. Adicionar ou subtrair dias de uma data

Cenário: Calcule uma data de vencimento, expiração ou data de lembrete em relação a hoje.

Expressão: addDays(utcNow(), 7) ou addDays(utcNow(), -30)

Exemplo: Se hoje for 2026-03-18, addDays(utcNow(), 7) retorna 2026-03-25T...Z

Observação

addDays() também aceita valores fracionários, mas addHours() ou addMinutes() são mais claros para deslocamentos sub-dias. Não uses addDays(utcNow(), 0.5) quando queres addHours(utcNow(), 12)dizer .

9. Converter a cadeia para data (análise sintática)

Cenário: Um campo de texto contém um tipo 03/18/2026 de data e é necessário usá-lo nas funções de data.

Expressão: parseDateTime(variables('dateString'), 'en-US')

Exemplo: parseDateTime('03/18/2026', 'en-US') devolve um valor de data-hora adequado.

Important

Sem o parâmetro local, a análise depende das definições regionais do fluxo e pode trocar mês/dia. Especifique sempre o local explicitamente para evitar 03/04/2026 ser interpretado como 3 de abril em vez de 4 de março.

10. Obter um dia da semana

Cenário: Executar uma lógica diferente nos dias úteis e ao fim de semana, ou gerar um "relatório de segunda-feira".

Expressão: dayOfWeek(utcNow())

Exemplo: Retorna 0 para domingo, 1 para segunda-feira, ..., 6 para sábado.

Tip

Domingo é 0, não 7. Usar or(equals(dayOfWeek(...), 0), equals(dayOfWeek(...), 6)) para consultas ao fim de semana. Uma condição como dayOfWeek(utcNow()) > 5 apanhar o sábado mas falhar o domingo.

11. Calcular a diferença entre duas datas

Cenário: Determinar quantos dias decorreram entre a data de um pedido e a data de conclusão.

Expressão: div(sub(ticks(variables('endDate')), ticks(variables('startDate'))), 864000000000)

Exemplo: Se o início é 2026-03-01 e o fim é 2026-03-18, devolve 17.

Observação

Não há nenhuma função incorporada dateDiff() . Tens de usar a abordagem das carraças. O divisor 864000000000 converte carraças em dias. Durante horas, usa 36000000000; por minutos, usa 600000000.

12. Data de formatação para exibição

Cenário: Converter um valor de data-hora para um formato legível por humanos para emails ou relatórios.

Expressão: formatDateTime(variables('myDate'), 'MMMM dd, yyyy') ou formatDateTime(variables('myDate'), 'MM/dd/yyyy')

Exemplo: formatDateTime('2026-03-18T14:30:00Z', 'MMMM dd, yyyy')March 18, 2026

Important

MM são meses, mm são minutos. formatDateTime(value, 'mm/DD/yyyy') produz 30/18/2026 (minutos e dia) em vez de 03/18/2026. Use dd (minúscula) para o dia do mês.

Matrizes e coleções

13. Filtrar um array por condição

Cenário: Obtenha apenas os itens de um array que cumpram um critério específico.

Expressão: Usar a ação do array de filtros com: @item()?['Status'] é igual a 'Active'

Exemplo: Retornos de entrada [{Name:'A', Status:'Active'}, {Name:'B', Status:'Closed'}][{Name:'A', Status:'Active'}]

Observação

Não podes usar uma whereexpressão de filtro em linha ao estilo -. Use a ação Filter array (não uma expressão). Para filtragem baseada em expressões, use @equals(item()?['Status'], 'Active') no modo avançado do array de Filtros.

14. Obter o primeiro ou último item do array

Cenário: Recuperar o registo mais recente ou a primeira correspondência de uma lista.

Expressão: first(variables('myArray')) ou last(variables('myArray'))

Exemplo: first(body('Get_items')?['value']) devolve o primeiro item de uma consulta SharePoint.

Tip

first() num array vazio devolve null, não é um erro. Segue sempre com uma verificação nula: if(empty(variables('myArray')), null, first(variables('myArray'))).

15. Contar itens no array

Cenário: Verifique quantos resultados uma consulta devolveu, ou valide que uma lista tem itens suficientes.

Expressão: length(variables('myArray'))

Exemplo: length(body('Get_items')?['value']) devolve o número de itens de uma consulta SharePoint list.

Observação

length() funciona tanto em arrays como em cordas. length('hello') retornos 5 (número de caracteres). Certifica-te de que estás a passar um array, não uma corda que parece um array.

16. Criar uma cadeia separada por vírgulas a partir do array (join)

Cenário: Converter uma lista de nomes, emails ou IDs numa única cadeia delimitada para exibição ou chamada API.

Expressão: join(variables('myArray'), ', ')

Exemplo: join(createArray('Alice', 'Bob', 'Carol'), '; ')Alice; Bob; Carol

Tip

join() Funciona em conjuntos de cordas. Se o teu array contiver objetos, usa primeiro uma ação Select para extrair o campo que queres e depois junta-te ao resultado.

17. Verifique se o array contém um valor

Cenário: Determine se existe um item específico numa lista antes de avançar.

Expressão: contains(variables('myArray'), 'searchValue')

Exemplo: contains(createArray('North', 'South', 'East', 'West'), 'East')true

Observação

Para arrays de objetos, contains() verifica o valor total do objeto, não uma propriedade. Para verificar se algum objeto tem uma propriedade correspondente, use uma ação de array de filtro e depois verifique length() o resultado.

JSON e objetos

18. Analisar a cadeia JSON

Cenário: Uma ação HTTP ou um conector personalizado devolve uma string JSON com a qual precisa de trabalhar como dados estruturados.

Expressão: json(body('HTTP'))

Exemplo: json('{"name":"Alice","age":30}') devolve um objeto ao qual podes aceder com ?['name'].

Important

Não faças duas análises. Se a ação já devolve JSON analisado (a maioria das ações do conector faz), envolvê-la json() novamente causa um erro. Use json() apenas em respostas brutas de strings, não em saídas de ação que já sejam objetos.

19. Obter propriedade aninhada no JSON

Cenário: Aceder a um valor profundamente dentro de uma resposta JSON, por exemplo, response.data.items[0].name.

Expressão: body('HTTP')?['data']?['items']?[0]?['name']

Exemplo: Para {"data":{"items":[{"name":"Widget"}]}}, devolve Widget.

Important

Não te esqueças da ? (navegação segura). body('HTTP')['data']['items'] gera um erro se algum nível for nulo. Use sempre ?['key'] para atravessar em segurança: cada um ? retorna null em vez de falhar se o pai estiver em falta.

20. Criar objeto JSON a partir de valores

Cenário: Constrói um corpo de pedido para uma ação HTTP a partir de variáveis de fluxo e conteúdo dinâmico.

Expressão: json(concat('{"name":"', variables('name'), '","status":"', variables('status'), '"}'))

Exemplo: Com nome=Alice e estado=Active, devolve {"name":"Alice","status":"Active"}.

Tip

Se alguma variável contiver aspas ou caracteres especiais, o JSON estará malformado. Para construção robusta, use uma ação Compor com createObject('name', variables('name'), 'status', variables('status')) ou construa-a diretamente numa ação Compor.

21. Converter objeto em string

Cenário: Registar um objeto JSON num campo de texto, ou passar dados estruturados como um parâmetro de string.

Expressão: string(variables('myObject'))

Exemplo: string(json('{"a":1}')) retorna {"a":1} como uma corda.

Observação

string() num array ou objeto produz JSON compacto (sem pretty-printing). Não tem nenhum sistema incorporado prettyPrint(). Aceite JSON compacto ou construa texto formatado manualmente.

22. Manusear valores nulos ou vazios de forma segura

Cenário: Prevenir erros quando um campo pode estar nulo, vazio ou completamente ausente.

Expressão: coalesce(triggerBody()?['optionalField'], 'default value')

Exemplo: Se optionalField é nulo, devolve 'default value'. Se tiver um valor, devolve esse valor.

Important

coalesce() Só pegas null, não cordas vazias. Para cadeias vazias, combine-se com uma condição: if(empty(triggerBody()?['field']), 'default', triggerBody()?['field']). A empty() função retorna verdadeira tanto para a cadeia ''nula como para a vazia .

Números e matemática

23. Arredondar um número

Cenário: Mostrar uma percentagem ou valor de moeda com um número fixo de casas decimais.

Expressão: formatNumber(variables('value'), 'N2') (para exibição) ou div(mul(variables('value'), 100), 100) (para truncamento)

Exemplo: formatNumber(3.14159, 'N2') retorna 3.14 como uma corda.

Observação

formatNumber() devolve uma corda, não um número. Se precisares de fazer mais cálculos sobre o valor arredondado, analisa-o novamente: float(formatNumber(variables('value'), 'N2')).

24. Converter a cadeia em número (e vice-versa)

Cenário: Um formulário ou email dá-te um número como texto, e tens de fazer contas com ele.

Expressão: int(variables('textNumber')) ou float(variables('textNumber')) e string(variables('numericValue'))

Exemplo: int('42') devolve 42. float('3.14') retorna 3.14. string(42) retorna '42'.

Important

int() numa cadeia decimal gera um erro; Não trunca. Se uma variável puder conter um decimal, use float() primeiro: int(float(variables('input'))). Com valores constantes como int('3.14'), o erro é apanhado no tempo de gravação (InvalidTemplate), não em tempo de execução.

25. Calcular a percentagem

Cenário: Mostre qual é a fração de um valor de outro (por exemplo, taxa de conclusão, utilização).

Expressão: mul(div(float(variables('part')), float(variables('total'))), 100)

Exemplo: Com parte=75 e total=200, devolve 37.5.

Important

A divisão inteira trunca. div(75, 200) retorna 0 porque ambos são inteiros. Converta sempre para float primeiro: div(float(75), float(200)) retorna 0.375.

Condicionais e lógica

26. Se/então/senão numa expressão

Cenário: Devolver valores diferentes com base numa condição, sem adicionar uma ação de Condição ao fluxo.

Expressão: if(equals(variables('status'), 'Approved'), 'Proceed', 'Wait')

Exemplo: Se o estado for Approved, devolve Proceed. Caso contrário, retorna Wait.

Observação

A if() função não suporta >operadores , < diretamente. Use funções auxiliares: if(greater(variables('count'), 10), 'Over', 'Under'). Comparações disponíveis: equals(), greater(), less(), greaterOrEquals(), lessOrEquals().

27. Coalesce (primeiro valor não nulo)

Cenário: Experimente vários campos e use o primeiro que tenha um valor, por exemplo, nome preferido, nome de exibição, email.

Expressão: coalesce(triggerBody()?['preferredName'], triggerBody()?['displayName'], triggerBody()?['email'], 'Unknown')

Exemplo: Se preferredName for nulo e displayName for 'Alice', devolve Alice.

Tip

coalesce() Salta null mas não cordas ''vazias. Uma cadeia vazia é um valor válido e não nulo. Combine com um ajudante se as cadeias vazias também devem ser saltadas: coalesce(if(empty(A), null, A), if(empty(B), null, B), 'default').

28. Verifique se o valor é nulo ou vazio

Cenário: Validar que um campo exigido tem um valor utilizável antes do processamento.

Expressão: empty(variables('input'))

Exemplo: empty('') devolve true. empty(null) retorna true. empty('hello') retorna false.

Important

empty() Não funciona com números. empty(0) lança um erro. Para números, use equals(variables('num'), null) ou verifique primeiro o tipo.

29. Comparar datas (a data A é depois da data B?)

Cenário: Verifique se um prazo já passou, ou se um evento aconteceu antes do outro.

Expressão: greater(ticks(variables('dateA')), ticks(variables('dateB')))

Exemplo: greater(ticks('2026-03-18'), ticks('2026-03-15')) declarações true (18 de março é depois de 15 de março).

Important

Comparar cadeias de datas diretamente funciona greater('2026-03-18', '2026-03-15') para o formato ISO (YYYY-MM-DD) porque ordena lexicograficamente. Mas falha noutros formatos. greater('03/18/2026', '12/01/2025') retorna false porque 0<1. Usa ticks() sempre para comparar datas de forma fiável.

30. Lógica booleana (E/OU em condições)

Cenário: Combinar múltiplas condições numa única expressão, por exemplo, aprovado E valor > 1000.

Expressão: and(equals(variables('status'), 'Approved'), greater(variables('amount'), 1000))

Exemplo: Retorna true apenas se o estatuto for Approved igual e o montante for superior a 1000.

Observação

Não se pode encadear and/or com &&/|| sintaxe. Usa sempre a forma de função. Para lógica complexa, aninha-os: or(and(A, B), and(C, D)). A legibilidade degrada-se com o ninhamento profundo. Considere usar uma ação de Condição com várias linhas em vez disso.

Cartão de referência rápida

Tarefa Expressão
Maiúsculas toUpper(value)
Minúsculas toLower(value)
Substring substring(value, start, length)
Substituir replace(value, old, new)
Dividida split(value, delimiter)
Contém (texto) contains(toLower(value), toLower(search))
Agora (formatado) formatDateTime(utcNow(), 'yyyy-MM-dd')
Adicionar dias addDays(date, count)
Dia da semana dayOfWeek(date) (0=Sun)
Dias entre div(sub(ticks(end), ticks(start)), 864000000000)
Primeiro item first(array)
Último ponto last(array)
Contagem length(array)
Join join(array, delimiter)
Analisar JSON json(stringValue)
Propriedade segura object?['key']
Fallback nulo coalesce(value, default)
Está vazio empty(value)
If/else if(condition, trueVal, falseVal)
Comparar datas greater(ticks(dateA), ticks(dateB))
Int a partir da cadeia int(stringValue)
Flutuação a partir da corda float(stringValue)
AND and(condA, condB)
OR or(condA, condB)

Nota: O autor criou este artigo com a ajuda da IA. Mais informações