NavigazioneMarittima:PowerAutomate Tips
From Aino Wiki
Un Workflow in PowerAutomate è composto da una sequenza di Workflow Actions.
Contents
Actions
Chiamate workflow actions sono le azioni elementari di un flusso di lavoro custom di Power Automate.
Variabili
E' possibile definire variabili tipizzate (mediante "Initialize variable") da usare in un flusso PowerAutomate, nel seguente esempio si definisce una di tipo intero ottenuta dinamicamente da una funzione:
Si può usare anche una action per l'aggiornamento di una variabile ed allo scopo si usa l'action "Set variable"
Array
Definizione ed assegnamento di un array, si usa la notazione JSON.
Conditions
Funzioni di controllo del flusso per verificare azioni precedenti e conseguentemente direzionare l'esecuzione del flusso.
Segue esempio di una Condition che corrisponde ad un "IF" il valore da valutare è di tipo testo, nome di un file, che non deve essere racchiuso né da singoli e nè da doppi apici.
Get items
Nella vecchia versione:
Nella nuova:
Top 100
Di default seleziona 100 records, si cambia:
- cliccando sui tre puntini a sx, quindi scegliere "Settings"
- nella sezione "Pagination" impostare la paginazione cliccando sul pulsante On
- impostare un nuovo limite, il massino è 5000(purtroppo è un parametro obbligatorio)
ORDER BY
E' possibile ordinare gli elementi della lista SharePoint prima di salvarli, nel task cliccare su "Show advanced options", nel campo "Order by" si può usare una sintassi simile a SQL, quindi si può usare il nome campo corrispondente all'omonimo campo della lista seguito da ASC o DESC, si possono usare più campi per un ordinamento composto basta usare il separatore della virgola. Ad Es.:
ID desc, DataCusom asc
Select
Dopo l'estrazione di una lista di dati questi potranno essere selezionati mediante il task SEELCT.
Nella sezione * From si indica l'oggetto della sorgente dati mentre Nella sezione * Map si definisce l'output dei dati dell'elaborazione di selezione.
Quanto sarà nella colonna di dx della tabella * Map è ottenibile attraverso il fumetto d'aiuto, dopo la selezione dell'opportuno campo, passando sopra il mouse, si visualizzerà il comando\funzione integrale generato automaticamente al fine di selezionare il dato.
Esistenza file
Non esiste una Action specifica ma si trova un modo per raggiungere lo stesso risultato, più semplice nel caso il file da ricercare sia in una Libray, ad esempio cartella canonica dei documenti.
In Document Library
Il file da cercare può essere anche in una sottocartella il seguente sistema lo cercherà comunque.
La via è usare il connettore\azione "Get Files (properties only)
".
Vedere il segeunte Post: powerusers.microsoft.com
Alternative
Una alternativa è indicata al post stackoverflow.
Si può usare la Action "Get file metadata using path
dal connettore di SharePoint.
Quando il file viene trovato abbiamo un output (visibile in modalità Test), JSON, come segue:
In caso negativo ad es. l'output è:
{ "statusCode": 404, "headers": { "Cache-Control": "max-age=0, private", ..etc }, "body": { "status": 404, "message": "File not found\r\nclientRequestId: f9f9d976-a9ba-4df2-bf6a-203e6557b9bc\r\nserviceRequestId: f9f9d976-a9ba-4df2-bf6a-203e6557b9bc" } }
Delete file
Per cancellare un file il cui fileName prima è stato inserito in una variabile:
Trattamento Campi strutturati
Considerando che i dati su cui si posson fare delle selezioni o elaborazioni sono di tipo JSON è possibile trattarli definendo delle espressioni che utilizzano una sintassi specifica.
Supponendo che il JSON relativo ai dati rappresentati nel "value" del * From sia come segue
[ { "ID":212, "Title":"Dashboard, July 2019", "Description":"Dashboard version issued on July 2019, elaborated on the data of June 2019. ", "Applicant Name":"Alberto Cravidi", "Mail address":"Alberto.Cravidi@vodafone.com", "Phone Number":"3488289394", "Creation Date":"2019-07-05", "Status":"Delivered", "Notes":"This request regards the generation of the monthly Dashboard", "Platform":[ { "@odata.type":"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference", "Id":0, "Value":"All" } ], "Provider":[ { "@odata.type":"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference", "Id":0, "Value":"Reply SpA" } ], "Delivery Date":"2019-07-10", "Complexity":"Low - No planning, no documentation", "Effort":1.0, "BaU Activities":"VCVI Dashboard", "InProgress Date":"2019-07-05", "ToOperation Date":null, "Rejected Date":null, "Closed Date":null, "CC&CV Resource Name":{ "@odata.type":"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference", "Id":-1, "Value":"Umberto GROPPELLI" }, "Delivery Date by CC&CV":"2019-07-10", "Delivered Date":"2019-08-22", "Delivery Owner":"2 - VCVI", "Accepted Date":null, "VNO INProgress Date":null, "Item Type":"Item", "Path":"Lists/Infopath Custom List/" }, ....etc....
Ad es. per acquisire il dato del campo "Platform" nella seconda colonna della tabella del task Select inserire:
item()?['Platform']?[0]?['Value']
Questo sarà il risultato:
mentre per il campo "CC&CV Resource Name" che non è ottenuto sotto un array scegliere come segue:
Formattazione
Date
Supponendo di trattare il seguente JSON con un campo data da trattare ovvero salvare su un ASCII CSV il campo data con una formattazione specifica.
{ "MiaData": "@formatDateTime(item()?['MiaData'],'dd-MMM-yy')" }'
Supponiamo anche che questo campo data a volte potrà anche esser nullo, segue la formula che si può adottare per trasformare l'output secondo la formattazione desiderata (formula da inserire nella seconda colonna della action SELECT):
if (empty(item()?['MiaData']), '', formatDateTime(item()?['MiaData'],'dd-MMM-yy')) // formatDateTime('2009-06-15T13:45:30', 'M/dd/yyyy h:mm tt') Returns the format 6/15/2009 1:45 PM // formatDateTime('2009-06-15T13:45:30', 'M/dd/yyyy HH:mm:ss tt') Returns the format 6/15/2009 13:45:30 PM // formatDateTime(utcNow(), 'dd-MM-yyyy') Returns the current date in the format 15-06-2009 // formatDateTime('2009-06-15T13:45:30', 's') Returns the format 2009-06-15T13:45:30
Notare l'uso delle istruzioni if()
, empty()
, formatDateTime()
.
Doc formatDateTime()
Triggers
Un flusso può esser eseguito come:
- Manual triggers: manualmente, "Manual trigger a flow";
- Event-based triggers: in conseguenza di un determinato evento, es. l'arrivo di una e-mail con determinate caratteristiche;
- Scheduled triggers: in base ad una schedulazione impostando una action chiamata "Recurrence";
- Data-driven triggers: scatenati in conseguenza di un cambio nei dati come la modifica di un record in un database o la creazione di un nuovo file in OneDrive.
Schedulazione
Si possono impostare tutte le casistiche, la logica è diversa da quanto è possibile fare con SQL Server.
Si può far partire un flusso impostando un intervallo di esecuzione, nel seguente esempio si avvia un flusso alle 07:30 di ogni giorno:
Trasformazione Manual Trigger in Recurrence
Dopo il periodo di collaudo si vuol cambiare un flusso da manuale ad automatico con una schedulazione appropriata.
Quindi data il seguente inizio di flusso:
Si cancella la prima Action "Manually trigger a flow", non preoccuparsi dopo aver ricevuto un pop-up di warning, si può sempre tornare indietro non salvando il flusso corrente.
A questo punto, poiché ogni flusso deve avere un inizio, selezionare e cliccare sulla action virtuale "Add a trigger".
Cercare la action "Recurrence" che è sotto il gruppo "Schedule". A questo punto si può configurare la schedulazione in base alle opzioni offerte nel popup.
Il seguente esempio interessante, si imposta una schedulazione custom settimanale, ad ore e minuti prestabiliti evitando sabato e domenica e le ore non lavorative.
Scrivere condizioni di Triggers
E' possibile definire delle condizioni di trigger usando il linguaggio Workflow Definition Language (WDL). Vedere guida: citizendevelopmentacademy
Language
Il linguaggio "dovrebbe" essere Power Fx, MS overview.
Expressions
String Functions
Concatenazione di stringhe
Concat(text1,text2,...)
Es. concatenazione di due elementi di un vettore di stringhe separati da uno spazio vuoto (non importa se gli elementi del vettore sono nulli, non scatta errore)
Concat(item()?['Platform']?[0]?['Value'], ' ', item()?['Platform']?[1]?['Value'])
Es. concatenazione di due elementi di un vettore di stringhe separati da VIRGOLA ma solo se il secondo elemento esiste e non è nullo
Concat(item()?['Platform']?[0]?['Value'] , if (empty(item()?['Platform']?[1]?['Value']) , '' , Concat(',', item()?['Platform']?[1]?['Value']) ) )
Verifica se NULL o vuoto
empty(variabile)
, restituisce VERO se la variabile parametro è vuota
Controlli del flusso
If(condizione da verificare,variabile_caso_vero,variabile_caso_falso)
es.
If(variabile=1, 'Vero', 'Falso')
Mappa e Link
Power Automate | MS Power apps
Dizionario | JSON | JavaScript | SharePoint
Parole chiave: