Del via


Oppdatere og slette tabellrader ved hjelp av web-API-en

Operasjoner for å endre data er en sentral del av web-API-en. I tillegg til enkle oppdaterings- og slettingsoperasjoner kan du utføre operasjoner på enkelttabellkolonner (enhetsattributter) og skrive upsert-forespørsler som enten vil oppdatere eller sette inn data, avhengig av om det finnes.

Grunnleggende oppdatering

Oppdateringsoperasjoner bruker HTTP-verbet PATCH . Send et JSON-objekt som inneholder egenskapene du vil oppdatere til URI-en som representerer posten. Et svar med statusen 204 No Content returneres hvis oppdateringen er vellykket.

Toppteksten If-Match: * sikrer at du ikke ved et uhell oppretter en ny oppføring ved å utføre en upsert-operasjon. Mer informasjon: Forhindre opprettelse i upsert.

Viktig!

Når du oppdaterer en enhet, må du bare inkludere egenskapene du endrer i brødteksten for forespørselen. Bare oppdatering av egenskapene for en enhet som du tidligere hentet, og inkludert JSON i forespørselen, oppdaterer hver egenskap selv om verdien er den samme. Dette kan føre til systemhendelser som kan utløse forretningslogikk som forventer at verdiene er endret. Dette kan føre til at egenskaper ser ut til å ha blitt oppdatert i overvåkingsdata når de faktisk ikke har endret seg.

Når du oppdaterer statecode egenskapen, er det viktig å alltid angi ønsket statuscode. statecode og statuscode har avhengige verdier. Det kan være flere gyldige statuscode verdier for en gitt statecode verdi, men hver statecode kolonne har konfigurert én standardstatusverdi . Når du oppdaterer statecode uten å angi en statuscode, angis standard statusverdi av systemet. Når overvåking er aktivert i tabellen og statuscode kolonnen, blir ikke den endrede verdien for statuscode kolonnen registrert i overvåkingsdataene med mindre den er angitt i oppdateringsoperasjonen.

Note

Definisjonen for attributter inkluderer en RequiredLevel egenskap. Når dette er satt til SystemRequired, kan du ikke angi disse attributtene til en nullverdi. Mer informasjon: Kravnivå for attributt

Dette eksemplet oppdaterer en eksisterende kontopost med accountid verdien 00000000-0000-0000-0000-0000000001.

Anmodning:

PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
If-Match: *  
  
{  
    "name": "Updated Sample Account ",  
    "creditonhold": true,  
    "address1_latitude": 47.639583,  
    "description": "This is the updated description of the sample account",  
    "revenue": 6000000,  
    "accountcategorycode": 2  
}  

Svar:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Note

Se Bruke navigasjonsegenskaper med én verdi hvis du vil ha informasjon om hvordan du knytter til og deaktiverer tilknytning av enheter ved oppdatering.

Oppdatering med returnerte data

Hvis du vil hente data fra en enhet du oppdaterer, kan du skrive forespørselen slik PATCH at data fra den opprettede posten returneres med statusen 200 (OK). Du må bruke Prefer: return=representation forespørselshodet for å få dette resultatet.

Hvis du vil kontrollere hvilke egenskaper som returneres, tilføyer $select du spørringsalternativet til nettadressen til enhetssettet. Spørringsalternativet $expand ignoreres hvis det brukes.

Dette eksemplet oppdaterer en kontoenhet og returnerer de forespurte dataene i svaret.

Anmodning:

PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon HTTP/1.1  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
Accept: application/json  
Content-Type: application/json; charset=utf-8  
Prefer: return=representation
If-Match: * 
  
{"name":"Updated Sample Account"}  

Svar:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
Preference-Applied: return=representation  
OData-Version: 4.0  
  
