Deli putem


Ažurirajte i brišite redove tabele pomoću Veb API-ja

Operacije koje modifikuju podatke su osnovni deo Veb API-ja. Pored jednostavnih operacija ažuriranja i brisanja, možete izvoditi operacije na kolonama pojedinačnih tabela (atributi entiteta) i sastavljati upsert zahteve koji ažuriraju ili ubacuju podatke u zavisnosti od toga da li postoje.

Osnovno ažuriranje

Operacije ažuriranja koriste HTTP PATCH glagol. Prosledite JSON objekat koji sadrži osobine koje želite da ažurirate na URI koji predstavlja zapis. Ako je ažuriranje uspešno, odgovor vraća status 204 No Content.

Zaglavlje If-Match: * osigurava da ne kreirate novi zapis slučajnim izvođenjem operacije upsert. Za više informacija, pogledajte Sprečite stvaranje u upsert-u.

Važno

Kada ažurirate entitet, uključite samo svojstva koja menjate u telu zahteva. Ako ažurirate entitet uključivanjem svih svojstava entiteta koji ste prethodno preuzeli, operacija ažurira svaku osobinu čak i ako je vrednost ista. Ovo ažuriranje može izazvati sistemske događaje koji pokreću poslovnu logiku koja očekuje da su se vrednosti promenile. To može dovesti do toga da se svojstva ažuriraju u podacima o reviziji kada se zapravo ne menjaju.

Kada ažurirate osobinu statecode , uvek podesite željenu statuscode. I statecodestatuscode vrednosti zavise jedna od druge. Za datu statecode vrednost, može postojati više važećih statuscode vrednosti. Međutim, svaka statecode kolona ima jednu DefaultStatus vrednost konfigurisanu. Kada ažurirate statecode bez navođenja , statuscodesistem postavlja podrazumevanu vrednost statusa. Takođe, ako omogućite reviziju u tabeli i koloni, statuscode promenjena vrednost za kolonu statuscode nije zarobljena u podacima revizije, osim ako je ne navedete u operaciji ažuriranja.

Belešku

Definicija atributa uključuje osobinu RequiredLevel . Kada je ova osobina podešena na SystemRequired, ne možete podesiti ove atribute na nultu vrednost. Za više informacija, pogledajte Nivo zahteva atributa.

Ovaj primer ažurira postojeći zapis računa sa accountid vrednošću 00000000-0000-0000-0000-000000000001.

Zahtev:

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  
}  

Odgovor:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Belešku

Za informacije o povezivanju i razdvajanju entiteta prilikom ažuriranja, pogledajte Korišćenje jednovrednih svojstava navigacije.

Ažurirajte sa vratitim podacima

Da biste preuzeli podatke iz entiteta koji ažurirate, sastavite zahtev PATCH tako da vraća podatke iz ažuriranog zapisa sa statusom KSNUMKS (OK). Da biste dobili ovaj rezultat, koristite zaglavlje Prefer: return=representation zahteva.

Da biste kontrolisali koja svojstva se vraćaju, dodajte opciju upita $select URL-u za skup entiteta. Opcija $expand upita se ignoriše ako se koristi.

Ovaj primer ažurira entitet naloga i vraća tražene podatke u odgovoru.

Zahtev:

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

Odgovor:

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

Ažurirajte više zapisa u jednom zahtevu

Najbrži način za ažuriranje više zapisa istog tipa u jednom zahtevu je da koristite akciju UpdateMultie. Ne podržavaju sve standardne tabele ovu akciju, ali sve elastične tabele podržavaju.

Još informacija:

Ažurirajte jednu vrednost osobine

Da biste ažurirali vrednost jedne osobine, koristite PUT zahtev i dodajte ime osobine u Uri entiteta.

Sledeći primer ažurira osobinu name postojećeg account reda sa accountid vrednošću 00000000-0000-0000-0000-000000000001.

Zahtev:

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

Odgovor:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Obrišite jednu vrednost osobine

Da biste izbrisali vrednost jedne osobine, koristite DELETE zahtev sa imenom osobine koja se dodaje URI-ju entiteta.

Sledeći primer briše vrednost description imovine entiteta računa sa accountid vrednošću 00000000-0000-0000-0000-000000000001.

Zahtev:

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  

Odgovor:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Belešku

Ne možete koristiti ovaj pristup sa jednovrednom navigacijskom osobinom da biste odvojili dva entiteta. Za alternativni pristup, pogledajte Razdvajanje pomoću jednovredne navigacione osobine.

Upsert red tabele

Operacija upsert je slična ažuriranju. Koristi PATCH zahtev i koristi URI za pozivanje na određeni zapis. Razlika je u tome što ako zapis ne postoji, on je stvoren. Ako već postoji, ažurira se.

Upsert je dragocen prilikom sinhronizacije podataka između spoljnih sistema. Spoljni sistem možda neće sadržavati referencu na primarni ključ Dataverse tabele, tako da možete konfigurisati alternativne ključeve za Dataverse tabelu koristeći vrednosti iz spoljnog sistema koji jedinstveno identifikuju zapis na oba sistema. Više informacija: Definišite alternativne ključeve za referentne redove

