Libro de recetas de expresiones para flujos en la nube

En este artículo se explican 30 patrones de expresiones listos para usar para escenarios comunes en Power Automate flujos de nube. Puede copiar, adaptar y usar estos patrones en los flujos.

Nota:

Estas expresiones funcionan en todos los niveles de licencia de flujo de nube Power Automate. Busque la referencia de función completa en las funciones de expresión de flujo de trabajo.

Operaciones de texto

1. Convertir en mayúsculas o minúsculas

Escenario: normalice la entrada del usuario antes de la comparación o el almacenamiento.

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

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

Importante

toUpper() distingue mayúsculas de minúsculas cuando se usa en comparaciones. Si usa toUpper(A) = B, asegúrese de aplicarlo a ambos lados. toUpper(A) = B produce un error si B es de mayúsculas y minúsculas mixtas.

2. Extraer subcadena (izquierda, derecha, media)

Escenario: extraiga una parte específica de un valor de texto. Obtiene los primeros caracteres N, el último N o un intervalo desde el medio.

Expresión:

  • Izquierda: substring(variables('text'), 0, 5)
  • Correcto: substring(variables('text'), sub(length(variables('text')), 5), 5)
  • Mediados: substring(variables('text'), 3, 4)

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

Sugerencia

El segundo parámetro es el índice de inicio (basado en 0), el tercero es la longitud, no el índice final. substring('ABCDE', 1, 3) devuelve BCD, no BC.

3. Reemplazar texto

Escenario: Limpieza o transformación de valores de texto. Quite caracteres, delimitadores de intercambio y corrija el formato.

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

Ejemplo: replace('2026/03/18', '/', '-') devuelve 2026-03-18

Nota:

replace() distingue mayúsculas de minúsculas. replace('Hello', 'hello', 'Hi') devuelve Hello sin cambios. Convierta primero en un caso común si es necesario.

4. Dividir cadena en matriz

Escenario: interrumpa un valor delimitado (CSV, correos electrónicos separados por punto y coma) en elementos individuales para bucles.

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

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

Sugerencia

Espacios después de conservar el delimitador. split('a, b, c', ',') devuelve ["a"," b"," c"] con espacios iniciales. Después, use trim() en cada elemento de una acción Seleccionar.

5. Concatenar con saltos de línea (para correos electrónicos)

Escenario: cree un cuerpo de mensaje de varias líneas para las notificaciones por correo electrónico o Teams.

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

Example: use decodeUriComponent('%0A') para una línea nueva o decodeUriComponent('%0D%0A') para saltos de línea de estilo Windows.

Importante

El uso \n directo en expresiones no genera un salto de línea. Genera los caracteres literales \n. Use siempre el decodeUriComponent enfoque o use <br> si la salida es HTML.

6. Compruebe si la cadena contiene texto

Escenario: enruta un flujo en función de si una línea de asunto, un cuerpo de correo electrónico o un campo contiene una palabra clave.

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

Ejemplo: contains('Project Alpha Review', 'Alpha') devuelve true

Nota:

contains() distingue mayúsculas de minúsculas. Encapsula siempre la pila de paja y la aguja en toLower() para buscar coincidencias que no distinguen mayúsculas de minúsculas: contains(toLower(value), toLower(search)).

Fecha y hora

7. Obtener la fecha y hora actuales en un formato específico

Escenario: marca un nombre de archivo, una entrada de registro o un correo electrónico con la fecha y hora actuales.

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

Ejemplo: Devuelve 2026-03-18 14:30 (UTC). Use convertTimeZone() para la hora local.

Sugerencia

utcNow() siempre es UTC. Para la hora local, encadene con convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time', 'yyyy-MM-dd HH:mm').

8. Agregar o restar días de una fecha

Escenario: calcule una fecha de vencimiento, una expiración o una fecha de recordatorio relativa a hoy.

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

Ejemplo: Si hoy es 2026-03-18, addDays(utcNow(), 7) devuelve 2026-03-25T...Z

Nota:

addDays() también acepta valores fraccionarios, pero addHours() o addMinutes() son más claros para desplazamientos de subdireccionales. No use addDays(utcNow(), 0.5) cuando se refiere a addHours(utcNow(), 12).

