Zdieľať cez


Aktualizujte a mažte riadky tabuliek pomocou Web API

Operácie, ktoré menia dáta, sú jadrovou súčasťou Web API. Okrem jednoduchých operácií aktualizácie a mazania môžete vykonávať operácie na jednotlivých stĺpcoch tabuľky (atribúty entít) a zostavovať upsert požiadavky, ktoré buď aktualizujú, alebo vkladajú údaje podľa ich existencie.

Základná aktualizácia

Operácie aktualizácie používajú príkaz HTTP PATCH . Odovzdajte objekt JSON obsahujúci vlastnosti, ktoré chcete aktualizovať, na identifikátor URI, ktorý predstavuje záznam. Ak je aktualizácia úspešná, odpoveď vráti stav 204 No Content.

Hlavička If-Match: * zaisťuje, že nevytvoríte nový záznam náhodným vykonaním operácie upsert. Pre viac informácií pozri Prevent create in upsert.

Dôležité

Pri aktualizácii entity zahrňte do tela žiadosti iba vlastnosti, ktoré meníte. Ak aktualizujete entitu zahrnutím všetkých vlastností entity, ktorú ste predtým získali, operácia aktualizuje každú vlastnosť, aj keď je hodnota rovnaká. Táto aktualizácia môže spôsobiť systémové udalosti, ktoré spustia obchodnú logiku očakávajúcu zmenu hodnôt. Môže to spôsobiť, že vlastnosti sa v auditných dátach javia ako aktualizované, hoci sa v skutočnosti nezmenili.

Keď aktualizujete vlastnosť, statecode vždy nastavte požadovanú statuscode. Hodnoty statecode a statuscode závisia od seba. Pre danú statecode hodnotu môže existovať viacero platných statuscode hodnôt. Každý statecode stĺpec však má nastavenú jednu hodnotu DefaultStatus . Keď aktualizujete statecode bez špecifikácie , statuscodesystém nastaví predvolenú hodnotu stavu. Tiež, ak povolíte auditovanie tabuľky a stĺpca statuscode , zmenená hodnota stĺpca statuscode sa v auditných dátach nezachytí, pokiaľ ju nešpecifikujete v aktualizácii.

Poznámka

Definícia atribútov zahŕňa vlastnosť RequiredLevel . Keď je táto vlastnosť nastavená na SystemRequired, nemôžete nastaviť tieto atribúty na nulovú hodnotu. Pre viac informácií pozri Úroveň požiadaviek atribútov.

Tento príklad aktualizuje existujúci záznam obchodného vzťahu s hodnotou accountid 000000000-0000-0000-0000-000000000001.

Žiadosť:

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  
}  

Odpoveď:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Poznámka

Pre informácie o asociácii a disasociácii entít pri aktualizácii pozri Použitie navigačných vlastností s jednou hodnotou.

Aktualizácia s vrátenými údajmi

Ak chcete získať dáta od entity, ktorú aktualizujete, zostavte svoju PATCH požiadavku tak, aby vracala dáta z aktualizovaného záznamu so stavom 200 (OK). Na získanie tohto výsledku použite Prefer: return=representation header request.

Na ovládanie, ktoré vlastnosti sa vrátia, pridajte $select možnosť dotazu k URL pre súbor entít. Ak $expand sa použije, možnosť dotazu sa ignoruje.

Tento príklad aktualizuje entitu obchodného vzťahu a vráti požadované údaje v odpovedi.

Žiadosť:

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

Odpoveď:

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

Aktualizácia viacerých záznamov v jednej žiadosti

Najrýchlejší spôsob, ako aktualizovať viacero záznamov rovnakého typu v jednej požiadavke, je použiť akciu UpdateMulti. Nie všetky štandardné tabuľky podporujú túto akciu, ale všetky elastické tabuľky áno.

Ďalšie informácie:

Aktualizácia hodnoty jednej vlastnosti

Na aktualizáciu hodnoty jednej vlastnosti použite požiadavku PUT a pridajte názov vlastnosti do uri entity.

Nasledujúci príklad aktualizuje vlastnosť existujúceho account riadku hodnotou accountid00000000-0000-0000-0000-000000000001.name

Žiadosť:

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

Odpoveď:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Odstránenie hodnoty jednej vlastnosti

Na vymazanie hodnoty jednej vlastnosti použite požiadavku DELETE s názvom vlastnosti pripojeným k URI entity.

Nasledujúci príklad vymaže hodnotu description vlastnosti účtovnej entity s hodnotou accountid00000000-0000-0000-0000-000000000001.

Žiadosť:

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  

Odpoveď:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Poznámka

Tento prístup nemôžete použiť s jednohodnotovou navigačnou vlastnosťou na oddelenie dvoch entít. Pre alternatívny prístup pozri Disassociate použitím navigačnej vlastnosti s jednou hodnotou.

Zobrazenie riadka tabuľky

Operácia upsert je podobná aktualizácii. Používa požiadavku PATCH a používa identifikátor URI na odkazovanie na konkrétny záznam. Rozdiel je v tom, že ak záznam neexistuje, je vytvorený. Ak už existuje, aktualizuje sa.

Upsert je cenný pri synchronizácii údajov medzi externými systémami. Externý systém nemusí obsahovať odkaz na primárny kľúč tabuľky Dataverse, takže alternatívne kľúče pre tabuľku Dataverse môžete nakonfigurovať pomocou hodnôt z externého systému, ktoré jednoznačne identifikujú záznam na oboch systémoch. Ďalšie informácie: Definujte alternatívne kľúče pre referenčné riadky

