Del via


Brug OData-slutpunktet med Ajax og JScript-webressourcer

 

Udgivet: november 2016

Gælder for: Dynamics CRM 2015

Med OData-slutpunktet kan du interagere med Microsoft Dynamics CRM 2015 og opdatering til Microsoft Dynamics CRM Online 2015-data ved hjælp af JavaScript-biblioteker. Du kan oprette script webressourcer, der bruger filer, der definerer JavaScript-bibliotekerne. Derefter knytter du funktioner i bibliotekerne til formular- eller felthændelseshandlere eller kommandohandlinger på båndet. Du kan bruge dem som ethvert andet JavaScript-bibliotek i webressourcer (HTML) på websider.

Dette emne indeholder

Ajax

Metodetunnelføring via POST

Få adgang til serverens URL-adresse

Brug XMLHttpRequest

Brug jQuery

Arbejd med datoer

Ajax

AJAX (Asynkron JavaScript og XML) er en webudviklingsteknik, der bruges til at oprette interaktive webprogrammer. Der sendes serveranmodninger fra browseren i baggrunden ved hjælp af et XmlHttpRequest-objekt. Selv om du kan sende synkrone anmodninger, er den anbefalede praksis at sende asynkrone anmodninger. Asynkrone anmodninger kræver to JScript-funktioner, en til at sende anmodningen og en anden "tilbagekaldsfunktion" til at behandle et svar.

JSON

JSON-formatet (JavaScript Object Notation) bruges til serialisering og overførsel af strukturerede data stort set på samme måde, som XML bruges normalt. Ligesom XML er det tekstbaseret og designet til at kunne læses af mennesker. Når du vil konvertere almindelige JavaScript-objekter til JSON-formatet, skal du bruge JSON.stringify-metoden. Da teksten i JSON definerer JavaScript-objekter, kan teksten konverteres til JavaScript-objekter ved hjælp af eval-metoden. Denne praksis skaber dog sikkerhedsrisici. Du bør bruge JSON.parse-metoden i stedet.

XmlHttpRequest

XmlHttpRequest (som også kaldes XHR) indeholder funktioner til at konfigurere og sende anmodninger og definere en tilbagekaldsfunktion, hvis anmodningen er asynkron.HTTP-svaret fra serveren indeholder en statuskode, der angiver, om anmodningen lykkedes.HTTP-statuskodeværdierne i området 200 anses for at være vellykket.

En XmlHttpRequest indeholder instruktioner til serveren om formatet af alle data, der skal medtages i svaret. Da ODATA-slutpunktet understøtter både ATOM- og JSON-formatet, har du mulighed for at anmode om, at data returneres i XMLATOM-formatet. Men med JavaScript-kode bruger den forventede typiske anmodning JSON, fordi det er let at bruge med JavaScript.

Metodetunnelføring via POST

OData-protokollen bruger de knapt så almindelige HTTP-verber PUT og DELETE og definerer desuden et nyt verbum: MERGE. Afhængigt af de understøttende biblioteker du bruger, kan der opstå problemer ved brug af disse verber. Du kan løse dette problem ved at bruge verbet POST og angive en X-HTTP-MethodHTTP-header med den ønskede handling. Brug setRequestHeader-metoden til at tilsidesætte den handling, der er angivet i XmlHttpRequest.

Få adgang til serverens URL-adresse

Det første, du skal gøre, når du begynder at bruge ODATA-slutpunktet med JavaScript, er at finde frem til URL for organisationsroden URL. Brug funktionen getClientUrl fra kontekstobjektet.

Brug XMLHttpRequest

jQuery er et rigtig godt bibliotek med en lang række anvendelser, men brug af jQuery er ikke en forudsætning for at udføre handlinger ved hjælp af ODATA-slutpunktet for Microsoft Dynamics 365. Vi anbefaler, at du ikke bruger jQuery i formularscripts eller kommandoscripts, der køres på programsider, men bruger XmlHttpRequest direkte, så du undgår at skulle indlæse jQuery-biblioteket.jQuery**$.ajax** bruger den XmlHttpRequest, der er tilgængelig i browseren. Brug af dette objekt direkte er lidt anderledes end at bruge $.ajax. Hvis du allerede er fortrolig med brugen af XMLHttpRequest, bør du fortsætte med at bruge den. Hvis du altid har brugt jQuery, kan du overveje at bruge XMLHttpRequest direkte.Flere oplysninger:XMLHttpRequest-objekt

Med XmlHttpRequest opretter du en hændelseshandler til onreadystatechange-hændelsen og registrerer, når anmodningen er fuldført. I hændelseshandleren skal du undersøge returnerede statuskode for at finde ud af, om anmodningen lykkedes. Til slut skal du bruge metoderne open og send. I følgende eksempel bruges XmlHttpRequest til at oprette en ny firmapost.