9. Convertir cadena a fecha (análisis)

Escenario: un campo de texto contiene una fecha similar 03/18/2026 a y debe usarla en funciones de fecha.

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

Ejemplo: parseDateTime('03/18/2026', 'en-US') devuelve un valor datetime adecuado.

Importante

Sin el parámetro de configuración regional, el análisis depende de la configuración regional del flujo y puede intercambiar mes/día. Especifique siempre la configuración regional explícitamente para evitar 03/04/2026 interpretarse como 3 de abril frente al 4 de marzo.

10. Obtener día de la semana

Escenario: ejecute una lógica diferente en días laborables frente a fines de semana o genere un "informe de lunes".

Expresión: dayOfWeek(utcNow())

Ejemplo: devuelve 0 para domingo, 1 para lunes, ..., 6 para sábado.

Sugerencia

El domingo es 0, no 7. Use or(equals(dayOfWeek(...), 0), equals(dayOfWeek(...), 6)) para las comprobaciones de fin de semana. Una condición como dayOfWeek(utcNow()) > 5 captura el sábado, pero se pierde el domingo.

11. Calcular la diferencia entre dos fechas

Escenario: determine cuántos días transcurrió entre una fecha de solicitud y una fecha de finalización.

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

Ejemplo: si start es 2026-03-01 y end es 2026-03-18, devuelve 17.

Nota:

No hay ninguna función integrada dateDiff() . Debe usar el enfoque de tics. El divisor 864000000000 convierte tics en días. Para horas, use 36000000000; para minutos, use 600000000.

12. Fecha de formato para mostrar

Escenario: convierta un valor datetime en un formato legible para correos electrónicos o informes.

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

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

Importante

MM es meses, mm es minutos. formatDateTime(value, 'mm/DD/yyyy') produce 30/18/2026 (minutos y día) en lugar de 03/18/2026. Use dd (minúsculas) para el día del mes.

Matrices y colecciones

13. Filtrar una matriz por condición

Escenario: obtenga solo los elementos de una matriz que coincidan con un criterio específico.

Expresión: use la acción Filtrar matriz con: @item()?['Status'] es igual a 'Active'

Ejemplo: Devolución de entrada [{Name:'A', Status:'Active'}, {Name:'B', Status:'Closed'}][{Name:'A', Status:'Active'}]

Nota:

No se puede usar una whereexpresión de filtro de estilo insertada. Use la acción Filtrar matriz (no una expresión). Para el filtrado basado en expresiones, use @equals(item()?['Status'], 'Active') en el modo avanzado de la matriz Filter.

14. Obtener el primer o último elemento de la matriz

Escenario: recupere el registro más reciente o la primera coincidencia de una lista.

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

Example: first(body('Get_items')?['value']) devuelve el primer elemento de una consulta de SharePoint.

Sugerencia

first() en una matriz vacía devuelve null, no un error. Siga siempre con una comprobación nula: if(empty(variables('myArray')), null, first(variables('myArray'))).

15. Recuento de elementos en la matriz

Escenario: compruebe cuántos resultados devuelve una consulta o valide que una lista tenga suficientes elementos.

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

Example: length(body('Get_items')?['value']) devuelve el número de elementos de una consulta de SharePoint list.

Nota:

length() funciona en matrices y cadenas. length('hello') devuelve 5 (recuento de caracteres). Asegúrese de que está pasando una matriz, no una cadena que tenga un aspecto similar a una matriz.

16. Crear una cadena separada por comas de la matriz (combinación)

Escenario: convierta una lista de nombres, correos electrónicos o identificadores en una sola cadena delimitada para mostrar o una llamada API.

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

Ejemplo: join(createArray('Alice', 'Bob', 'Carol'), '; ') devuelve Alice; Bob; Carol

Sugerencia

join() funciona en matrices de cadenas. Si la matriz contiene objetos, use primero una acción Seleccionar para extraer el campo que desee y, a continuación, una el resultado.

17. Compruebe si la matriz contiene un valor

Escenario: determine si existe un elemento específico en una lista antes de continuar.

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

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

Nota:

