Un esempio di come aggiornare un campo SharePoint di tipo lookup che accetta valori multipli con Power Automate.
Lookup multipla
Lookup multipla

PATCH

Usando la action Send an HTTP request to SharePoint con il metodo PATCH
PATCH nometadata
PATCH nometadata
è possibile passare un JSON di questo tipo per aggiornare il campo lookup multipo

JSON: 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>)
è importante passare anche questi header

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=verbose
PATCH - verbose
PATCH - verbose
ma il formato del JSON da passare nel body cambia

JSON: 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.

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

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

Text

https://<nome del tenant>.sharepoint.com/_api/web/lists/GetByTitle('<titolo della lista>')?$select=ListItemEntityTypeFullName
da un risultato come questo

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=MERGE
POST - MERGE - Verbose
POST - 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

JSON: Headers Accept verbose

{
  "Accept": "application/json;odata=verbose"
}
o in alternativa

JSON: Headers Accept nometadata

{
  "Accept": "application/json;odata=nometadata"
}

Per maggiori informazioni vedi Working with lists and list items with REST.
Tags:
Power Automate28 SharePoint Online75 SharePoint498
Potrebbe interessarti anche: