Eksempel på Web API Conditional operationer
Udgivet: januar 2017
Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Denne gruppe af eksempler viser, hvordan du udfører handlinger, der er baseret betinget på den version af objektposten, der findes på Dynamics 365-serveren, og/eller i øjeblikket vedligeholdes af klienten. Du kan finde flere oplysninger under Udfør betingede operationer ved hjælp af web-API. Dette eksempel er implementeret som et separat projekt på følgende sprog:
Eksempel på Web API Conditional operationer (C#)
Eksempel på Web API Conditional operationer (JavaScript på klientsiden)
Dynamics 365 Web-API'en følger konventionerne i OData v4.0-protokollen, som bruger ETags til at implementere ressourceversionskontrol. Betingede Web API-operationer afhænger af denne mekanisme til versionsstyring.
Dette emne beskriver strukturen og indholdet af prøverne på et højere, sprogneutralt niveau. Det indeholder oplysninger om HTTP-anmodninger og svar, og det tilknyttede programoutput, hvis det er relevant. Gennemse de tilknyttede eksempelemner ovenfor for at få sprogspecifikke implementeringer og relaterede oplysninger om, hvordan du udfører de handlinger, der er beskrevet i dette emne.
Demonstrerer
Dette eksempel er opdelt i tre hovedsektioner, der er angivet i følgende tabel. Hver sektion indeholder et sæt relaterede Web API-handlinger, der er beskrevet mere detaljeret i den tilknyttede del af emnet Udfør betingede operationer ved hjælp af web-API .
Kodesektion |
Tilknyttede emner |
---|---|
Betinget GET |
|
Optimistisk samtidighed ved sletning og opdatering |
|
Styring af upsert-handlinger |
Følgende sektioner indeholder en kort beskrivelse af udførte Dynamics 365 Web-API-handlinger sammen med de tilsvarende HTTP-meddelelser og tilknyttet konsoloutput, som er det samme for hver sprogimplementering. Af pladshensyn er mindre relevante HTTP-headere udeladt. URI'erne for posterne varierer efter den grundlæggende organisations adresse og id'et for den post, der er tildelt af din Dynamics 365-server.
Eksempeldata
Eksemplet opretter følgende post, før hovedkodesektionerne udføres.
Objekttype |
Klienttilknyttede egenskaber |
Servertilknyttede egenskaber |
---|---|---|
Navn: Contoso Ltd. |
Id: 14e151db-9b4f-e611-80e0-00155da84c08 |
Betinget GET
Denne sektion af programmet viser, hvordan du kan udføre betingede hentninger for at optimere båndbredde på netværket og serverbehandlingen og stadig bevare den seneste posttilstand på klienten.Flere oplysninger:Betingede hentninger
Forsøg på kun at hente firmaet Contoso Ltd., hvis det ikke svarer til den aktuelle version, der er identificeret af den oprindelige ETag-værdi, der blev returneret, da firmaposten blev oprettet. Denne betingelse repræsenteres af If-None-Match-headeren.
HTTP-anmodning
GET http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08)?$select=name,revenue,telephone1,description HTTP/1.1 If-None-Match: W/"628448" OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json
HTTP-svar
HTTP/1.1 304 Not Modified
Konsoloutput
Instance retrieved using ETag: W/"628448" Expected outcome: Entity was not modified so nothing was returned.
Svarværdien, 304 Not Modified, angiver, at den aktuelle post er den mest aktuelle, så serveren returnerer ikke den ønskede post i selve svaret.
Opdater firmaet ved at ændre dets primære telefonnummer-egenskab.
HTTP-anmodning
PUT http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08)/telephone1 HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json Content-Type: application/json { "value": "555-0001" }
HTTP-svar
HTTP/1.1 204 No Content
Konsoloutput
Account telephone number updated.
Forsøg igen den samme betingede GET-handling ved hjælp af den oprindelige ETag-værdi. Denne gang returnerer handlingen de ønskede data, fordi versionen på serveren er forskellig fra (og nyere) end den version, der er identificeret i anmodningen. Som altid, når der hentes poster, indeholder svaret en ETag-header, der identificerer den aktuelle version.
HTTP-anmodning
GET http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08)?$select=name,revenue,telephone1,description HTTP/1.1 If-None-Match: W/"628448" OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json
HTTP-svar
HTTP/1.1 200 OK Content-Type: application/json; odata.metadata=minimal ETag: W/"628460" { "@odata.context":"http://cc_WebAPI_ServiceURI/$metadata#accounts(name,revenue,telephone1,description)/$entity", "@odata.etag":"W/\"628460\"", "name":"Contoso Ltd", "revenue":5000000.0000, "telephone1":"555-0001", "description":"Parent company of Contoso Pharmaceuticals, etc.", "accountid":"14e151db-9b4f-e611-80e0-00155da84c08", "_transactioncurrencyid_value":"0d4ed62e-95f7-e511-80d1-00155da84c03" }
Konsoloutput
Instance retrieved using ETag: W/"628448" { "@odata.context": "http://cc_WebAPI_ServiceURI/$metadata#accounts(name,revenue,telephone1,description)/$entity", "@odata.etag": "W/\"628460\"", "name": "Contoso Ltd", "revenue": 5000000.0, "telephone1": "555-0001", "description": "Parent company of Contoso Pharmaceuticals, etc.", "accountid": "14e151db-9b4f-e611-80e0-00155da84c08", "_transactioncurrencyid_value": "0d4ed62e-95f7-e511-80d1-00155da84c03" }
Optimistisk samtidighed ved sletning og opdatering
Denne sektion af programmet viser, hvordan du udfører betinget sletnings- og opdateringshandlinger. Den mest almindelige brug for sådanne handlinger består i at implementere en optimistisk samtidigheds-fremgangsmåde for at registrere behandling i et flerbrugermiljø.Flere oplysninger:Anvend optimistisk samtidighed
Forsøg at slette det oprindelige firma, hvis og kun hvis det svarer til den oprindelige version (ETag-værdi). Denne betingelse repræsenteres af If-Match-headeren. Handlingen mislykkedes, fordi firmaposten blev opdateret i forrige sektion, og derfor blev dens version opdateret på serveren.
HTTP-anmodning
DELETE http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08) HTTP/1.1 If-Match: W/"628448" OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json
HTTP-svar
HTTP/1.1 412 Precondition Failed Content-Type: application/json; odata.metadata=minimal OData-Version: 4.0 { "error":{ "code":"","message":"The version of the existing record doesn't match the RowVersion property provided.", . . . } }
Konsoloutput
Expected Error: The version of the existing record doesn't match the property provided. Account not deleted using ETag 'W/"628448"', status code: '412'.
Forsøg at opdatere firmaet, hvis og kun hvis det svarer til den oprindelige ETag-værdi. Igen repræsenteres denne betingelse af If-Match-headeren, og handlingen mislykkes af samme grund.
HTTP-anmodning
PATCH http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08) HTTP/1.1 If-Match: W/"628448" OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json Content-Type: application/json; charset=utf-8 { "telephone1": "555-0002", "revenue": 6000000 }
HTTP-svar
HTTP/1.1 412 Precondition Failed Content-Type: application/json; odata.metadata=minimal OData-Version: 4.0 { "error":{ "code":"","message":"The version of the existing record doesn't match the RowVersion property provided.", . . . } }
Konsoloutput
Expected Error: The version of the existing record doesn't match the property provided. Account not updated using ETag 'W/"628448"', status code: '412'.
Forsøg igen på en opdatering, men brug i stedet den aktuelle ETag-værdi fra hentningen af den sidste post i den forrige sektion.
HTTP-anmodning
PATCH http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08) HTTP/1.1 If-Match: W/"628460" OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json { "telephone1": "555-0003", "revenue": 6000000 }
HTTP-svar
HTTP/1.1 204 No Content
Konsoloutput
Account successfully updated using ETag: W/"628460", status code: '204'.
Bekræft, at opdateringen lykkedes, ved at hente og udskrive den aktuelle firmatilstand. Der bruges en grundlæggende GET-anmodning.
HTTP-anmodning
GET http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08)?$select=name,revenue,telephone1,description HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json
HTTP-svar
HTTP/1.1 200 OK Content-Type: application/json; odata.metadata=minimal ETag: W/"628461" OData-Version: 4.0 { "@odata.context":"http://cc_WebAPI_ServiceURI/$metadata#accounts(name,revenue,telephone1,description)/$entity", "@odata.etag":"W/\"628461\"", "name":"Contoso Ltd", "revenue":6000000.0000, "telephone1":"555-0003", "description":"Parent company of Contoso Pharmaceuticals, etc.", "accountid":"14e151db-9b4f-e611-80e0-00155da84c08", "_transactioncurrencyid_value":"0d4ed62e-95f7-e511-80d1-00155da84c03" }
Konsoloutput
{ "@odata.context": "http://cc_WebAPI_ServiceURI/$metadata#accounts(name,revenue,telephone1,description)/$entity", "@odata.etag": "W/\"628461\"", "name": "Contoso Ltd", "revenue": 6000000.0, "telephone1": "555-0003", "description": "Parent company of Contoso Pharmaceuticals, etc.", "accountid": "14e151db-9b4f-e611-80e0-00155da84c08", "_transactioncurrencyid_value": "0d4ed62e-95f7-e511-80d1-00155da84c03" }
Styring af upsert-handlinger
Denne sektion af programmet viser, hvordan du udfører betingede PATCH-handlinger ved at begrænse upsert-handlinger, så de udføres som kun-opdaterings- eller kun indsætnings-handlinger.Flere oplysninger:Begræns upsert-handlinger
Forsøg at indsætte, uden at opdatere, de primære telefon- og omsætningsegenskaber for dette firma.If-None-Match-headeren med værdien * repræsenterer denne upsert-tilstand. Handlingen mislykkedes, fordi denne firmapost stadig findes på serveren (medmindre den blev slettet samtidig af en anden bruger eller proces).
HTTP-anmodning
PATCH http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08) HTTP/1.1 If-None-Match: * OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json Content-Type: application/json; charset=utf-8 { "telephone1": "555-0004", "revenue": 7500000 }
HTTP-svar
HTTP/1.1 412 Precondition Failed Content-Type: application/json; odata.metadata=minimal OData-Version: 4.0 { "error":{ "code":"","message":"A record with matching key values already exists.", . . . } }
Konsoloutput
Expected Error: A record with matching key values already exists. Account not updated using ETag 'W/"628448", status code: '412'.
Forsøg at udføre den samme opdateringshandling uden oprettelse. For at kunne gøre det bruges den betingede If-Match-header med værdien *. Handlingen lykkes, fordi posten findes på serveren.
HTTP-anmodning
PATCH http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08) HTTP/1.1 If-Match: * OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json Content-Type: application/json; charset=utf-8 { "telephone1": "555-0005", "revenue": 7500000 }
HTTP-svar
HTTP/1.1 204 No Content
Konsoloutput
Account updated using If-Match '*'
Hent og output den aktuelle firmatilstand med en grundlæggende GET-anmodning. Bemærk, at den returnerede ETag-værdi er blevet ændret, så den afspejler den nye opdaterede version af firmaposten.
HTTP-anmodning
GET http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08)?$select=name,revenue,telephone1,description HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json
HTTP-svar
HTTP/1.1 200 OK Content-Type: application/json; odata.metadata=minimal ETag: W/"628463" OData-Version: 4.0 { "@odata.context":"http://cc_WebAPI_ServiceURI/$metadata#accounts(name,revenue,telephone1,description)/$entity", "@odata.etag":"W/\"628463\"", "name":"Contoso Ltd","revenue":7500000.0000, "telephone1":"555-0005", "description":"Parent company of Contoso Pharmaceuticals, etc.", "accountid":"14e151db-9b4f-e611-80e0-00155da84c08", "_transactioncurrencyid_value":"0d4ed62e-95f7-e511-80d1-00155da84c03" }
Konsoloutput
{ "@odata.context": "http://cc_WebAPI_ServiceURI/$metadata#accounts(name,revenue,telephone1,description)/$entity", "@odata.etag": "W/\"628463\"", "name": "Contoso Ltd", "revenue": 7500000.0, "telephone1": "555-0005", "description": "Parent company of Contoso Pharmaceuticals, etc.", "accountid": "14e151db-9b4f-e611-80e0-00155da84c08", "_transactioncurrencyid_value": "0d4ed62e-95f7-e511-80d1-00155da84c03" }
Slet firmaet med et grundlæggende DELETE.
HTTP-anmodning
DELETE http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08) HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json
HTTP-svar
HTTP/1.1 204 No Content
Konsoloutput
Account was deleted.
Forsøg at opdatere firmaet, hvis det findes, ligesom i trin 2. Igen er denne betingelse repræsenteret af If-Match -headeren med værdien *. Denne handling mislykkes, fordi denne post lige er blevet slettet. Men hvis denne If-Match -header havde manglet, ville den resulterende grundlæggende upsert-handling have oprettet en ny post.
HTTP-anmodning
PATCH http://cc_WebAPI_ServiceURI/accounts(14e151db-9b4f-e611-80e0-00155da84c08) HTTP/1.1 If-Match: * OData-MaxVersion: 4.0 OData-Version: 4.0 Accept: application/json Content-Type: application/json; charset=utf-8 { "telephone1": "555-0006", "revenue": 7500000 }
HTTP-svar
HTTP/1.1 404 Not Found Content-Type: application/json; odata.metadata=minimal OData-Version: 4.0 { "error":{ "code":"","message":"account With Id = 14e151db-9b4f-e611-80e0-00155da84c08 Does Not Exist", . . . } }
Konsoloutput
Expected Error: Account with Id = 14e151db-9b4f-e611-80e0-00155da84c08 does not exist. Account not updated because it does not exist, status code: '404'.
Der er ingen grund til at rydde op i eksempeldata, fordi den ene firmapost allerede blev blevet slettet i trin 4.
Se også
Brug Microsoft Dynamics 365 Web API
Udfør betingede operationer ved hjælp af web-API
Eksempel på Web API Conditional operationer (C#)
Eksempel på Web API Conditional operationer (JavaScript på klientsiden)
Microsoft Dynamics 365
© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret