Deli z drugimi prek


Posodabljajte in brišite vrstice tabel z uporabo spletnega API-ja

Operacije, ki spreminjajo podatke, so osrednji del spletnega API-ja. Poleg preprostih operacij posodabljanja in brisanja lahko izvajate operacije na posameznih stolpcih tabele (atributi entitet) in sestavljate upsert zahteve, ki posodabljajo ali vstavljajo podatke, odvisno od tega, ali obstajajo.

Osnovna posodobitev

Postopki posodabljanja uporabljajo glagol HTTP PATCH . Posredujte predmet JSON, ki vsebuje lastnosti, ki jih želite posodobiti, v URI, ki predstavlja zapis. Če je posodobitev uspešna, odgovor vrne status .204 No Content

Glava If-Match: * zagotavlja, da ne ustvarite novega zapisa tako, da pomotoma izvedete operacijo upsert. Za več informacij glejte Preprečite ustvarjanje v Upsert.

Pomembno

Ko posodabljate entiteto, vključite samo lastnosti, ki jih spreminjate v telo zahteve. Če entiteto posodobite tako, da vključite vse lastnosti entitete, ki ste jo prej pridobili, operacija posodobi vsako lastnost, tudi če je vrednost enaka. Ta posodobitev lahko povzroči sistemske dogodke, ki sprožijo poslovno logiko, ki pričakuje, da so se vrednosti spremenile. Lahko povzroči, da se lastnosti v podatkih revizije zdijo posodobljene, čeprav se v resnici niso spremenile.

Ko posodabljate lastnost, statecode vedno nastavite želeno statuscodevrednost . Vrednosti statecode in so statuscode medsebojno odvisne. Za dano statecode vrednost je lahko več veljavnih statuscode vrednosti. Vendar ima vsak statecode stolpec nastavljeno eno vrednost DefaultStatus . Ko posodobite statecode brez navedbe , statuscodesistem nastavi privzeto statusno vrednost. Prav tako, če omogočite revizijo na tabeli in stolpcu statuscode , spremenjena vrednost stolpca statuscode ni zajeta v podatkih revizije, razen če jo določite v operaciji posodobitve.

opomba,

Definicija atributov vključuje lastnost RequiredLevel . Ko je ta lastnost nastavljena na SystemRequired, teh atributov ne morete nastaviti na ničelno vrednost. Za več informacij glejte Raven zahtev po atributih.

Ta primer posodobi obstoječi zapis računa z accountid vrednostjo 000000000-0000-0000-0000-000000000001.

Prositi:

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  
}  

Odziv:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

opomba,

Za informacije o združevanju in razdruževanju entitet ob posodobitvi glejte Uporaba lastnosti navigacije z eno vrednostjo.

Posodabljanje z vrnjenimi podatki

Za pridobitev podatkov od entitete, ki jo posodabljate, sestavite PATCH zahtevo tako, da vrne podatke iz posodobljenega zapisa s statusom 200 (OK). Za ta rezultat uporabite Prefer: return=representation header request.

Za nadzor, katere lastnosti se vrnejo, $select dodajte možnost poizvedbe na URL za nabor entitet. Možnost $expand poizvedbe je prezrta, če je uporabljena.

Ta primer posodobi entiteto računa in vrne zahtevane podatke v odgovoru.

Prositi:

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

Odziv:

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

Posodabljanje več zapisov v eni zahtevi

Najhitrejši način za posodobitev več zapisov iste vrste v eni zahtevi je uporaba dejanja »UpdateMultiple«. Vse standardne tabele ne podpirajo tega dejanja, vendar vse elastične tabele podpirajo.

Več informacij:

Posodobitev ene vrednosti lastnosti

Za posodobitev vrednosti posamezne lastnosti uporabite PUT zahtevo in dodajte ime lastnosti v uri entitete.

Naslednji primer posodobi name lastnost obstoječe account vrstice z vrednostjo accountid00000000-0000-0000-0000-000000000001.

Prositi:

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

Odziv:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Brisanje ene vrednosti lastnosti

Za izbris vrednosti posamezne lastnosti uporabite zahtevo DELETE , pri kateri je ime lastnosti dodano URI entiteti.

Naslednji primer izbriše vrednost description lastnosti entitete računa z vrednostjo accountid00000000-0000-0000-0000-000000000001.

Prositi:

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  

Odziv:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

opomba,

Tega pristopa z enovrednostno navigacijsko lastnostjo ne morete uporabiti za ločevanje dveh entitet. Za alternativni pristop glejte Disassociate z uporabo navigacijske lastnosti z eno vrednostjo.

Dvig vrstice tabele

Operacija upsert je podobna posodobitvi. Uporablja PATCH zahtevo in uporablja URI za sklicevanje na določen zapis. Razlika je v tem, da če zapis ne obstaja, je ustvarjen. Če že obstaja, je posodobljen.

Upsert je dragocen pri sinhronizaciji podatkov med zunanjimi sistemi. Zunanji sistem morda ne vsebuje reference na primarni ključ tabele Dataverse, zato lahko nastavite alternativne ključe za tabelo Dataverse z uporabo vrednosti iz zunanjega sistema, ki edinstveno identificirajo zapis na obeh sistemih. Več informacij: Določanje nadomestnih ključev za referenčne vrstice