En el caso de las matrices de objetos, contains() comprueba si todo el objeto no es un valor de propiedad. Para comprobar si algún objeto tiene una propiedad coincidente, use una acción Filtrar matriz y, a continuación, compruebe length() el resultado.

JSON y objetos

18. Análisis de la cadena JSON

Escenario: una acción HTTP o un conector personalizado devuelve una cadena JSON con la que debe trabajar como datos estructurados.

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

Ejemplo: json('{"name":"Alice","age":30}') devuelve un objeto al que puede acceder con ?['name'].

Importante

No analices dos veces. Si la acción ya devuelve JSON analizado (la mayoría de las acciones del conector lo hacen), encapsularlo de json() nuevo produce un error. Use json() solo en las respuestas de cadena sin formato, no en las salidas de acción que ya son objetos.

19. Obtención de la propiedad anidada de JSON

Escenario: acceso a un valor profundo dentro de una respuesta JSON, por ejemplo, response.data.items[0].name.

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

Ejemplo: para {"data":{"items":[{"name":"Widget"}]}}, devuelve Widget.

Importante

No olvide el ? (navegación segura). body('HTTP')['data']['items'] produce un error si algún nivel es NULL. ?['key'] Use siempre para atravesar de forma segura: cada uno ? devuelve null en lugar de generar un error si falta el elemento primario.

20. Creación de un objeto JSON a partir de valores

Escenario: cree un cuerpo de solicitud para una acción HTTP a partir de variables de flujo y contenido dinámico.

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

Ejemplo: Con name=Alice y status=Active, devuelve {"name":"Alice","status":"Active"}.

Sugerencia

Si alguna variable contiene comillas o caracteres especiales, el json tendrá un formato incorrecto. Para una construcción sólida, use una acción Compose con createObject('name', variables('name'), 'status', variables('status')) o cártela directamente en una acción Compose.

21. Convertir objeto en cadena

Escenario: registre un objeto JSON en un campo de texto o pase datos estructurados como parámetro de cadena.

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

Ejemplo: string(json('{"a":1}')) devuelve {"a":1} como una cadena.

Nota:

string() en una matriz o objeto genera JSON compacto (sin impresión bonita). No hay ningún elemento integrado prettyPrint(). Acepte manualmente el formato JSON compacto o el texto con formato de compilación.

22. Controlar valores null o vacíos de forma segura

Escenario: evite errores cuando un campo puede ser null, vacío o que falte por completo.

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

Ejemplo: si optionalField es null, devuelve 'default value'. Si tiene un valor, devuelve ese valor.

Importante

coalesce() solo controla null, no cadenas vacías. Para cadenas vacías, combine con una condición: if(empty(triggerBody()?['field']), 'default', triggerBody()?['field']). La empty() función devuelve true para la cadena ''nula y vacía .

Números y matemáticas

23. Redondeo de un número

Escenario: muestra un porcentaje o un valor de moneda con un número fijo de posiciones decimales.

Expresión: formatNumber(variables('value'), 'N2') (para mostrar) o div(mul(variables('value'), 100), 100) (para truncamiento)

Ejemplo: formatNumber(3.14159, 'N2') devuelve 3.14 como una cadena.

Nota:

formatNumber() devuelve una cadena, no un número. Si necesita realizar más cálculos matemáticos en el valor redondeado, anólelo de nuevo: float(formatNumber(variables('value'), 'N2')).

24. Convertir cadena en número (y atrás)

Escenario: un formulario o correo electrónico le proporciona un número como texto y debe hacer matemáticas con él.

Expresión: int(variables('textNumber')) o y float(variables('textNumber'))string(variables('numericValue'))

Ejemplo: int('42') devuelve 42. float('3.14') devuelve 3.14. string(42) devuelve '42'.

Importante

int() en una cadena decimal produce un error; no se trunca. Si una variable puede contener un decimal, use float() primero: int(float(variables('input'))). Con valores constantes como int('3.14'), el error se detecta en tiempo de ahorro (InvalidTemplate), no en tiempo de ejecución.

25. Calcular porcentaje

Escenario: muestra qué fracción es un valor de otro (por ejemplo, tasa de finalización, uso).

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