Možete videti sve alternativne ključeve koji su definisani za tabelu u napomenama za tip entiteta u dokumentu $metadata servisa. Više informacija: Alternativni tasteri.

U sledećem primeru, postoji tabela sa imenom sample_thing koja ima alternativni ključ koji se odnosi na dve kolone: sample_key1 i sample_key2, koji su oba definisana za čuvanje celih vrednosti.

Zahtev:

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

Za obe operacije kreiranja ili ažuriranja, dobijate isti odgovor. Obratite pažnju na to kako zaglavlje odgovora OData-EntityId koristi ključne vrednosti, a ne identifikator primarnog ključa GUID-a za zapis.

Odgovor:

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)

Pošto je odgovor isti, ne možete znati da li je operacija predstavljala operaciju Create ili Update .

Ako želite da znate, možete koristiti zaglavlje Prefer: return=representation zahteva. Korišćenjem ovog zaglavlja 201 Created , dobijate odgovor kada je zapis kreiran i 200 OK odgovor kada se zapis ažurira. Ova opcija dodaje operaciju Retrieve , koja utiče na performanse. Ako koristite zaglavlje Prefer: return=representation zahteva, uverite se da vaš $select uključuje minimalnu količinu podataka, poželjno samo kolonu primarnog ključa. Više informacija: Ažuriraj sa vraćenim podacima i Kreiraj sa vraćenim podacima.

Kada koristite alternativne ključeve, nemojte uključivati alternativne ključne vrednosti u telu zahteva.

  • Kada upsert predstavlja Update, ove alternativne ključne vrednosti se ignorišu. Ne možete ažurirati alternativne ključne vrednosti dok ih koristite za identifikaciju zapisa.
  • Kada upsert predstavlja Create, ključne vrednosti u URL-u su postavljene za zapis ako nisu prisutne u telu. Dakle, nema potrebe da ih uključite u telo zahteva.

Više informacija: Koristite Upsert za kreiranje ili ažuriranje zapisa

Belešku

Normalno kada kreirate novi zapis dozvolite sistemu da dodeli GUID vrednost za primarni ključ. Ova praksa je najbolja jer sistem generiše ključeve koji su optimizovani za indeks i ovaj izbor poboljšava performanse. Ali ako je potrebno da kreirate zapis sa određenom primarnom ključnom vrednošću, kao što je kada je ključna GUID vrednost generisana od strane spoljnog sistema, upsert operacija pruža način da se to uradi.

Sprečite kreiranje ili ažuriranje sa upsert

Ponekad, želite da izvršite upsert , ali sprečite jednu od potencijalnih operacija: ili kreirajte ili ažurirajte. Možete sprečiti ove operacije korišćenjem If-MatchIf-None-Match ili zaglavlja. Za više informacija, pogledajte Ograničite upsert operacije.

Osnovno brisanje

Operacija brisanja je jednostavna. Koristite DELETE glagol sa URI-jem entiteta koji želite da izbrišete. Ovaj primer poruke briše entitet naloga sa primarnom ključnom accountid vrednošću jednakom .00000000-0000-0000-0000-000000000001

Zahtev:

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  

Odgovor:

Ako entitet postoji, dobijate normalan odgovor sa statusom 204 koji ukazuje na to da je brisanje bilo uspešno. Ako entitet nije pronađen, dobićete odgovor sa statusom 404.

HTTP/1.1 204 No Content  
OData-Version: 4.0  

Provera duplih zapisa

Za više informacija o tome kako proveriti duple zapise tokom operacije ažuriranja, pogledajte Otkrivanje duplikata tokom operacije ažuriranja pomoću Veb API-ja.

Izbrišite više zapisa u jednom zahtevu

Da biste izbrisali više zapisa istog tipa u jednom zahtevu, koristite akciju DeleteMultiple . Standardne tabele ne podržavaju ovu akciju DeleteMultiple , ali sve elastične tabele podržavaju.

Belešku

Za standardne tabele, koristite akciju BulkDelete. Ova akcija omogućava asinhrono brisanje zapisa koji odgovaraju upitu. Za više informacija, pogledajte Brisanje podataka u rasutom stanju.

Još informacija:

Ažuriranje i brisanje dokumenata u particijama za skladištenje

Ako obnavljate ili brišete podatke elastične tabele smeštene na particijama, navedite ključ particije kada pristupate tim podacima.

Više informacija: Izbor PartitionId vrednosti

Vidi takođe

Uzorak osnovnih operacija Veb API-ja (C #)
Uzorak osnovnih operacija Veb API-ja (JavaScript na strani klijenta)
Obavljanje operacija pomoću Veb API-ja
Sastavite Http zahteve i greške u rukovanju
Upitni podaci pomoću Veb API-ja
Kreiranje reda tabele pomoću Veb API-ja
Preuzmite red tabele koristeći Veb API
Povežite i odvojite redove tabele koristeći Veb API
Koristite Veb API funkcije
Koristite Veb API akcije
Izvršite batch operacije koristeći Veb API
Lažno predstavljanje drugog korisnika koristeći Veb API
Izvršite uslovne operacije koristeći Veb API