Vse nadomestne ključe, ki so določeni za tabelo, si lahko ogledate v opombah za vrsto entitete v servisnem dokumentu $metadata. Več informacij: Nadomestni ključi.

V tem primeru je tabela z imenom sample_thing , ki ima nadomestni ključ, ki se sklicuje na dva stolpca: sample_key1 in sample_key2, ki sta oba definirana za shranjevanje celoštevilskih vrednosti.

Prositi:

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 operacije ustvarjanja ali posodabljanja dobite enak odgovor. Bodite pozorni na to, da glava OData-EntityId odgovora uporablja vrednosti ključa in ne identifikator primarnega ključa GUID za zapis.

Odziv:

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)

Ker je odziv enak, ne morete vedeti, ali je operacija predstavljala operacijo Create ali Update .

Če morate vedeti, lahko uporabite glavo Prefer: return=representation zahteve. Z uporabo te glave dobite odgovor, 201 Created ko je zapis ustvarjen, in odgovor, 200 OK ko je zapis posodobljen. Ta možnost doda operacijo Retrieve , ki vpliva na uspešnost. Če uporabljate glavo Prefer: return=representation zahteve, se prepričajte, da vključuje $select minimalno količino podatkov, po možnosti le stolpec primarnega ključa. Več informacij: Posodobitev z vrnjenimi podatki in Ustvari z vrnjenimi podatki.

Pri uporabi alternativnih ključev ne vključujte alternativnih vrednosti ključev v telo zahteve.

  • Ko upsert predstavlja Update, se te nadomestne vrednosti ključa prezrejo. Nadomestnih vrednosti ključa ne morete posodobiti, medtem ko jih uporabljate za prepoznavanje zapisa.
  • Ko upsert predstavlja Create, so ključne vrednosti v URL-ju nastavljene za zapis, če niso prisotne v telesu. Zato jih ni treba vključiti v telo zahteve.

Več informacij: Uporaba orodja Upsert za ustvarjanje ali posodabljanje zapisa

opomba,

Običajno pri ustvarjanju novega zapisa sistem dodeli GUID vrednost za primarni ključ. Ta praksa je najboljša, ker sistem generira ključe, optimizirane za indeks, in ta izbira izboljša zmogljivost. Če pa morate ustvariti zapis z določeno vrednostjo primarnega ključa, na primer, ko vrednost GUID ključa ustvari zunanji sistem, upsert postopek ponuja način za to.

Preprečite ustvarjanje ali posodabljanje z upsertom

Včasih želite izvesti nekaj upsert , a preprečiti eno od možnih operacij: bodisi ustvariti ali posodobiti. Te operacije lahko preprečite z uporabo glave or If-MatchIf-None-Match . Če želite več informacij, glejte Omejevanje operacij upsert.

Osnovno brisanje

Postopek brisanja je preprost. Uporabite DELETE glagol z URI-jem entitete, ki jo želite izbrisati. To sporočilo izbriše entiteto računa z primarno vrednostjo ključaaccountid, ki je enaka .00000000-0000-0000-0000-000000000001

Prositi:

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  

Odziv:

Če entiteta obstaja, prejmete običajen odgovor s stanjem 204, ki označuje, da je bil izbris uspešen. Če entitete ne najdete, prejmete odgovor s stanjem 404.

HTTP/1.1 204 No Content  
OData-Version: 4.0  

Preverjanje podvojenih zapisov

Če želite več informacij o preverjanju podvojenih zapisov med posodabljanjem, glejte Zaznavanje dvojnikov med posodabljanjem s spletnim API-jem.

Brisanje več zapisov v eni zahtevi

Za izbris več zapisov iste vrste v eni zahtevi uporabite dejanje DeleteMultiple . Standardne tabele DeleteMultiple tega delovanja ne podpirajo, vendar vse elastične mize to omogočajo.

opomba,

Za standardne tabele uporabite dejanje BulkDelete. Ta ukrep omogoča asinhrono brisanje zapisov, ki ustrezajo poizvedbi. Za več informacij glejte Brisanje podatkov v množici.

Več informacij:

Posodabljanje in brisanje dokumentov na particijah za shranjevanje

Če posodabljate ali brišete podatke elastične tabele, shranjene v particijah, določite ključ particije, ko dostopate do teh podatkov.

Več informacij: Izbiranje vrednosti PartitionId

Glej tudi

Vzorec osnovnih operacij spletnega API-ja (C#)
Vzorec osnovnih operacij spletnega API-ja (JavaScript na strani odjemalca)
Izvajanje operacij s spletnim API-jem
Sestavljanje zahtev HTTP in obravnavanje napak
Poizvedovanje podatkov s spletnim API-jem
Ustvarjanje vrstice tabele s spletnim API-jem
Pridobivanje vrstice tabele s spletnim API-jem
Povezovanje in prekinitev povezave vrstic tabele s spletnim API-jem
Uporaba funkcij spletnega API-ja
Uporaba dejanj spletnega API-ja
Izvajanje paketnih operacij s spletnim API-jem
Lažno predstavljanje drugega uporabnika s spletnim API-jem
Izvajanje pogojnih operacij s spletnim API-jem