Un esempio di come aggiornare un campo
SharePoint di tipo
lookup che accetta valori
multipli con
Power Automate.
Lookup multipla PATCH
Usando la action
Send an HTTP request to SharePoint con il metodo
PATCHPATCH nometadata è possibile passare un
JSON di questo tipo per aggiornare il campo
lookup multipo {
"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:
_api/web/lists/GetByTitle('<titolo della lista>')/items(<id item>)
è importante passare anche questi
header{
"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=verbosePATCH - verbose ma il formato del
JSON da passare nel
body cambia
{
"__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.
{
"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
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 query
https://<nome del tenant>.sharepoint.com/_api/web/lists/GetByTitle('<titolo della lista>')?$select=ListItemEntityTypeFullName
da un risultato come questo
{
"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=MERGEPOST - MERGE - Verbose Il 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).
Note
Quelli indicati sono gli header minimi necessari, con altri metodi, come la creazione di item, che ritornano un risultato, va aggiunto anche l'header
{
"Accept": "application/json;odata=verbose"
}
o in alternativa
{
"Accept": "application/json;odata=nometadata"
}
Per maggiori informazioni vedi
Working with lists and list items with REST.