Všetky alternatívne kľúče, ktoré sú definované pre tabuľku, môžete vidieť v poznámkach pre typ entity v $metadata servisnom doklade. Ďalšie informácie: Alternatívne kľúče.

V nasledujúcom príklade je tabuľka s názvom sample_thing , ktorá má alternatívny kľúč, ktorý odkazuje na dva stĺpce: sample_key1 a sample_key2, ktoré sú definované na ukladanie celočíselných hodnôt.

Žiadosť:

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

Pri operáciách vytvárania aj aktualizácie dostanete rovnakú odpoveď. Všimnite si, ako OData-EntityId hlavička odpovede používa hodnoty kľúča namiesto identifikátora primárneho kľúča GUID pre záznam.

Odpoveď:

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)

Keďže odpoveď je rovnaká, nemôžete vedieť, či operácia predstavuje operáciu Create alebo Update .

Ak potrebujete vedieť, môžete použiť hlavičku požiadavky Prefer: return=representation . Použitím tejto hlavičky dostanete 201 Created odpoveď pri vytvorení záznamu a 200 OK odpoveď pri aktualizácii záznamu. Táto možnosť pridá operáciu Retrieve , ktorá má vplyv na výkon. Ak používate hlavičku požiadavky Prefer: return=representation , uistite sa, že obsahuje $select minimálne množstvo údajov, najlepšie iba stĺpec primárneho kľúča. Ďalšie informácie: Aktualizácia s vrátenými údajmi a Vytvorenie s vrátenými údajmi.

Pri používaní alternatívnych kľúčov nezahrňujte hodnoty alternatívnych kľúčov do tela požiadavky.

  • Keď upsert predstavuje , Updatetieto alternatívne hodnoty kľúča sa ignorujú. Hodnoty alternatívneho kľúča nie je možné aktualizovať, keď ich používate na identifikáciu záznamu.
  • Keď upsert predstavuje Create, hodnoty kľúča v URL adrese sa nastavia pre záznam, ak sa nenachádzajú v tele. Nie je teda potrebné ich uvádzať v tele žiadosti.

Ďalšie informácie: Použitie Upsert na vytvorenie alebo aktualizáciu záznamu

Poznámka

Zvyčajne pri vytváraní nového záznamu necháte systém priradiť GUID hodnotu primárnemu kľúču. Táto prax je najlepšia, pretože systém generuje kľúče optimalizované pre index a táto voľba zlepšuje výkon. Ak však potrebujete vytvoriť záznam s konkrétnou hodnotou primárneho kľúča, napríklad keď je hodnota GUID kľúča generovaná externým systémom, operácia upsert poskytuje spôsob, ako to urobiť.

Zabráňte vytváraniu alebo aktualizácii pomocou upsert

Niekedy chcete vykonať a upsert zabrániť jednej z potenciálnych operácií: buď vytvoriť, alebo aktualizovať. Tieto operácie môžete zabrániť použitím If-Match hlavičiek or If-None-Match . Ďalšie informácie nájdete v téme Obmedzenie operácií upsert.

Základné vymazanie

Operácia odstránenia je jednoduchá. Použite DELETE sloveso s identifikátorom URI entity, ktorú chcete odstrániť. Táto príkladová správa maže entitu účtu s primárnou hodnotou kľúča accountid rovnou .00000000-0000-0000-0000-000000000001

Žiadosť:

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  

Odpoveď:

Ak entita existuje, dostanete normálnu odpoveď so stavom 204, ktorá označuje, že odstránenie bolo úspešné. Ak sa entita nenájde, dostanete odpoveď so stavom 404.

HTTP/1.1 204 No Content  
OData-Version: 4.0  

Kontrola duplicitných záznamov

Ďalšie informácie o tom, ako skontrolovať duplicitné záznamy počas operácie aktualizácie, nájdete v téme Zisťovanie duplikátov počas operácie aktualizácie pomocou webového rozhrania API.

Odstránenie viacerých záznamov v jednej žiadosti

Ak chcete vymazať viacero záznamov rovnakého typu v jednej požiadavke, použite túto akciu DeleteMultiple . Štandardné tabuľky túto akciu DeleteMultiple nepodporujú, ale všetky elastické tabuľky áno.

Poznámka

Pre štandardné tabuľky použite akciu BulkDelete. Táto akcia umožňuje asynchrónne vymazanie záznamov, ktoré zodpovedajú dotazu. Pre viac informácií pozri Delete data in bulk.

Ďalšie informácie:

Aktualizácia a odstránenie dokumentov v oddieloch úložiska

Ak aktualizujete alebo mažete elastické tabuľkové dáta uložené v partíciách, pri prístupe k týmto dátam špecifikujte partíciový kľúč.

Ďalšie informácie: Výber hodnoty PartitionId

Pozrite si tiež:

Ukážka základných operácií webového rozhrania API (C#)
Ukážka základných operácií webového rozhrania API (JavaScript na strane klienta)
Vykonávanie operácií pomocou webového rozhrania API
Vytváranie požiadaviek HTTP a spracovanie chýb
Dotazovanie údajov pomocou webového rozhrania API
Vytvorenie riadka tabuľky pomocou webového rozhrania API
Načítanie riadka tabuľky pomocou webového rozhrania API
Priradenie a zrušenie priradenia riadkov tabuľky pomocou webového rozhrania API
Používanie funkcií webového rozhrania API
Používanie akcií webového rozhrania API
Vykonávanie dávkových operácií pomocou webového rozhrania API
Zosobnenie iného používateľa pomocou webového rozhrania API
Vykonávanie podmienených operácií pomocou webového rozhrania API