Condividi tramite


Associare e annullare l'associazione delle righe di tabella usando l'API Web

È possibile associare singoli record nelle righe della tabella ad altri record usando relazioni esistenti tra le definizioni di tabella. In OData le relazioni vengono espresse come proprietà di navigazione.

È possibile individuare le proprietà di navigazione presenti nel documento del servizio $metadata. Vedere Proprietà di navigazione dell'API Web. Per le tabelle Dataverse esistenti, vedi il riferimento a EntityType API Web; per ogni tipo di entità, vedi le proprietà di navigazione a singola e a multipla valorizzazione.

Nella tabella seguente vengono descritti i tre tipi di relazioni tra le tabelle in Dataverse.

TIPO Description Example
Uno-a-molti A un record possono essere associati molti record. Un record di un account può avere molti record di contatto nella contact_customer_accountsproprietà di navigazione a valori collettivi.
Molti-a-uno Molti record possono essere associati a un record.

Molti-a-Uno è l'immagine speculare di una relazione uno-a-molti. C'è solo una relazione.
È possibile associare più record di contatto a un singolo record di account usando la parentcustomerid_accountproprietà di navigazione a valore singolo.
Molti-a-molti Molti record possono essere reciprocamente associati a molti altri record. Ogni ruolo di sicurezza (ruolo) può includere riferimenti alla definizione di un utente di sistema.
Entrambe queste tabelle hanno una systemuserroles_associationproprietà di navigazione con valori di raccolta.

Uso delle proprietà di navigazione a valore singolo

Per i record esistenti sul lato molti di una relazione uno-a-molti o molti-a-uno, è possibile associare il record impostando un riferimento Uri all'altro record. Il modo più semplice e comune per eseguire questa operazione consiste nell'aggiungere l'annotazione @odata.bind al nome della proprietà di navigazione a valore singolo e quindi impostare il valore come Uri sull'altro record in una PATCH richiesta.

Associare con una proprietà di navigazione a valore singolo

Ad esempio, per associare un record di contatto a un account usando la parentcustomerid_account proprietà di navigazione a valore singolo:

Richiesta:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account@odata.bind": "accounts(ce9eaaef-f718-ed11-b83e-00224837179f)"
}

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Come descritto in Associare righe di tabella alla creazione, i nuovi record possono anche essere associati ai record esistenti nello stesso modo.

Annullare l'associazione con una proprietà di navigazione a valore singolo

Se si desidera annullare l'associazione, è sufficiente impostare il valore su Null.

Richiesta:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account@odata.bind": null
}

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Quando si annulla l'associazione in questo modo, non è necessario includere l'annotazione @odata.bind . È sufficiente usare il nome della proprietà di navigazione a valore singolo:

Richiesta:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account": null
}

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Altre informazioni: Aggiornamento di base

Altri metodi

Esistono altri modi per ottenere gli stessi risultati descritti in precedenza con le proprietà di navigazione a valore singolo.

È possibile usare la richiesta seguente PUT per impostare il valore della proprietà di parentcustomerid_account navigazione a valore singolo:

Richiesta:

PUT [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/parentcustomerid_account/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)"
}

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Annotazioni

Nota: è necessario usare un URL assoluto quando si imposta il valore per @odata.id.

Per rimuovere il riferimento, è anche possibile usare questa DELETE richiesta:

Richiesta:

DELETE [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/parentcustomerid_account/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Uso delle proprietà di navigazione con valori di raccolta

Con OData, entrambi i lati di una relazione molti-a-molti hanno proprietà di navigazione di tipo raccolta. Per le relazioni uno-a-molti e molti-a-uno, sul lato "Uno" la tabella ha una proprietà di navigazione a valori multipli. Non esiste alcuna differenza nel modo in cui si lavora con uno qualsiasi di questi tipi di relazioni usando le proprietà di navigazione con valori di raccolta. Questa sezione descrive come utilizzare le proprietà di navigazione con valori di raccolta con qualsiasi tipo di relazione.

Aggiungere un record a una raccolta

Nell'esempio seguente viene illustrato come aggiungere un record "contatto" nella raccolta dell'accountcontact_customer_accounts, che fa parte di una relazione uno-a-molti.

Richiesta:

POST [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)"
}

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Nell'esempio seguente viene mostrato come aggiungere un record di ruolo alla raccolta systemusersystemuserroles_association, che rappresenta una relazione molti-a-molti.

Richiesta:

POST [Organization Uri]/api/data/v9.2/systemusers(34dcbaf5-f718-ed11-b83e-00224837179f)/systemuserroles_association/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/roles(886b280c-6396-4d56-a0a3-2c1b0a50ceb0)"
}

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Rimuovere un record da una raccolta

Nell'esempio seguente viene illustrato come rimuovere un record contatto nella raccolta di accountcontact_customer_accounts in cui il valore del contatto contactid è 00aa00aa-bb11-cc22-dd33-44ee44ee44ee.

Richiesta:

DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

La richiesta seguente funziona anche:

Richiesta:

DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts/$ref?$id=[Organization URI]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Risposta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Vedere anche

Esempio di operazioni di base dell'API Web (C#)
Esempio di operazioni di base dell'API Web (JavaScript sul lato client)
Eseguire operazioni usando l'API Web
Comporre richieste HTTP e gestire gli errori
Eseguire query di dati utilizzando l'API Web
Creare una riga di tabella usando l'API Web
Recuperare una riga di tabella usando l'API Web
Aggiornare ed eliminare righe di tabella usando l'API Web
Usare le funzioni API Web
Utilizzare le azioni API Web
Eseguire operazioni batch con l'API Web
Rappresentare un altro utente usando l'API Web
Eseguire operazioni condizionali usando l'API Web