Cookbook delle espressioni per i flussi cloud

Questo articolo illustra 30 modelli di espressione pronti all'uso per scenari comuni nei flussi cloud Power Automate. È possibile copiare, adattare e usare questi modelli nei flussi.

Nota

Queste espressioni funzionano in tutti i livelli di licenza del flusso cloud Power Automate. Trovare il riferimento completo alla funzione nelle funzioni dell'espressione flusso di lavoro.

Operazioni di testo

1. Convertire in lettere maiuscole o minuscole

Scenario: normalizzare l'input dell'utente prima del confronto o dell'archiviazione.

Espressione: toUpper(variables('input')) o toLower(variables('input'))

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

Important

toUpper() fa distinzione tra maiuscole e minuscole quando viene usato nei confronti. Se si usa toUpper(A) = B, assicurarsi di applicarlo a entrambi i lati. toUpper(A) = B ha esito negativo se B è un caso misto.

2. Estrarre sottostringa (sinistra, destra, metà)

Scenario: estrarre una parte specifica da un valore di testo. Ottenere i primi N caratteri, l'ultimo N o un intervallo dal centro.

Espressione:

  • Sinistra: substring(variables('text'), 0, 5)
  • Corretto: substring(variables('text'), sub(length(variables('text')), 5), 5)
  • Metà: substring(variables('text'), 3, 4)

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

Tip

Il secondo parametro è l'indice iniziale (in base 0), il terzo è la lunghezza, non l'indice finale. substring('ABCDE', 1, 3) restituisce BCD, non BC.

3. Sostituire il testo

Scenario: pulire o trasformare i valori di testo. Rimuovere caratteri, scambiare delimitatori, correggere la formattazione.

Espressione: replace(variables('input'), 'old', 'new')

Esempio: replace('2026/03/18', '/', '-') restituisce 2026-03-18

Nota

replace() è sensibile alle maiuscole e minuscole. replace('Hello', 'hello', 'Hi') restituisce Hello invariato. Convertire prima in un caso comune, se necessario.

4. Suddividere la stringa in una matrice

Scenario: suddividere un valore delimitato (CSV, messaggi di posta elettronica separati da punto e virgola) in singoli elementi per il ciclo.

Espressione: split(variables('input'), ',')

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

Tip

Gli spazi dopo il delimitatore vengono mantenuti. split('a, b, c', ',') restituisce ["a"," b"," c"] con spazi iniziali. Usare trim() per ogni elemento in un'azione Seleziona in un secondo momento.

5. Concatenare con interruzioni di riga (per i messaggi di posta elettronica)

Scenario: creare un corpo del messaggio su più righe per le notifiche di posta elettronica o Teams.

Espressione: concat('Line 1', decodeUriComponent('%0A'), 'Line 2')

Example: usare decodeUriComponent('%0A') per una riga nuova o decodeUriComponent('%0D%0A') per interruzioni di riga di Windows stile.

Important

L'uso \n diretto nelle espressioni non produce un'interruzione di riga. Restituisce i caratteri letterali \n. Usare sempre l'approccio decodeUriComponent oppure usare <br> se l'output è HTML.

6. Controllare se la stringa contiene testo

Scenario: instradare un flusso in base al fatto che una riga dell'oggetto, un corpo del messaggio di posta elettronica o un campo contenga una parola chiave.

Espressione: contains(toLower(triggerBody()?['subject']), 'urgent')

Esempio: contains('Project Alpha Review', 'Alpha') restituisce true

Nota

contains() è sensibile alle maiuscole e minuscole. Avvolgere sempre sia lo stack di fieno che l'ago per toLower() la corrispondenza senza distinzione tra maiuscole e minuscole: contains(toLower(value), toLower(search)).

Data e ora

7. Ottenere la data/ora corrente in un formato specifico

Scenario: contrassegna un nome file, una voce di log o un messaggio di posta elettronica con la data e l'ora correnti.

Espressione: formatDateTime(utcNow(), 'yyyy-MM-dd HH:mm')

Esempio: restituisce 2026-03-18 14:30 (UTC). Usare per l'ora convertTimeZone() locale.

Tip

utcNow() è sempre UTC. Per l'ora locale, concatenare con convertTimeZone(utcNow(), 'UTC', 'Eastern Standard Time', 'yyyy-MM-dd HH:mm').

8. Aggiungere o sottrarre giorni da una data

Scenario: calcolare una data di scadenza, una scadenza o una data di promemoria rispetto a oggi.

Espressione: addDays(utcNow(), 7) o addDays(utcNow(), -30)

Esempio: se oggi è 2026-03-18, addDays(utcNow(), 7) restituisce 2026-03-25T...Z

Nota

