Aggiornare una lookup multipla con Power Automate
Un esempio di come aggiornare un campo SharePoint di tipo lookup che accetta valori multipli con Power Automate.
Nella action andrà specificato il metodo PATCH mentre la Uri sarà nella forma:
è importante passare anche questi header
da un risultato come questo
o in alternativa
Per maggiori informazioni vedi Working with lists and list items with REST.
PATCH
Usando la action Send an HTTP request to SharePoint con il metodo PATCHè possibile passare un JSON di questo tipo per aggiornare il campo lookup multipoJSON: Body - Campo lookup multiplo
{
"CategoriesId": [2, 3]
}
Da notare che al nome campo, Categories, di tipo lookup, va aggiunto il suffisso Id, quindi il nome campo da usare per l'aggiornamento diventa CategoriesId e che nell'attricbuto Content-Type viene specificato odata=nometadata .
Va passato un array con gli Id degli item da salvare.
Nella action andrà specificato il metodo PATCH mentre la Uri sarà nella forma:
URL
_api/web/lists/GetByTitle('<titolo della lista>')/items(<id item>)
JSON: Headers
{
"Content-Type": "application/json;odata=nometadata",
"If-Match": "*"
}
Il parametro If-Match con il valore asterisco permette di sovrascrivere sempre l'item indipendentemente dalla versione (override).
Verbose
E' anche possibile passare i metadati usando odata=verbosema il formato del JSON da passare nel body cambiaJSON: Body
{
"__metadata": {
"type": "SP.Data.TodoListListItem"
},
"CategoriesId": {
"results": [2, 3]
}
}
In questo caso, nell'header, la chiave ContentType deve contenere il valore odata=verbose.
Nel parametro __metadata va passato un oggetto con una proprietà di nome type e deve contenere il nome della lista nella forma SP.Data.<nome lista>ListItem.
Infine nel campo CategoriesId va passato un oggetto con una proprietà di tipo array di nome results.
Nel parametro __metadata va passato un oggetto con una proprietà di nome type e deve contenere il nome della lista nella forma SP.Data.<nome lista>ListItem.
Infine nel campo CategoriesId va passato un oggetto con una proprietà di tipo array di nome results.
JSON: Headers
{
"Content-Type": "application/json;odata=verbose",
"If-Match": "*"
}
Vantaggi del verbose
In questo caso specificando il type (nel'oggetto __metadata) il vantaggio è quello di rafforzare il controllo sul tipo della lista, se per qualche motivo c'è un errata valorizzazione della url, quindi si punta ad una lista diversa, l'update non avviene e genera questo errore:A type named 'SP.Data.TodoAAAListItem' could not be resolved by the model. When a model is available, each type name must resolve to a valid type.
clientRequestId: 4c78ec01-f9f5-484e-bc9b-7ea28867a2cd
serviceRequestId: a9616ba0-d08a-5000-2dae-5a7b65f9358f
clientRequestId: 4c78ec01-f9f5-484e-bc9b-7ea28867a2cd
serviceRequestId: a9616ba0-d08a-5000-2dae-5a7b65f9358f
Ricavare il nome della lista
Il nome della lista da usare con il verbose nel parametro __metadata.type, lo si può leggere dalla proprietà ListItemEntityTypeFullName facendo questa queryText
https://<nome del tenant>.sharepoint.com/_api/web/lists/GetByTitle('<titolo della lista>')?$select=ListItemEntityTypeFullName
JSON
{
"ListItemEntityTypeFullName": "SP.Data.TodoListListItem"
}
Il fatto che il termine List compaia 2 volte nel nome è solo perché la lista di esempio si chiama proprio TodoList.
POST
La stessa operazione può essere fatta anche con il metodo POST, ma in questo caso va aggiunto l'header X-HTTP-Method=MERGEIl metodo POST senza il parametro X-HTTP-Method=MERGE viene usato per creare un nuovo item.
In questo caso va tolta dalla url la parte finale relativa all'id (2).
In questo caso va tolta dalla url la parte finale relativa all'id (2).
Note
Quelli indicati sono gli header minimi necessari, con altri metodi, come la creazione di item, che ritornano un risultato, va aggiunto anche l'headerJSON: Headers Accept verbose
{
"Accept": "application/json;odata=verbose"
}
JSON: Headers Accept nometadata
{
"Accept": "application/json;odata=nometadata"
}
Per maggiori informazioni vedi Working with lists and list items with REST.