var account = {};
    account.Name = "Sample Account";
    var jsonAccount = JSON.stringify(account);

    var createAccountReq = new XMLHttpRequest();
    createAccountReq.open("POST", Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc/AccountSet", true);
    createAccountReq.setRequestHeader("Accept", "application/json");
    createAccountReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    createAccountReq.onreadystatechange = function () {
        createAccountReqCallBack(this);
    };
    createAccountReq.send(jsonAccount);

function createAccountReqCallBack(createAccountReq) {
    if (createAccountReq.readyState == 4 /* complete */) {
        createAccountReq.onreadystatechange = null; //avoids memory leaks
        if (createAccountReq.status == 201) {
            //Success
            var newAccount = JSON.parse(createAccountReq.responseText).d;
        }
        else {
            //Failure
            errorHandler(createAccountReq);
        }
    }
};

Du kan finde flere eksempler på brug af XMLHttpRequest under Eksempel: Oprette, hente, opdatere og slette vha. OData-slutpunktet med JavaScript

Brug jQuery

jQuery er et populært JavaScript-bibliotek, der følger med programmet webprojekter i Microsoft Visual Studio.jQuery giver en omfattende ramme af objekter og funktioner, hvor du forespørge og arbejde med HTML-sider ved hjælp af JavaScript. Når du vil bruge XMLHttpRequest, kan du anvende jQuery.ajax-metoden i jQuery.

Bemærk

Vi fraråder brug af jQuery i formularscripts og kommandoer på båndet.Flere oplysninger:Brug af jQuery.

Der refereres til jQuery-objektet ved hjælp af $-tegnet, så den kort form af jQuery.ajax er $.ajax.ajax-metoden bruges typisk med en tvingende syntaks, og anmodningen sendes, så snart en forekomst af objektet er instantieret. I følgende eksempel oprettes en ny firmapost.

var account = {};
account.Name = "Sample Account";
var jsonAccount = window.JSON.stringify(account);
$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    datatype: "json",
    url: Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc/AccountSet",
    data: jsonAccount,
    beforeSend: function (XMLHttpRequest) {
        //Specifying this header ensures that the results will be returned as JSON.
        XMLHttpRequest.setRequestHeader("Accept", "application/json");
    },
    success: function (data, textStatus, XmlHttpRequest) {
        account = data.d;
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        errorHandler(XMLHttpRequest, textStatus, errorThrown);
    }
});

I følgende tabel vises de egenskaber, du er nødt til at kende for at kunne behandle HTTP-anmodninger og svar ved hjælp af ODATA-slutpunktet for Microsoft Dynamics 365.

Egenskabsnavn

Skriv

Kommentarer

type

string

Brug GET, når du henter data, og POST til alle andre handlinger.Flere oplysninger:Indstil eksplicit anmodningsheaderen til en anden HTTP-handling

contentType

string

Angiver typen indhold, der sendes til serveren. Brug application/json; charset=utf-8, når du sender data i JSON-formatet.

dataType

string

Typen af data, der forventes at blive returneret af serveren. Benyt json.

> [!NOTE] >

Det er muligvis ikke nok blot at indstille denne egenskab.Flere oplysninger:Indstil eksplicit anmodningsheaderen til at acceptere JSON

data

object

Indstil dette til værdien af et JSON-objekt i forbindelse med oprettelses- eller opdateringshandlinger.

url

string

Den ODATA-slutpunkts-URL, der passer til den handling, du udfører.

beforeSend

function

En funktion, du kan bruge til at redigere XMLHttpRequest-objektet, før det sendes.

success

function

En tilbagekaldsfunktion, når en anmodning er lykkedes.Flere oplysninger:Behandlingsresultater

error

function

En funktion, der skal kaldes, hvis en anmodning mislykkes.Flere oplysninger:Håndter fejl

Du kan finde flere oplysninger under Eksempel: Oprette, hente, opdatere og slette ved hjælp af OData-slutpunktet med JavaScript og jQuery.

Indstil eksplicit anmodningsheaderen til at acceptere JSON

Når du forventer resultater i et JSON-format, fungerer det muligvis ikke blot angive egenskaben dataType. Du kan bruge egenskaben beforeSend til udtrykkeligt at indstille headers på XMLHttpRequest til at returnere data som JSON. Dette udføres typisk ved hjælp af en anonym funktion, som vist i følgende eksempel.

beforeSend: function (XMLHttpRequest) {
   //Specifying this header ensures that the results will be returned as JSON.
   XMLHttpRequest.setRequestHeader("Accept", "application/json");}