Ejemplo: Con part=75 y total=200, devuelve 37.5.

Importante

La división de enteros se trunca. div(75, 200) devuelve 0 porque ambos son enteros. Convierta siempre en float en primer lugar: div(float(75), float(200)) devuelve 0.375.

Condicionales y lógica

26. If/then/else en una expresión

Escenario: devuelve valores diferentes en función de una condición, sin agregar una acción Condición al flujo.

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

Ejemplo: si el estado es Approved, devuelve Proceed. De lo contrario, devuelve Wait.

Nota:

La if() función no admite >los operadores , < directamente. Use funciones auxiliares: if(greater(variables('count'), 10), 'Over', 'Under'). Comparaciones disponibles: equals(), greater(), less(), greaterOrEquals(), . lessOrEquals()

27. Coalesce (primer valor distinto de NULL)

Escenario: pruebe varios campos y use el primero que tenga un valor, por ejemplo, nombre preferido, nombre para mostrar, correo electrónico.

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

Ejemplo: si preferredName es null y displayName es 'Alice', devuelve Alice.

Sugerencia

coalesce() null omite pero no las cadenas vacías ''. Una cadena vacía es un valor no NULL válido. Combine con un asistente si también se deben omitir cadenas vacías: coalesce(if(empty(A), null, A), if(empty(B), null, B), 'default').

28. Compruebe si el valor es null o está vacío

Escenario: valide que un campo obligatorio tenga un valor utilizable antes del procesamiento.

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

Ejemplo: empty('') devuelve true. empty(null) devuelve true. empty('hello') devuelve false.

Importante

empty() no funciona en números. empty(0) produce un error. En el caso de los números, use equals(variables('num'), null) o compruebe primero el tipo.

29. Comparar fechas (es la fecha A después de la fecha B?)

Escenario: compruebe si se ha superado una fecha límite o si se ha producido un evento antes de otro.

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

Ejemplo: greater(ticks('2026-03-18'), ticks('2026-03-15')) devuelve true (el 18 de marzo es posterior al 15 de marzo).

Importante

Comparar cadenas de fecha directamente con greater('2026-03-18', '2026-03-15') sucede que funcionan con el formato ISO (AAAA-MM-DD) porque ordena lexicográficamente. Pero se produce un error en otros formatos. greater('03/18/2026', '12/01/2025') devuelve false porque 0<1. ticks() Use siempre para la comparación de fechas confiable.

30. Lógica booleana (AND/OR en condiciones)

Escenario: combine varias condiciones en una sola expresión, por ejemplo, la cantidad > AND aprobada 1000.

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

Ejemplo: devuelve true solo si el estado es igual Approved a y la cantidad es mayor que 1000.

Nota:

No se puede encadenar and/or con &&/|| sintaxis. Use siempre el formulario de función. Para una lógica compleja, anidarlas: or(and(A, B), and(C, D)). La legibilidad se degrada con anidamiento profundo. Considere la posibilidad de usar una acción Condición con varias filas en su lugar.

Tarjeta de referencia rápida

Tarea Expresión
Mayúsculas toUpper(value)
Minúsculas toLower(value)
Subcadena substring(value, start, length)
Reemplazar replace(value, old, new)
Dividir split(value, delimiter)
Contiene (texto) contains(toLower(value), toLower(search))
Ahora (con formato) formatDateTime(utcNow(), 'yyyy-MM-dd')
Agregar días addDays(date, count)
Día de la semana dayOfWeek(date) (0=Sol)
Días entre div(sub(ticks(end), ticks(start)), 864000000000)
Primer elemento first(array)
Último elemento last(array)
Total length(array)
Unirse join(array, delimiter)
Analizar JSON json(stringValue)
Propiedad segura object?['key']
Reserva nula coalesce(value, default)
Está vacío empty(value)
If/else if(condition, trueVal, falseVal)
Comparación de fechas greater(ticks(dateA), ticks(dateB))
Int de la cadena int(stringValue)
Float from string float(stringValue)
AND and(condA, condB)
OR or(condA, condB)

Nota: El autor creó este artículo con ayuda de la inteligencia artificial. Aprende más