{  
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",  
    "@odata.etag": "W/\"536537\"",  
    "accountid": "00000000-0000-0000-0000-000000000001",  
    "accountcategorycode": 1,  
    "description": "This is the description of the sample account",  
    "address1_latitude": 47.63958,  
    "creditonhold": false,  
    "name": "Updated Sample Account",  
    "createdon": "2016-09-28T23:14:00Z",  
    "revenue": 5000000.0000,  
    "_transactioncurrencyid_value": "048dddaa-6f7f-e611-80d3-00155db5e0b6"  
}  
  

Oppdatere flere poster i én enkelt forespørsel

Den raskeste måten å oppdatere flere poster av samme type i én enkelt forespørsel på, er å bruke UpdateMultiple-handlingen. OppdaterMultiple-handlingen på tidspunktet for denne skrivingen. Ikke alle standardtabeller støtter denne handlingen, men alle elastiske tabeller gjør det.

Mer informasjon:

Oppdatere en enkelt egenskapsverdi

Når du bare vil oppdatere én egenskapsverdi, kan du bruke en PUT forespørsel med egenskapsnavnet tilføyet til enhetens URI.

Eksemplet nedenfor oppdaterer name egenskapen for en eksisterende account rad med accountid verdien 00000000-0000-0000-0000-0000000001.

Anmodning:

PUT [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/name HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
  
{"value": "Updated Sample Account Name"}  

Svar:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Slette én enkelt egenskapsverdi

Hvis du vil slette verdien for én egenskap, bruker du en DELETE forespørsel med egenskapsnavnet tilføyet til enhetens URI.

Følgende eksempel sletter verdien for description egenskapen for en kontoenhet med accountid verdien 00000000-0000-0000-0000-0000-000000001.

Anmodning:

DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/description HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Svar:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Note

Dette kan ikke brukes med en navigasjonsegenskap med én verdi for å koble fra to enheter. Du finner en alternativ tilnærming i Opphev tilknytning til en navigasjonsegenskap med én verdi.

Oppsert en tabellrad

En upsert-operasjon ligner på en oppdatering. Den bruker en PATCH forespørsel og bruker en URI til å referere til en bestemt post. Forskjellen er at hvis posten ikke finnes, opprettes den. Hvis den allerede finnes, oppdateres den.

Upsert er verdifull når du synkroniserer data mellom eksterne systemer. Det eksterne systemet inneholder kanskje ikke en referanse til primærnøkkelen i dataverstabellen, så du kan konfigurere alternative nøkler for Dataverse-tabellen ved hjelp av verdier fra det eksterne systemet som unikt identifiserer posten på begge systemene. Mer informasjon: Definere alternative nøkler for å referere til rader

Du kan se eventuelle alternative nøkler som er definert for en tabell i merknadene for enhetstypen i $metadata tjenestedokumentet. Mer informasjon: Alternative nøkler.

I eksemplet nedenfor er det en tabell med navnet sample_thing som har en alternativ nøkkel som refererer til to kolonner: sample_key1 og sample_key2, som begge er definert for å lagre heltallsverdier.

Anmodning:

PATCH [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1) HTTP/1.1
Accept: application/json 
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Content-Type: application/json

{
    "sample_name": "1:1"
}

For både opprettings- eller oppdateringsoperasjoner får du det samme svaret. Legg merke til hvordan OData-EntityId svarhodet bruker nøkkelverdiene i stedet for GUID-primærnøkkelidentifikatoren for posten.

Svar:

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1)

Siden svaret er det samme, kan du ikke vite om operasjonen representerte en Create eller Update operasjon.

Hvis du trenger å vite det, kan du bruke Prefer: return=representation forespørselshodet. Med dette toppteksten får du svar 201 Created når en post opprettes og et 200 OK svar når posten oppdateres. Dette alternativet legger til en Retrieve operasjon som har innvirkning på ytelsen. Hvis du bruker Prefer: return=representation forespørselshodet, må du kontrollere at du $select inkluderer den minimale mengden data, fortrinnsvis bare primærnøkkelkolonnen. Mer informasjon: Oppdater med data som returneres og Opprett med data returnert.