Eventuelle fejl i XMLHttpRequest.responseText vil blive formateret i JSON i stedet for XML.

Tip

Selv om du ikke forventer, at der returneres nogen data, kan du angive, at resultaterne altid skal returneres ved hjælp af JSON for at forenkle håndtering af fejl.Flere oplysninger:Håndter fejl

Indstil eksplicit anmodningsheaderen til en anden HTTP-handling

Som beskrevet i Metodetunnelføring via POST, når du udfører en handling, der kræver en anden HTTP-handling end POST eller GET, skal du bruge egenskaberne POST og beforeSend til udtrykkeligt at indstille headerne i XMLHttpRequest til at udføre en anden handling. Dette udføres typisk ved hjælp af en anonym funktion, som vist i følgende eksempel.

beforeSend: function (XMLHttpRequest) {
   //Specify the HTTP method DELETE to perform a delete operation.
   XMLHttpRequest.setRequestHeader("X-HTTP-Method", "DELETE");
}

Håndter fejl

Når en anmodning ikke er vellykket, sender $.ajax følgende tre argumenter til en funktion, der er angivet i fejlegenskaben.

  • XMLHttpRequest
    Objektet XMLHttpRequest.

  • textStatus
    En streng, der beskriver den type fejl, der er opstået. Der er følgende mulige værdier:

    • null

    • timeout

    • error

    • notmodified

    • parsererror

  • errorThrown
    Et valgfrit undtagelsesobjekt.

I følgende eksempel kan du se, hvordan du sender disse argumenter til en central funktion, der styrer fejl.

error: function (XMLHttpRequest, textStatus, errorThrown) {
   errorHandler(XMLHttpRequest, textStatus, errorThrown);
}

I følgende eksempel vises en simpel funktion, der registrerer fejlmeddelelsen og viser resultatet ved hjælp af funktionen showMessage.

Bemærk

Denne funktion forventer, at alle fejloplysninger returneres i JSON-formatet. Medmindre $.ajax-metoden konfigureres til at returnere resultater ved hjælp af JSON, er XMLHttpRequest.responseTextXML.

function errorHandler(XMLHttpRequest, textStatus, errorThrown)
{ showMessage("Error : " + textStatus + ": " + JSON.parse(XMLHttpRequest.responseText).error.message.value); }

Behandlingsresultater

Når du udfører POST- eller GET-handlinger, kan du forvente, at der returneres data. Hvis du har angivet, at resultater skal returneres i JSON-formatet, findes resultaterne i egenskaben d for det dataobjekt, der returneres. Når du opretter eller henter en post ved hjælp af det entydige id, repræsenterer d dataene for posten. I alle andre tilfælde er d en matrix.

I følgende eksempel kan du se behandlingen af resultaterne af en forespørgsel, der returnerer flere firmaposter.

success: function (data, textStatus, XmlHttpRequest) {
   var accounts = data.d;
   for (var i in accounts) {   showMessage(accounts[i].Name);
   }}

Arbejd med datoer

Der findes fire opgaver, der omfatter datoer, som du evt. skal udføre:

  • Fortolk hentede data

  • Vis datoværdier

  • Opdater datoværdier

  • Angiv en dato som kriterium i et filter i en forespørgsel

Fortolk hentede data

Når du henter poster ved hjælp af ODATA-slutpunktet, returneres datoværdier som strenge, der bruger formatet "\/Date(<ticks>)\/", hvor <ticks> er antallet millisekunder siden midnat d. 1. januar 1970. Eksempel: "\/Date(1311170400000)\/". Alle værdier, der returneres fra Microsoft Dynamics 365, repræsenterer UTC-værdier (Coordinated Universal Time), så ingen forskydningsoplysninger er inkluderet.

Der er to strategier, som du kan bruge til at fortolke datoer i poster, der returneres ved hjælp af ODATA-slutpunktet:

  • Brug en reviverfunktion med metoden JSON.parse

  • Brug String.replace til at oprette en datoværdi fra en streng

Brug en reviverfunktion med metoden JSON.parse

JSON.parse-metoden understøtter et valgfrit reviverargument, som beskrevet i dokumentationen til JSON.parse-metoden på MSDN. Følgende er et eksempel, der konverterer strengværdier, som svarer til et mønster, der er defineret i et søgemønster, til Date-objekter.

var jsontext = '{ "hiredate": "\/Date(1311170400000)\/", "birthdate": "\/Date(-158342400000)\/" }';
var dates = JSON.parse(jsontext, dateReviver);
var string = dates.hiredate.toUTCString();
// The value of string is "Wed, 20 Jul 2011 14:00:00 UTC"