addDays() accetta anche valori frazionari, ma addHours() o addMinutes() sono più chiari per gli offset di sub-day. Non usare addDays(utcNow(), 0.5) quando si intende addHours(utcNow(), 12).

9. Convertire la stringa in data (analisi)

Scenario: un campo di testo contiene una data simile 03/18/2026 a ed è necessario usarla nelle funzioni di data.

Espressione: parseDateTime(variables('dateString'), 'en-US')

Esempio: parseDateTime('03/18/2026', 'en-US') restituisce un valore datetime corretto.

Important

Senza il parametro delle impostazioni locali, l'analisi dipende dalle impostazioni internazionali del flusso e può scambiare mese/giorno. Specificare sempre le impostazioni locali in modo esplicito per evitare 03/04/2026 di essere interpretate come 3 aprile e 4 marzo.

10. Ottenere il giorno della settimana

Scenario: eseguire logica diversa nei giorni feriali e nei fine settimana o generare un "report di lunedì".

Espressione: dayOfWeek(utcNow())

Esempio: restituisce 0 per domenica, 1 per lunedì, ..., 6 per sabato.

Tip

Domenica è 0, non 7. Utilizzare or(equals(dayOfWeek(...), 0), equals(dayOfWeek(...), 6)) per i controlli del fine settimana. Una condizione come dayOfWeek(utcNow()) > 5 prende sabato ma perde domenica.

11. Calcolare la differenza tra due date

Scenario: determinare il numero di giorni trascorsi tra una data di richiesta e una data di completamento.

Espressione: div(sub(ticks(variables('endDate')), ticks(variables('startDate'))), 864000000000)

Esempio: se start è 2026-03-01 e end è 2026-03-18, restituisce 17.

Nota

Non esiste alcuna funzione predefinita dateDiff() . È necessario usare l'approccio tick. Il divisore 864000000000 converte i tick in giorni. Per le ore, usare 36000000000. Per minuti, usare 600000000.

12. Formato data per la visualizzazione

Scenario: convertire un valore datetime in un formato leggibile per i messaggi di posta elettronica o i report.

Espressione: formatDateTime(variables('myDate'), 'MMMM dd, yyyy') o formatDateTime(variables('myDate'), 'MM/dd/yyyy')

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

Important

MM è mesi, mm è minuti. formatDateTime(value, 'mm/DD/yyyy') produce 30/18/2026 (minuti e giorno) invece di 03/18/2026. Usare dd (minuscolo) per il giorno del mese.

Matrici e raccolte

13. Filtrare una matrice per condizione

Scenario: ottenere solo gli elementi da una matrice che corrispondono a un criterio specifico.

Espressione: usare l'azione Filtra matrice con: @item()?['Status'] è uguale a 'Active'

Esempio: restituisce input [{Name:'A', Status:'Active'}, {Name:'B', Status:'Closed'}][{Name:'A', Status:'Active'}]

Nota