Når du bruker alternative nøkler, bør du ikke inkludere de alternative nøkkelverdiene i brødteksten i forespørselen.

  • Når en upsert representerer en Update, ignoreres disse alternative nøkkelverdiene. Du kan ikke oppdatere alternative nøkkelverdier mens du bruker dem til å identifisere posten.
  • Når en upsert representerer en Create, angis nøkkelverdiene i nettadressen for oppføringen hvis de ikke finnes i brødteksten. Så det er ikke nødvendig å inkludere dem i brødteksten i forespørselen.

Mer informasjon: Bruk Upsert til å opprette eller oppdatere en post

Note

Vanligvis når du oppretter en ny post, lar du systemet tilordne en GUID-verdi for primærnøkkelen. Dette er en anbefalt fremgangsmåte fordi systemet genererer nøkler som er optimalisert for indeksen, og dette forbedrer ytelsen. Men hvis du må opprette en post med en bestemt primærnøkkelverdi, for eksempel når guid-verdien for nøkkelen genereres av et eksternt system, upsert gir operasjonen en måte å gjøre dette på.

Forhindre oppretting eller oppdatering med upsert

Noen ganger er det situasjoner der du vil utføre en upsert, men du vil forhindre en av de potensielle operasjonene: enten opprette eller oppdatere. Du kan gjøre dette ved hjelp av If-Match eller If-None-Match topptekster. Hvis du vil ha mer informasjon, kan du se Begrens upsert-operasjoner.

Grunnleggende sletting

En sletteoperasjon er enkel. Bruk verbet DELETE med URI-en for enheten du vil slette. Denne eksempelmeldingen sletter en kontoenhet med primærnøkkelverdien accountid lik 00000000-0000-0000-0000-0000000001.

Anmodning:

DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Svar:

Hvis enheten finnes, får du et vanlig svar med status 204 for å indikere at slettingen var vellykket. Hvis enheten ikke blir funnet, får du svar med status 404.

HTTP/1.1 204 No Content  
OData-Version: 4.0  

Se etter dupliserte poster

Hvis du vil ha mer informasjon om hvordan du ser etter dupliserte poster under en oppdateringsoperasjon, kan du se Oppdage duplikater under oppdateringsoperasjonen ved hjelp av web-API-en.

Slette flere poster i én enkelt forespørsel

Den raskeste måten å slette flere poster av samme type i én DeleteMultiple enkelt forespørsel på, er å bruke handlingen. I skrivende stund er DeleteMultiple-funksjonen en forhåndsvisningsfunksjon. Standardtabeller støtter ikke denne handlingen, men alle elastiske tabeller gjør det.

Note

For standardtabeller anbefaler vi at du bruker handlingen BulkDelete, som muliggjør asynkron sletting av poster som samsvarer med en spørring. Mer informasjon: Slett data i bulk

Mer informasjon:

Oppdatere og slette dokumenter i lagringspartisjoner

Hvis du oppdaterer eller sletter elastiske tabelldata som er lagret i partisjoner, må du angi partisjonsnøkkelen når du åpner dataene.

Mer informasjon: Velge en PartitionId-verdi

Se også

Eksempel på grunnleggende operasjoner for web-API (C#)
Eksempel på web-API Basic Operations (JavaScript på klientsiden)
Utføre operasjoner ved hjelp av web-API-en
Skrive Http-forespørsler og håndtere feil
Spør etter data ved hjelp av nett-API-en
Opprett en tabellrad ved hjelp av nett-API-en
Hente en tabellrad ved hjelp av web-API-en
Knytte til og koble fra tabellrader ved hjelp av web-API-en
Bruke web-API-funksjoner
Bruk nett-API-handlinger
Utføre satsvise operasjoner ved hjelp av web-API-en
Representere en annen bruker ved hjelp av web-API-en
Utføre betingede operasjoner ved hjelp av web-API-en