function dateReviver(key, value) {
 var a;
 if (typeof value === 'string') {
  a = /Date\(([-+]?\d+)\)/.exec(value);
  if (a) {
   return new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
  }
 }
 return value;
};

Bemærk

I koden antages det, at datoværdier altid er UTC-dataværdier, som ikke indeholder nogen forskydningsoplysninger.

Brug String.replace til at oprette en datoværdi fra en streng

Hvis du ikke bruger reviverargumentet med JSON.parse-metoden, kan du i følgende eksempel se, hvordan du kan oprette en Date-værdi fra en streng.

var dateValue = new Date(parseInt(stringDateValue.replace("/Date(", "").replace(")/", ""), 10));

Vis datoværdier

Når strengdatoværdier konverteres til Date-objekter, kan du bruge en række JavaScript-metoder eller oprette dine egne for at få vist datoen som en streng i en brugergrænseflade. Da JavaScriptDate-objektet er UTC-bestemt, afspejler datoerne, der vises i brugergrænsefladen ved hjælp af metoder. f.eks toString eller toLocaleString, tidszoneindstillingerne i brugerens operativsystem.

Bemærk dog, at værdierne i dit program kan afvige fra de samme værdier, der vises i Microsoft Dynamics 365, som ikke er afhængige af tidszoneindstillingerne i brugerens operativsystem. Disse værdier vil være forskellige, når brugerens aktuelle tidszoneindstilling i operativsystemet ikke stemmer overens med den foretrukne tidszoneindstilling, der er gemt i Microsoft Dynamics 365.Microsoft Dynamics 365 giver også mulighed for angivelse af personlige præsentationsindstillinger, der ikke anvendes ved hjælp af JavaScript-standarddatofunktioner, f.eks. toString.

Hvis du vil afstemme de viste dato- og klokkeslætsværdier, så de stemmer overens med de værdier, der vises i Microsoft Dynamics 365-objektet, kan du forespørge på data gemt i UserSettings-objektet og objekter som TimeZoneDefinition og TimeZoneRule for at oprette funktioner, der kan vise datoer, der svarer til brugerens præferencer.Microsoft Dynamics 365 indeholder ikke funktioner til at udføre disse handlinger.

Opdater datoværdier

Når du ændrer værdierne for en JavaScript-dato med standardindstillingsmetoder som setMinutes eller setHours, er disse ændringer i brugerens lokale tid. Når du gemmer posten, serialiseres de faktiske UTC-værdier og gemmes i Microsoft Dynamics 365. Du behøver ikke at gøre noget for at konvertere datoerne til en UTC-værdi.

Når en Date serialiseres, adskiller formatet sig fra det format, der blev brugt, da dataene blev hentet. Som nævnt i Fortolk hentede data bruger datoer, der er hentet som strenge, formatet "\/Date(1311179400000)\/". Når du undersøger resultaterne af JSON.stringify for datoværdier, der skal sendes tilbage til serveren, er formatet "2013-07-20T16:30:00Z".

Angiv en dato som kriterium i et filter i en forespørgsel

Når du bruger en datoværdi med en $filter-systemforespørgselsindstilling, skal du bruge en UTC-dato. Når du vil konvertere et JavaScriptDate-objekt til formatet, der forventes for et filter, skal du behandle datoen ved hjælp af en funktion som i følgende eksempel. Resultatet er en streng, der svarer til følgende format: datetime'2010-09-28T18:21:46:594Z' .

function getODataUTCDateFilter(date) {

 var monthString;
 var rawMonth = (date.getUTCMonth()+1).toString();
 if (rawMonth.length == 1) {
  monthString = "0" + rawMonth;
 }
 else
 { monthString = rawMonth; }

 var dateString;
 var rawDate = date.getUTCDate().toString();
 if (rawDate.length == 1) {
  dateString = "0" + rawDate;
 }
 else
 { dateString = rawDate; }


 var DateFilter = "datetime\'";
 DateFilter += date.getUTCFullYear() + "-";
 DateFilter += monthString + "-";
 DateFilter += dateString;
 DateFilter += "T" + date.getUTCHours() + ":";
 DateFilter += date.getUTCMinutes() + ":";
 DateFilter += date.getUTCSeconds() + ":";
 DateFilter += date.getUTCMilliseconds();
 DateFilter += "Z\'";
 return DateFilter;
}

Se også

Brug OData-slutpunktet med webressourcer
OData endpoint Http status codes
JavaScript-biblioteker til Microsoft Dynamics CRM 2015
Webressourcer for script (JScript)
Knytte funktioner til formular- og felthændelser
jQuery.ajax-metode
XMLHttpRequest-objekt
Teknisk artikel: Brug af indstillingen Grupperet indstilling sammen med ODATA-slutpunktet – JScript

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret