Libro de receitas de expresión para fluxos de nubes

Este artigo explica 30 patróns de expresión listos para usar para escenarios comúns nos fluxos na nube de Power Automate. Podes copiar, adaptar e usar estes patróns nos teus fluxos.

Nota

Estas expresións funcionan en todos os niveis de licenza de fluxo en nube de Power Automate. Atopa a referencia completa da función nas funcións de expresión do fluxo de traballo.

Operacións de texto

1. Converter a maiúsculas ou minúsculas

Escenario: Normalizar a entrada do usuario antes de comparar ou almacenar.

Expresión: toUpper(variables('input')) ou toLower(variables('input'))

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

Importante

toUpper() é sensible a maiúsculas minúsculas cando se usa en comparacións. Se o usas toUpper(A) = B, asegúrate de aplicalo en ambos os lados. toUpper(A) = B falla se B é un caso mixto.

2. Extraer subcadea (esquerda, dereita, medio)

Escenario: Extraer unha parte específica dun valor de texto. Colle os primeiros N caracteres, o último N ou un rango desde o medio.

Expresión:

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

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

Suxestión

O segundo parámetro é o índice inicial (baseado en 0), o terceiro é a lonxitude, non o índice final. substring('ABCDE', 1, 3) devolve BCD, non BC.

3. Substituír texto

Escenario: Limpar ou transformar os valores do texto. Elimina caracteres, cambia delimitadores, arranxa o formato.

Expresión: replace(variables('input'), 'old', 'new')

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

Nota

replace() é sensible a maiúsculas minúsculas. replace('Hello', 'hello', 'Hi') Retornos Hello sen cambios. Converte primeiro a un caso común se é necesario.

4. Dividir a cadea en matriz

Escenario: Dividir un valor delimitado (CSV, correos electrónicos separados por punto e coma) en elementos individuais para repetir en bucle.

Expresión: split(variables('input'), ',')

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

Suxestión

Os espazos posteriores ao delimitador consérvanse. split('a, b, c', ',') devolve ["a"," b"," c"] con espazos principais. Úsase trim() en cada obxecto nunha acción de Selección despois.

5. Concatenar con saltos de liña (para correos electrónicos)

Escenario: Constrúe un corpo de mensaxes multiliña para notificacións de correo electrónico ou Teams.

Expresión: concat('Line 1', decodeUriComponent('%0A'), 'Line 2')

Exemplo: Usa decodeUriComponent('%0A') para unha nova liña ou decodeUriComponent('%0D%0A') para saltos de liña ao estilo Windows.

Importante

Usar \n expresións directamente non produce un salto de liña. Produce os caracteres \nliterais . Sempre usa o decodeUriComponent enfoque, ou usa <br> se a saída é HTML.

6. Comproba se a cadea contén texto

Escenario: Enruta un fluxo segundo se unha liña de asunto, corpo do correo electrónico ou campo contén unha palabra clave.

Expresión: contains(toLower(triggerBody()?['subject']), 'urgent')

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

Nota

contains() é sensible a maiúsculas minúsculas. Sempre envolve tanto o pallo como a agulla para toLower() que non se identifiquen con minúsculas e minúsculas: contains(toLower(value), toLower(search)).

Data e hora

7. Obtén a data/hora actual nun formato específico

Escenario: Marca un nome de ficheiro, entrada de rexistro ou correo electrónico coa data e hora actuais.

Expresión: formatDateTime(utcNow(), 'yyyy-MM-dd HH:mm')

Exemplo: Devolucións 2026-03-18 14:30 (UTC). Usa convertTimeZone() para a hora local.

Suxestión

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

8. Engadir ou restar días dunha data

Escenario: Calcular unha data de vencemento, caducidade ou data de recordatorio respecto a hoxe.

Expresión: addDays(utcNow(), 7) ou addDays(utcNow(), -30)

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

Nota

addDays() Tamén acepta valores fraccionarios, pero addHours() ou addMinutes() son máis claros para desprazamentos sub-días. Non uses addDays(utcNow(), 0.5) cando queres dicir addHours(utcNow(), 12).

9. Converter cadea a data (análise sintáctica)

