Deli putem


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

Operacije za modifikaciju podataka su ključni deo Veb API-ja. Pored jednostavnih operacija ažuriranja i brisanja, možete izvoditi operacije na pojedinačnim kolonama tabele (atributi entiteta) i sastaviti upsert zahteve koji će ažurirati ili ubaciti 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. Odgovor sa statusom se 204 No Content vraća ako je ažuriranje uspešno.

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

Važno

Kada ažurirate entitet, uključite samo svojstva koja menjate u telu zahteva. Jednostavno ažuriranje svojstava entiteta koji ste prethodno preuzeli, i uključivanje tog JSON-a u vaš zahtev, ažuriraće svaku osobinu iako je vrednost ista. Ovo može izazvati sistemske događaje koji mogu pokrenuti poslovnu logiku koja očekuje da su se vrednosti promenile. Ovo može dovesti do toga da se čini da su svojstva ažurirana u podacima o reviziji kada se u stvari nisu promenila.

Kada ažurirate imovinu statecode , važno je da uvek podesite željeni statuscode. statecode i statuscode imaju zavisne vrednosti. Može postojati više validnih statuscode vrednosti za datu statecode vrednost, ali svaka statecode kolona ima jednu DefaultStatus vrednost konfigurisanu. Kada ažurirate statecode bez navođenja , statuscodepodrazumevana vrednost statusa će biti postavljena od strane sistema. Takođe, kada je revizija omogućena u tabeli i koloni, statuscode promenjena vrednost za kolonu statuscode neće biti zarobljena u podacima revizije, osim ako je navedena u operaciji ažuriranja.

Belešku

Definicija atributa uključuje osobinu RequiredLevel . Kada je ovo podešeno na SystemRequired, ne možete podesiti ove atribute na nultu vrednost. Više informacija: Nivo zahteva za atribute

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

Pogledajte Korišćenje jednovrednih svojstava navigacije za informacije o povezivanju i razdvajanju entiteta prilikom ažuriranja.

Ažurirajte sa vratitim podacima

Da biste preuzeli podatke iz entiteta koji ažurirate, možete sastaviti svoj PATCH zahtev tako da se podaci iz kreiranog zapisa vrate sa statusom 200 (OK). Da biste dobili ovaj rezultat, morate koristiti zaglavlje Prefer: return=representation zahteva.

Da biste kontrolisali koja svojstva se vraćaju, dodajte opciju upita $select URL-u skupa 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. U vreme pisanja ovog teksta, akcija UpdateMultiple. Ne podržavaju sve standardne tabele ovu akciju, ali sve elastične tabele podržavaju.

Još informacija:

Ažurirajte jednu vrednost osobine

Kada želite da ažurirate samo jednu vrednost osobine, koristite PUT zahtev sa imenom osobine koja se dodaje na Uri entiteta.

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

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 dodanim na Uri entiteta.

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

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

Ovo se ne može koristiti sa jednovrednom navigacijskom osobinom za razdvajanje dva entiteta. Za alternativni pristup, pogledajte Prekid veze sa jednovrednom navigacijom 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 ne može da sadrži 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. Sa ovim zaglavljem, dobijate 201 Created odgovor kada se kreira zapis 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, ne bi trebalo da uključite alternativne vrednosti ključa 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 dozvolićete sistemu da dodeli GUID vrednost za primarni ključ. Ovo je najbolja praksa jer sistem generiše ključeve koji su optimizovani za indeks i to 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 postoje situacije u kojima želite da izvršite upsert, ali želite da sprečite jednu od potencijalnih operacija: ili kreirajte ili ažurirajte. To možete uraditi pomoću 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 accountid primarnom ključnom vrednošću jednakom 00000000-0000-0000-0000-0000000000001.

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

Najbrži način da izbrišete više zapisa istog tipa u jednom zahtevu je da koristite akciju DeleteMultiple . U vreme pisanja ovog teksta, DeleteMultiple akcija je funkcija pregleda. Standardne tabele ne podržavaju ovu akciju, ali sve elastične tabele podržavaju.

Belešku

Za standardne tabele, preporučujemo korišćenje akcije BulkDelete, koja omogućava asinhrono brisanje zapisa koji odgovaraju upitu. Više informacija: Brisanje podataka u velikoj meri

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, budite sigurni da specificirate 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