Del via


Opdater og slet tabelrækker ved hjælp af Web-API'en

Handlinger til ændring af data er en central del af web-API'en. Ud over simple opdaterings- og sletningshandlinger kan du udføre handlinger på kolonner med en enkelt tabel (objektattributter) og oprette upsertanmodninger , der enten opdaterer eller indsætter data, afhængigt af om de findes.

Grundlæggende opdatering

Opdateringshandlinger bruger HTTP-verbet PATCH . Overfør et JSON-objekt, der indeholder de egenskaber, du vil opdatere, til den URI, der repræsenterer posten. Der returneres et svar med statussen , 204 No Content hvis opdateringen lykkes.

Overskriften If-Match: * sikrer, at du ikke opretter en ny post, hvis du ved et uheld udfører en upsert-handling. Flere oplysninger: Undgå oprettelse i upsert.

Vigtigt!

Når du opdaterer et objekt, skal du kun inkludere de egenskaber, du ændrer, i anmodningens brødtekst. Hvis du blot opdaterer egenskaberne for et objekt, som du tidligere har hentet, og inklusive den pågældende JSON i din anmodning, opdateres hver egenskab, selvom værdien er den samme. Dette kan medføre systemhændelser, der kan udløse forretningslogik, der forventer, at værdierne er ændret. Dette kan medføre, at egenskaber ser ud til at være blevet opdateret i overvågningsdata, når de faktisk ikke er blevet ændret.

Når du opdaterer egenskaben statecode , er det vigtigt altid at angive den ønskede statuscode. statecode og statuscode har afhængige værdier. Der kan være flere gyldige statuscode værdier for en given statecode værdi, men hver statecode kolonne har konfigureret en enkelt DefaultStatus-værdi . Når du opdaterer statecode uden at angive en statuscode, angives standardværdien for status af systemet. Når overvågning er aktiveret i tabellen og kolonnen statuscode , registreres den ændrede værdi for statuscode kolonnen heller ikke i overvågningsdataene, medmindre de er angivet i opdateringshandlingen.

Notat

Definitionen af attributter indeholder en RequiredLevel egenskab. Når dette er angivet til SystemRequired, kan du ikke angive disse attributter til en null-værdi. Flere oplysninger: Niveau for attributkrav

I dette eksempel opdateres en eksisterende kontopost med værdien accountid 00000000-0000-0000-0000-00000000000001.

Bøn:

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  
  

Notat

Se Brug af navigationsegenskaber med en enkelt værdi for at få oplysninger om tilknytning og fjernelse af tilknytning af objekter ved opdatering.

Opdater med returnerede data

Hvis du vil hente data fra et objekt, du opdaterer, kan du oprette din PATCH anmodning, så data fra den oprettede post returneres med statussen 200 (OK). Hvis du vil have dette resultat, skal du bruge anmodningsheaderen Prefer: return=representation .

Hvis du vil styre, hvilke egenskaber der returneres, skal du føje $select forespørgselsindstillingen til URL-adressen til objektsættet. Forespørgselsindstillingen $expand ignoreres, hvis den bruges.

I dette eksempel opdateres en kontoenhed, og de ønskede data returneres i svaret.

Bøn:

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"  
}  
  

Opdater flere poster i en enkelt anmodning

Den hurtigste måde at opdatere flere poster af samme type på i en enkelt anmodning er at bruge handlingen UpdateMultiple. I skrivende stund handlingen UpdateMultiple. Det er ikke alle standardtabeller, der understøtter denne handling, men det gør alle elastiske tabeller.

Flere oplysninger:

Opdater en enkelt egenskabsværdi

Når du kun vil opdatere en enkelt egenskabsværdi, skal du bruge en PUT anmodning med egenskabsnavnet, der er føjet til enhedens URI.

I følgende eksempel opdateres name egenskaben for en eksisterende account række med værdien accountid 00000000-0000-0000-0000-0000000000001.

Bøn:

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  
  

Slet en enkelt egenskabsværdi

Hvis du vil slette værdien af en enkelt egenskab, skal du bruge en DELETE anmodning med det egenskabsnavn, der er føjet til enhedens URI.

I følgende eksempel slettes værdien af egenskaben for description en kontoenhed med accountid værdien 00000000-0000-0000-0000-0000-000000000001.

Bøn:

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  
  

Notat

Dette kan ikke bruges sammen med en navigationsegenskab med en enkelt værdi til at fjerne tilknytningen mellem to objekter. Du kan se en alternativ tilgang under Fjern tilknytning til en navigationsegenskab med en enkelt værdi .

Indsæt en tabelrække

En upsert-handling svarer til en opdatering. Den bruger en PATCH anmodning og bruger en URI til at referere til en bestemt post. Forskellen er, at hvis posten ikke findes, oprettes den. Hvis den allerede findes, opdateres den.

Upsert er værdifuld, når data synkroniseres mellem eksterne systemer. Det eksterne system indeholder muligvis ikke en reference til den primære nøgle i tabellen Dataverse, så du kan konfigurere alternative nøgler for tabellen Dataverse ved hjælp af værdier fra det eksterne system, der entydigt identificerer posten på begge systemer. Flere oplysninger: Definer alternative nøgler til referencerækker

Du kan se eventuelle alternative nøgler, der er defineret for en tabel, i anmærkningerne for objekttypen i dokumentet $metadata tjeneste. Flere oplysninger: Alternative nøgler.

I følgende eksempel er der en tabel med navnet sample_thing , der har en alternativ nøgle, der refererer til to kolonner: sample_key1 og sample_key2, som begge er defineret til at gemme heltalsværdier.

Bøn:

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 oprettelses- eller opdateringshandlinger får du det samme svar. Bemærk, hvordan svarheaderen OData-EntityId bruger nøgleværdierne i stedet for GUID'ens primære nøgle-id 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)

Da svaret er det samme, kan du ikke vide, om handlingen repræsenterede en Create eller Update -handling.

Hvis du har brug for at vide det, kan du bruge anmodningsheaderen Prefer: return=representation . Med denne overskrift får du et 201 Created svar, når der oprettes en post, og et 200 OK svar, når posten opdateres. Denne indstilling tilføjer en Retrieve handling, som har indflydelse på ydeevnen. Hvis du bruger anmodningsheaderen Prefer: return=representation , skal du sørge for, at du $select inkluderer den minimale mængde data, helst kun kolonnen med den primære nøgle. Flere oplysninger: Opdater med returnerede data og Opret med returnerede data.

Når du bruger alternative nøgler, skal du ikke medtage de alternative nøgleværdier i brødteksten i anmodningen.

  • Når en upsert repræsenterer en Update, ignoreres disse alternative nøgleværdier. Du kan ikke opdatere alternative nøgleværdier, mens du bruger dem til at identificere posten.
  • Når en upsert repræsenterer en Create, angives nøgleværdierne i URL-adressen for posten, hvis de ikke findes i brødteksten. Det er derfor ikke nødvendigt at medtage dem i brødteksten i anmodningen.

Flere oplysninger: Brug Upsert til at oprette eller opdatere en post

Notat

Når du opretter en ny post, vil du normalt lade systemet tildele en GUID-værdi for den primære nøgle. Dette er bedste praksis, fordi systemet genererer nøgler, der er optimeret til indekset, og det forbedrer ydeevnen. Men hvis du har brug for at oprette en post med en bestemt primær nøgle-værdi, f.eks. når nøgle-GUID-værdien genereres af et eksternt system, upsert gør handlingen det på en måde.

Undgå oprettelse eller opdatering med upsert

Nogle gange er der situationer, hvor du vil udføre en upsert, men du vil forhindre en af de potentielle handlinger: opret eller opdater. Det kan du gøre ved hjælp af If-Match overskrifterne eller If-None-Match . Du kan få mere at vide under Begræns upsert-handlinger.

Grundlæggende sletning

En sletningshandling er ligetil. Brug verbet DELETE sammen med URI'en for det objekt, du vil slette. Denne eksempelmeddelelse sletter et kontoobjekt med den primære nøgleværdi accountid , der er lig med 00000000-0000-0000-0000-000000000001.

Bøn:

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 enheden findes, får du et normalt svar med status 204 for at angive, at sletningen lykkedes. Hvis enheden ikke findes, får du et svar med status 404.

HTTP/1.1 204 No Content  
OData-Version: 4.0  

Søge efter dubletposter

Du kan finde flere oplysninger om, hvordan du kontrollerer, om der er dublerede poster under en opdateringshandling, under Registrer dubletter under opdateringshandlingen ved hjælp af web-API'en.

Slet flere poster i en enkelt anmodning

Den hurtigste måde at slette flere poster af samme type på i en enkelt anmodning er ved at bruge handlingen DeleteMultiple . På tidspunktet for denne skrivning er DeleteMultiple-handlingen en preview-funktion. Standardtabeller understøtter ikke denne handling, men det gør alle elastiske tabeller.

Notat

I forbindelse med standardtabeller anbefaler vi, at du bruger handlingen BulkDelete, der aktiverer asynkron sletning af poster, der svarer til en forespørgsel. Flere oplysninger: Slet data samlet

Flere oplysninger:

Opdater og slet dokumenter i lagerpartitioner

Hvis du opdaterer eller sletter elastiske tabeldata, der er gemt i partitioner, skal du sørge for at angive partitionsnøglen, når du får adgang til disse data.

Flere oplysninger: Valg af en PartitionId-værdi

Se også

Eksempel på grundlæggende handlinger for Web API (C#)
Web API Basic Operations Sample (JavaScript på klientsiden)
Udføre handlinger ved hjælp af Web-API'en
Opret Http-anmodninger, og håndter fejl
Forespørg om data ved hjælp af web-API'en
Oprette en tabelrække ved hjælp af Web-API'en
Hent en tabelrække ved hjælp af Web-API'en
Tilknyt og fjern tilknytning af tabelrækker ved hjælp af web-API'en
Brug web-API-funktioner
Bruge Web API-handlinger
Udfør batchhandlinger ved hjælp af web-API'en
Repræsenter en anden bruger ved hjælp af web-API'en
Udfør betingede handlinger ved hjælp af web-API'en