Non è possibile usare un'espressione wheredi filtro di tipo -style inline. Usare l'azione Filtra matrice (non un'espressione). Per il filtro basato su espressioni, usare @equals(item()?['Status'], 'Active') nella modalità avanzata della matrice di filtri.

14. Ottenere il primo o l'ultimo elemento dalla matrice

Scenario: recuperare il record più recente o la prima corrispondenza da un elenco.

Espressione: first(variables('myArray')) o last(variables('myArray'))

Example: first(body('Get_items')?['value']) restituisce il primo elemento da una query di SharePoint.

Tip

first() in una matrice vuota restituisce null, non un errore. Seguire sempre con un controllo Null: if(empty(variables('myArray')), null, first(variables('myArray'))).

15. Contare gli elementi nella matrice

Scenario: controllare il numero di risultati restituiti da una query o verificare che un elenco contenga elementi sufficienti.

Espressione: length(variables('myArray'))

Example: length(body('Get_items')?['value']) restituisce il numero di elementi di una query di SharePoint list.

Nota

length() funziona sia su matrici che su stringhe. length('hello') restituisce 5 (numero di caratteri). Assicurarsi di passare una matrice, non una stringa simile a una matrice.

16. Creare una stringa delimitata da virgole dalla matrice (join)

Scenario: convertire un elenco di nomi, messaggi di posta elettronica o ID in una singola stringa delimitata per la visualizzazione o una chiamata API.

Espressione: join(variables('myArray'), ', ')

Esempio: join(createArray('Alice', 'Bob', 'Carol'), '; ') restituisce Alice; Bob; Carol

Tip

join() funziona su matrici di stringhe. Se la matrice contiene oggetti, usare prima un'azione Seleziona per estrarre il campo desiderato, quindi unire il risultato.

17. Controllare se la matrice contiene un valore

Scenario: determinare se un elemento specifico esiste in un elenco prima di procedere.

Espressione: contains(variables('myArray'), 'searchValue')

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

Nota

Per le matrici di oggetti, contains() controlla l'intero oggetto, non un valore della proprietà. Per verificare se un oggetto ha una proprietà corrispondente, usare un'azione Filtra matrice e quindi controllare length() il risultato.

JSON e oggetti

18. Analizzare la stringa JSON

Scenario: un'azione HTTP o un connettore personalizzato restituisce una stringa JSON che è necessario usare come dati strutturati.

Espressione: json(body('HTTP'))

Esempio: json('{"name":"Alice","age":30}') restituisce un oggetto a cui è possibile accedere con ?['name'].

Important

Non eseguire l'analisi doppia. Se l'azione restituisce già json analizzato (la maggior parte delle azioni del connettore è eseguita), il wrapping viene json() generato di nuovo un errore. Usare json() solo nelle risposte di stringa non elaborate, non sugli output delle azioni già oggetti.

19. Ottenere la proprietà annidata da JSON

Scenario: accedere a un valore all'interno di una risposta JSON, response.data.items[0].namead esempio .

Espressione: body('HTTP')?['data']?['items']?[0]?['name']

Esempio: per {"data":{"items":[{"name":"Widget"}]}}, restituisce Widget.

Important

Non dimenticare ( ? navigazione sicura). body('HTTP')['data']['items'] genera un errore se un livello è Null. Usare ?['key'] sempre per attraversare in modo sicuro: ogni ? restituisce Null invece di non riuscire se l'elemento padre non è presente.

20. Creare un oggetto JSON dai valori

Scenario: creare un corpo della richiesta per un'azione HTTP da variabili di flusso e contenuto dinamico.

Espressione: json(concat('{"name":"', variables('name'), '","status":"', variables('status'), '"}'))

Esempio: con name=Alice e status=Active, restituisce {"name":"Alice","status":"Active"}.

Tip

Se una variabile contiene virgolette o caratteri speciali, il formato JSON non sarà corretto. Per una costruzione affidabile, usare un'azione Compose con createObject('name', variables('name'), 'status', variables('status')) o compilarla direttamente in un'azione Compose.

21. Convertire l'oggetto in stringa

Scenario: registrare un oggetto JSON in un campo di testo o passare dati strutturati come parametro stringa.

Espressione: string(variables('myObject'))

Esempio: string(json('{"a":1}')) restituisce {"a":1} come stringa.

Nota

string() in una matrice o in un oggetto produce JSON compatto (nessuna bella stampa). Non è presente alcun elemento predefinito prettyPrint(). Accettare il testo in formato JSON compatto o compilarlo manualmente.

22. Gestire valori Null o vuoti in modo sicuro

Scenario: impedire errori quando un campo potrebbe essere null, vuoto o mancante completamente.

Espressione: coalesce(triggerBody()?['optionalField'], 'default value')

Esempio: se optionalField è Null, restituisce 'default value'. Se ha un valore, restituisce tale valore.

Important

coalesce() gestisce nullsolo le stringhe , non vuote. Per le stringhe vuote, combinare con una condizione: if(empty(triggerBody()?['field']), 'default', triggerBody()?['field']). La empty() funzione restituisce true sia per la stringa null che per la stringa ''vuota.

Numeri e matematica

23. Arrotondamento di un numero

Scenario: visualizzare una percentuale o un valore di valuta con un numero fisso di cifre decimali.

Espressione: formatNumber(variables('value'), 'N2') (per la visualizzazione) o div(mul(variables('value'), 100), 100) (per il troncamento)

Esempio: formatNumber(3.14159, 'N2') restituisce 3.14 come stringa.

Nota

formatNumber() restituisce una stringa, non un numero. Se è necessario eseguire altre operazioni matematiche sul valore arrotondato, analizzarlo di nuovo: float(formatNumber(variables('value'), 'N2')).

24. Convertire la stringa in numero (e indietro)

Scenario: un modulo o un messaggio di posta elettronica fornisce un numero come testo ed è necessario eseguire calcoli matematici.

Espressione: int(variables('textNumber')) o float(variables('textNumber')) e string(variables('numericValue'))

Esempio: int('42') restituisce 42. float('3.14') restituisce 3.14. string(42) restituisce '42'.

Important

int() in una stringa decimale genera un errore; non tronca. Se una variabile può contenere un separatore decimale, usare float() prima: int(float(variables('input'))). Con valori costanti come int('3.14'), l'errore viene rilevato in fase di salvataggio (InvalidTemplate), non in fase di esecuzione.

25. Calcolare la percentuale

Scenario: visualizzare la frazione di un valore di un'altra (ad esempio, frequenza di completamento, utilizzo).

Espressione: mul(div(float(variables('part')), float(variables('total'))), 100)

Esempio: con part=75 e total=200, restituisce 37.5.

Important

La divisione di interi viene troncata. div(75, 200) restituisce 0 perché entrambi sono numeri interi. Convertire sempre in float first: div(float(75), float(200)) restituisce 0.375.

Condizionali e logica

26. If/then/else in un'espressione

Scenario: restituisce valori diversi in base a una condizione, senza aggiungere un'azione Condizione al flusso.

Espressione: if(equals(variables('status'), 'Approved'), 'Proceed', 'Wait')

Esempio: se lo stato è Approved, restituisce Proceed. In caso contrario restituisce Wait.

Nota

La if() funzione non supporta >direttamente gli operatori , < Usare le funzioni helper: if(greater(variables('count'), 10), 'Over', 'Under'). Confronti disponibili: equals(), greater(), less(), greaterOrEquals(), lessOrEquals().

27. Coalesce (primo valore non Null)

Scenario: provare più campi e usare il primo con un valore, ad esempio il nome preferito, il nome visualizzato, il messaggio di posta elettronica.

Espressione: coalesce(triggerBody()?['preferredName'], triggerBody()?['displayName'], triggerBody()?['email'], 'Unknown')

Esempio: se preferredName è null e displayName è 'Alice', restituisce Alice.

Tip

coalesce() ignora ma null non stringhe vuote ''. Una stringa vuota è un valore non Null valido. Combinare con un helper se è necessario ignorare anche le stringhe vuote: coalesce(if(empty(A), null, A), if(empty(B), null, B), 'default').

28. Controllare se il valore è null o vuoto

Scenario: verificare che un campo obbligatorio abbia un valore utilizzabile prima dell'elaborazione.

Espressione: empty(variables('input'))

Esempio: empty('') restituisce true. empty(null) restituisce true. empty('hello') restituisce false.

Important

empty() non funziona sui numeri. empty(0) genera un errore. Per i numeri, usare equals(variables('num'), null) o controllare prima il tipo.

29. Confrontare le date (è la data A dopo la data B?)

Scenario: controllare se è stata superata una scadenza o se si è verificato un evento prima di un altro.

Espressione: greater(ticks(variables('dateA')), ticks(variables('dateB')))

Esempio: greater(ticks('2026-03-18'), ticks('2026-03-15')) restituisce true (18 marzo è dopo il 15 marzo).

Important

Il confronto delle stringhe di data direttamente con greater('2026-03-18', '2026-03-15') funziona per il formato ISO (AAAA-MM-DD) perché ordina in modo lessicografico. Ma ha esito negativo per altri formati. greater('03/18/2026', '12/01/2025') restituisce false perché 0<1. Usare ticks() sempre per un confronto di date affidabile.

30. Logica booleana (AND/OR in condizioni)

Scenario: combinare più condizioni in una singola espressione, ad esempio, l'importo > AND approvato 1000.

Espressione: and(equals(variables('status'), 'Approved'), greater(variables('amount'), 1000))

Esempio: restituisce true solo se lo stato è uguale Approved a e la quantità è maggiore di 1000.

Nota

Non è possibile concatenare and/or con &&/|| la sintassi. Usare sempre il modulo della funzione. Per la logica complessa, annidarli: or(and(A, B), and(C, D)). La leggibilità degrada con un annidamento profondo. Prendere in considerazione l'uso di un'azione Condizione con più righe.

Scheda di riferimento rapido

Attività Espressione
Maiuscole toUpper(value)
Minuscole toLower(value)
Sottostringa substring(value, start, length)
Sostituisci replace(value, old, new)
Divisa split(value, delimiter)
Contiene (testo) contains(toLower(value), toLower(search))
Ora (formattato) formatDateTime(utcNow(), 'yyyy-MM-dd')
Aggiungere giorni addDays(date, count)
Giorno della settimana dayOfWeek(date) (0=Sole)
Giorni tra div(sub(ticks(end), ticks(start)), 864000000000)
Primo elemento first(array)
Ultimo elemento last(array)
Conteggio length(array)
Unisci. join(array, delimiter)
Analizzare JSON json(stringValue)
Safe - proprietà object?['key']
Fallback Null coalesce(value, default)
È vuoto empty(value)
If/else if(condition, trueVal, falseVal)
Confrontare le date greater(ticks(dateA), ticks(dateB))
Int dalla stringa int(stringValue)
Float from string float(stringValue)
AND and(condA, condB)
OPPURE or(condA, condB)

Nota: l'autore ha creato questo articolo con assistenza per l'intelligenza artificiale. Altre informazioni