Escenario: Un campo de texto contén un tipo 03/18/2026 de data e necesitas usalo nas funcións de data.

Expresión: parseDateTime(variables('dateString'), 'en-US')

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

Importante

Sen o parámetro local, a análise depende das configuracións rexionais do fluxo e pode cambiar mes/día. Especifica sempre o lugar explicitamente para evitar 03/04/2026 que se interprete como o 3 de abril fronte ao 4 de marzo.

10. Conseguir o día da semana

Escenario: Executar unha lóxica diferente entre semana fronte aos fins de semana, ou xerar un "informe do luns".

Expresión: dayOfWeek(utcNow())

Exemplo: Retorna 0 para o domingo, 1 para o luns, ..., 6 para o sábado.

Suxestión

O domingo é 0, non 7. Utilízao or(equals(dayOfWeek(...), 0), equals(dayOfWeek(...), 6)) para comprobacións de fin de semana. Unha condición como dayOfWeek(utcNow()) > 5 que se atrapa o sábado pero perde o domingo.

11. Calcular a diferenza entre dúas datas

Escenario: Determinar cantos días pasaron entre a data da solicitude e a data de finalización.

Expresión: div(sub(ticks(variables('endDate')), ticks(variables('startDate'))), 864000000000)

Exemplo: Se o inicio é 2026-03-01 e o final é 2026-03-18, devolve 17.

Nota

Non ten función incorporada dateDiff() . Tes que usar o método das garrapatas. O divisor 864000000000 converte as marcas en días. Durante horas, usa 36000000000; durante minutos, usa 600000000.

12. Data de formato para a visualización

Escenario: Converter un valor de data-hora a un formato lexible para correos electrónicos ou informes.

Expresión: formatDateTime(variables('myDate'), 'MMMM dd, yyyy') ou formatDateTime(variables('myDate'), 'MM/dd/yyyy')

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

Importante

MM son meses, mm son minutos. formatDateTime(value, 'mm/DD/yyyy') produce 30/18/2026 (minutos e día) en lugar de 03/18/2026. Usa dd (minúscula) para o día do mes.

Matrices e coleccións

13. Filtrar un array por condición

Escenario: Obtén só os elementos dun array que cumpran un criterio específico.

Expresión: Usar a acción do array de filtros con: @item()?['Status'] é igual a 'Active'

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

Nota

Non podes usar unha whereexpresión de filtro estilo -en liña. Usa a acción do array de filtros (non unha expresión). Para filtrado baseado en expresións, úsase @equals(item()?['Status'], 'Active') no modo avanzado do array de filtros.

14. Obter o primeiro ou último obxecto do array

Escenario: Recuperar o rexistro máis recente ou a primeira coincidencia dunha lista.

Expresión: first(variables('myArray')) ou last(variables('myArray'))

Exemplo: first(body('Get_items')?['value']) devolve o primeiro elemento dunha consulta SharePoint.

Suxestión

first() nun array baleiro devolve null, non un erro. Segue sempre cunha comprobación nula: if(empty(variables('myArray')), null, first(variables('myArray'))).

15. Contar os elementos no array

Escenario: Comproba cantos resultados devolveu unha consulta, ou valida que unha lista teña suficientes elementos.

Expresión: length(variables('myArray'))

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

Nota

length() Funciona tanto en matrices como en cadeas. length('hello') devolucións 5 (número de caracteres). Asegúrate de pasar un array, non unha cadea que pareza un array.

16. Crear cadea separada por comas a partir do array (unión)

Escenario: Converter unha lista de nomes, correos electrónicos ou IDs nunha única cadea delimitada para visualización ou chamada API.

Expresión: join(variables('myArray'), ', ')

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

Suxestión

join() Funciona con conxuntos de cordas. Se o teu array contén obxectos, usa primeiro unha acción Select para extraer o campo que queres e logo únete ao resultado.

17. Comproba se o array contén un valor

Escenario: Determina se existe un elemento específico nunha lista antes de continuar.

Expresión: contains(variables('myArray'), 'searchValue')

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

Nota

Para matrices de obxectos, contains() comproba o obxecto completo, non o valor dunha propiedade. Para comprobar se algún obxecto ten unha propiedade de coincidencia, usa unha acción de matriz de filtro e logo comproba length() o resultado.

JSON e obxectos

18. Analizar a cadea JSON

Escenario: Unha acción HTTP ou un conector personalizado devolve unha cadea JSON coa que necesitas traballar como datos estruturados.

Expresión: json(body('HTTP'))

Exemplo: json('{"name":"Alice","age":30}') devolve un obxecto ao que podes acceder con ?['name'].

Importante

Non fagas dúas análises. Se a acción xa devolve JSON analizado (a maioría das accións do conector), envolvela json() de novo causa un erro. Usa json() só en respostas de cadeas en bruto, non en saídas de acción que xa son obxectos.

19. Obtén propiedade anidada de JSON

Escenario: Acceder a un valor profundo dentro dunha resposta JSON, por exemplo, response.data.items[0].name.

Expresión: body('HTTP')?['data']?['items']?[0]?['name']

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

Importante

Non esquezas a ? navegación segura. body('HTTP')['data']['items'] lanza un erro se calquera nivel é nulo. Sempre usar ?['key'] para atravesar con seguridade: cada ? un devolve nulo en lugar de fallar se falta o pai.

20. Crear obxecto JSON a partir de valores

Escenario: Constrúe un corpo de solicitude para unha acción HTTP a partir de variables de fluxo e contido dinámico.

Expresión: json(concat('{"name":"', variables('name'), '","status":"', variables('status'), '"}'))

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

Suxestión

Se algunha variable contén comiñas ou caracteres especiais, o JSON estará malformado. Para unha construción robusta, usa unha acción Compose con createObject('name', variables('name'), 'status', variables('status')) ou constrúea directamente nunha acción Compose.

21. Converter obxecto en cadea

Escenario: Rexistrar un obxecto JSON nun campo de texto, ou pasar datos estruturados como parámetro de cadea.

Expresión: string(variables('myObject'))

Exemplo: string(json('{"a":1}')) devolve {"a":1} como cadea.

Nota

string() nun array ou obxecto produce JSON compacto (sen pretty-printing). Non ten ningún dispositivo incorporado prettyPrint(). Aceptar JSON compacto ou compilar texto formatado manualmente.

22. Manexar valores nulos ou baleiros de forma segura

Escenario: Evitar erros cando un campo poida estar nulo, baleiro ou completamente ausente.

Expresión: coalesce(triggerBody()?['optionalField'], 'default value')

Exemplo: Se optionalField é nulo, devolve 'default value'. Se ten un valor, devolve ese valor.

Importante

coalesce() Só asas null, non cordas baleiras. Para cadeas baleiras, combínase cunha condición: if(empty(triggerBody()?['field']), 'default', triggerBody()?['field']). A empty() función devolve verdadeira tanto para a cadea ''nula como para a baleira.

Números e matemáticas

23. Redondear un número

Escenario: Mostrar un valor porcentual ou de moeda cun número fixo de decimais.

Expresión: formatNumber(variables('value'), 'N2') (para display) ou div(mul(variables('value'), 100), 100) (para truncamento)

Exemplo: formatNumber(3.14159, 'N2') devolve 3.14 como cadea.

Nota

formatNumber() devolve unha cadea, non un número. Se necesitas facer máis cálculos sobre o valor redondeado, analiza de novo: float(formatNumber(variables('value'), 'N2')).

24. Converter cadea en número (e viceversa)

Escenario: Un formulario ou correo electrónico dáche un número como texto, e necesitas facer cálculos con el.

Expresión: int(variables('textNumber')) ou float(variables('textNumber')) e string(variables('numericValue'))

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

Importante

int() nunha cadea decimal aparece un erro; Non se trunca. Se unha variable pode conter un decimal, use float() primeiro: int(float(variables('input'))). Con valores constantes como int('3.14'), o erro é detectado no tempo de gardado (InvalidTemplate), non en tempo de execución.

25. Calcular porcentaxe

Escenario: Mostra que fracción é un valor doutro (por exemplo, taxa de completación, utilización).

Expresión: mul(div(float(variables('part')), float(variables('total'))), 100)

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

Importante

A división enteira trunca. div(75, 200) retorna 0 porque ambos son enteiros. Sempre converter a float primeiro: div(float(75), float(200)) devolve 0.375.

Condicionais e lóxica

26. Se/entón/se non nunha expresión

Escenario: Devolve valores diferentes baseados nunha condición, sen engadir unha acción de Condición ao fluxo.

Expresión: if(equals(variables('status'), 'Approved'), 'Proceed', 'Wait')

Exemplo: Se o estado é Approved, devolve Proceed. Se non, devolve Wait.

Nota

A if() función non soporta >operadores , < directamente. Usar funcións auxiliares: if(greater(variables('count'), 10), 'Over', 'Under'). Comparacións dispoñibles: equals(), greater(), less(), greaterOrEquals(), lessOrEquals().

27. Coalesce (primeiro valor non nulo)

Escenario: Proba varios campos e usa o primeiro que teña un valor, por exemplo, nome preferido, nome para mostrar, correo electrónico.

Expresión: coalesce(triggerBody()?['preferredName'], triggerBody()?['displayName'], triggerBody()?['email'], 'Unknown')

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

Suxestión

coalesce() salta null pero non cordas ''baleiras. Unha cadea baleira é un valor válido non nulo. Combina cun axudante se tamén se deben saltar cadeas baleiras: coalesce(if(empty(A), null, A), if(empty(B), null, B), 'default').

28. Comproba se o valor é nulo ou baleiro

Escenario: Validar que un campo requirido ten un valor útil antes de procesalo.

Expresión: empty(variables('input'))

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

Importante

empty() Non funciona cos números. empty(0) Lanza un erro. Para números, usa equals(variables('num'), null) ou comproba primeiro o tipo.

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

Escenario: Comproba se pasou un prazo ou se un evento ocorreu antes que outro.

Expresión: greater(ticks(variables('dateA')), ticks(variables('dateB')))

Exemplo: greater(ticks('2026-03-18'), ticks('2026-03-15')) devolucións true (o 18 de marzo é despois do 15 de marzo).

Importante

Comparar cadeas de datas directamente greater('2026-03-18', '2026-03-15') funciona para o formato ISO (YYYY-MM-DD) porque ordena lexicograficamente. Pero falla noutros formatos. greater('03/18/2026', '12/01/2025') retorna false porque 0<1. Sempre usa ticks() para unha comparación fiable de datas.

30. Lóxica booleana (E/OU en condicións)

Escenario: Combinar múltiples condicións nunha única expresión, por exemplo, aprobado E importe > 1000.

Expresión: and(equals(variables('status'), 'Approved'), greater(variables('amount'), 1000))

Exemplo: Retorna true só se o estado é Approved igual e a cantidade é maior que 1000.

Nota

Non podes encadear and/or coa &&/|| sintaxe. Sempre usa a forma de función. Para lóxica complexa, anidádeos: or(and(A, B), and(C, D)). A lexibilidade degrada co anidamento profundo. Considera usar unha acción de Condición con varias filas en vez diso.

Tarxeta de referencia rápida

Tarefa Expression
Maiúsculas toUpper(value)
Minúsculas toLower(value)
Subcadea substring(value, start, length)
Replace replace(value, old, new)
Split split(value, delimiter)
Contén (texto) contains(toLower(value), toLower(search))
Agora (formatado) formatDateTime(utcNow(), 'yyyy-MM-dd')
Engade días addDays(date, count)
Día da semana dayOfWeek(date) (0=Sol)
Días entre medias div(sub(ticks(end), ticks(start)), 864000000000)
Primeiro punto first(array)
Último punto last(array)
Count length(array)
Unirse join(array, delimiter)
Analizar JSON json(stringValue)
Propiedade segura object?['key']
Respaldo nulo coalesce(value, default)
Está baleiro empty(value)
Se/se non if(condition, trueVal, falseVal)
Comparar datas greater(ticks(dateA), ticks(dateB))
Int desde a cadea int(stringValue)
Flotación desde a corda float(stringValue)
e and(condA, condB)
OU or(condA, condB)

Nota: O autor creou este artigo coa axuda da IA. Máis información