Del via


Bruge klassen OrganizationServiceContext

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

I Microsoft Dynamics 365 (online og i det lokale miljø) kan du bruge OrganizationServiceProxy-klassen til at få adgang til webtjenester. Du kan også bruge den OrganizationServiceContext, der er genereret af kodegenereringsværktøjet, til at få adgang til yderligere funktioner. Med OrganizationServiceContext-klassen kan du registrere ændringer, administrere identiteter og relationer og få adgang til Microsoft Dynamics 365-LINQ-udbyderen. Denne klasse indeholder også en OrganizationServiceContext.SaveChanges-metode, som du kan bruge til at sende ændringer til data, der registreres af konteksten. Denne klasse er baseret på det samme koncept som DataServiceContext-klassen i WCF (Windows Communication Foundation) Data Services.

Du kan generere denne klasse ved at angive en værdi for /serviceContextName-parameteren, når du opretter tidligt bundne typer. Værktøjet til kodegenerering bruger dette navn som navnet på den klasse, der genereres. Du kan finde flere oplysninger om, hvordan du bruger kodegenereringsværktøjet, i Opret klasser for tidligt bundne objekter med værktøjet til oprettelse af kode (CrmSvcUtil.exe). Du kan bruge organisationtjenestekonteksten, når du udvikler programmer, plug-ins og arbejdsprocesaktiviteter.

Dette emne indeholder

Sådan bruger du klassen OrganizationServiceContext

Sporing af ændringer med klassen OrganizationServiceContext

Sporing af relaterede objekter med klassen OrganizationServiceContext

Lagring af ændringer med klassen OrganizationServiceContext

Brug af virtuelle metoder, når konteksten er ændret

Sådan bruger du klassen OrganizationServiceContext

Hvis du vil indsætte en forekomst af kontekstklassen, skal du overføre et objekt, der implementerer IOrganizationService-grænsefladen, til klassekonstruktøren. Én mulighed er at overføre en forekomst af klassen OrganizationServiceProxy. Du kan finde flere oplysninger om IOrganizationService-grænsefladen i Bruge organisationstjenesten til at læse og skrive data eller metadata.

Følgende kodeeksempel viser, hvordan du opretter en ny forekomst af kontekstklassen. I dette eksempel fik kontekstklassen navnet AdventureWorksCycleServiceContext ved at angive det ved hjælp af /serviceContextName-parameteren i kodegenereringsværktøjet:

//For early bound types to work correctly, they have to be enabled on the proxy.
_serviceProxy.EnableProxyTypes();
AdventureWorksCycleServiceContext context = new AdventureWorksCycleServiceContext(_serviceProxy);

Når du opretter organisationsservicens kontekstobjekt, kan du begynde at spore oprette-, redigere- eller slette-objekter. Følgende kodeeksempel viser, hvordan du instantierer en ny kontakt og derefter gemmer den på en Microsoft Dynamics 365-server ved hjælp af servicekontekstobjektet.

//  Create a new contact record;
AdventureWorksCycleServiceContext context = new AdventureWorksCycleServiceContext (_serviceProxy);
Contact contact = new Contact() 
 {
   FirstName = "Pamela",
   LastName = "Brown",
   Address1_Line1 = "123 Easy St.",
   Address1_City = "Atlanta",
   Address1_StateOrProvince = "GA",
   Address1_PostalCode = "32254",
   Telephone1 = "425-555-5678"   };
context.AddObject(contact);
context.SaveChanges();

Der er flere punkter at bemærke i det forrige kodeeksempel. Når der er en forekomst af en ny kontakt, skal du sende kontaktobjektet til OrganizationServiceContext.AddObject-metoden, så konteksten kan begynde sporing af objektet. Det andet punkt at bemærke er, at det nye objekt er gemt på serveren ved hjælp af OrganizationServiceContext.SaveChanges-metoden.

Organisationens servicekontekst skal registrere alle objekter eller relationer, du vil sende til Microsoft Dynamics 365. Eksempelvis kan du hente en post med en LINQ-forespørgsel, så konteksten vil spore dette objekt, eller du kan bruge OrganizationServiceContext.Attach-metoden til at få konteksten til at registrere objektet. Du kan arbejde med data i et klientprogram og oprette nye objekter, oprette relaterede objekter og redigere eksisterende objekter, men du skal kalde SaveChanges-metoden på registrerede objekter for at gemme ændringerne på Microsoft Dynamics 365-serveren.

Sporing af ændringer med klassen OrganizationServiceContext

For at finde ud af, hvordan et objekt spores af konteksten, kan du kontrollere EntityState-egenskaben for objektforekomsten. Du skal bede organisationsservicekonteksten om at spore et objekt fra Microsoft Dynamics 365 ved at kalde forskellige metoder eller ved hjælp af en LINQ-forespørgsel. Alle objekter, der er returneret fra en .NET-sprogintegreret forespørgsel (LINQ)-forespørgsel, spores af servicekonteksten.

Du kan føje objekter til servicekonteksten ved at kalde en af følgende metoder i OrganizationServiceContext.

Metode

Bruge

AddObject

Tilføjer et objekt i sættet af objekter, der spores af organisationsservicekonteksten. Status for objektet i konteksten er angivet til Created. Hvis SaveChanges-metoden kaldes, vil denne post blive oprettet eller føjet til serveren.

Attach

Tilføjer et objekt i sættet af objekter, der spores af organisationsservicekonteksten. Status for objektet i konteksten er angivet til Unchanged. Hvis SaveChanges-metoden kaldes, bliver dette objekt ikke sendt til serveren, medmindre dets status ændres.

CreateQuery

Tilføjer resultatet af en forespørgsel i sættet af objekter, der spores af organisationsservicekonteksten.

Sporing af relaterede objekter med klassen OrganizationServiceContext

I Dynamics 365 og Dynamics 365 (online) kan du bruge organisationsservicekonteksten til at oprette og opdatere relationer mellem objekter. De navigationsegenskaber, der er genereret af CrmSvcUtil-værktøjet og placeret i tidligt bundet klasser, giver dig adgang til at ændre relaterede objektegenskaber og relationer. Organisationsservicekonteksten skal spore det relaterede objekt, så det relaterede objekt kan blive tilgængeligt for opdatering på serveren.

Brug følgende metoder i OrganizationServiceContext til at arbejde med relaterede objekter og føje objektet til servicekonteksten:

Metode

Bruge

AddRelatedObject

Tilføjer målet i konteksten. Kaldet Attach-metoden på måobjektet og kalder derefter AddLink-metoden mellem kildeobjektet og målobjektet (relateret).

AttachLink

Tilføjer det relaterede objekt til sporing i konteksten. Status for objektet i konteksten er angivet til Unchanged.

AddLink

Opretter en relation mellem kilde- og målobjekterne. Tilføjer målet i konteksten. Status for målobjektet i konteksten er angivet til Created.

LoadProperty

Indlæser det relaterede objekt for den angivne relation. Giver adgang til relaterede objekter ved hjælp af navigationsegenskaben. Kald AddObject-metoden på det relaterede objekt, når du har fået adgang til objektet ved hjælp af en navigationsegenskab på det overordnede objekt.

UpdateObject

Ændrer tilstanden for det angivne objekt i OrganizationServiceContext til ændret.

DeleteObject

Ændrer tilstanden for det angivne objekt, der skal slettes, i OrganizationServiceContext.

Indlæsning af relaterede objekter ved hjælp af navigationsegenskaber

Relaterede objekter for objekter, du har hentet ved hjælp af LINQ, er null, indtil du bruger LoadProperty til at hente dem. Følgende kodeeksempel viser, hvordan du får adgang til opgaveposter, der er knyttet til en bestemt kontaktpersonpost.

Contact pam = context.ContactSet.Where(c => c.FirstName == "Pamela").FirstOrDefault();
if (pam != null)
{
// pam.Contact_Tasks is null until you use LoadProperty
    context.LoadProperty(pam, "Contact_Tasks");
    Task firstTask = pam.Contact_Tasks.FirstOrDefault();
}

Lagring af ændringer med klassen OrganizationServiceContext

Organisationsservicekonteksten indeholder et diagram over de objekter, den sporer. Den rækkefølge, hvori organisationsservicekonteksten behandler objektændringer og sender dem til serveren, er vigtig. Opdateringer til primært objekt behandles, og derefter behandles relaterede objekter. Hvis der angives en værdi i det primære objekt af det relaterede objekt, bruges denne værdi, når du opdaterer data på serveren.

Hvis der opstår en fejl, når objektoplysninger gemmes, vises en ny undtagelsestype, der indeholder SaveChangesResult, af OrganizationServiceContext.SaveChanges-metoden, uafhængig af værdien af SaveChangesOptions-parameteren, der sendes til metoden.

Brug af virtuelle metoder, når konteksten er ændret

Nogle gange kan det være nødvendigt at udføre handlinger, der er baseret på ændringer i OrganizationServiceContext. For at lette dette leveres virtuelle metoder til at afbryde eller give besked om en handling. For at drage fordel af disse metoder skal du enten aflede fra OrganizationServiceContext eller ændre den genererede organisationsservicekontekst. I følgende tabel vises de virtuelle metoder.

Metode

Beskrivelse

OnBeginEntityTracking

Kaldes, når et objekt er knyttet til OrganizationServiceContext.

OnBeginLinkTracking

Kaldes, når et link er knyttet til OrganizationServiceContext.

OnEndEntityTracking

Kaldes, når et objekt frakobles OrganizationServiceContext.

OnEndLinkTracking

Kaldes, når et link frakobles OrganizationServiceContext.

OnExecuting

Kaldes umiddelbart før, der sendes en anmodning til Microsoft Dynamics 365 Server.

OnExecute

Kaldes umiddelbart efter, at der sendes en anmodning til Microsoft Dynamics 365 Server, uanset om der opstod en undtagelse eller ej.

OnSavingChanges

Kaldes før eventuelle handlinger efter et kald til SaveChanges.

OnSaveChanges

Kaldes, når alle handlinger for et kald til SaveChanges er fuldført, eller når der er en fejl.

Se også

IOrganizationService
OrganizationServiceContext
Brug de tidligt bundne objektklasser i kode
Eksempel: Komplekse LINQ-forespørgsler
Opret klasser for tidligt bundne objekter med værktøjet til oprettelse af kode (CrmSvcUtil.exe)
Bruge de tidligt bundne objektklasser til oprettelse, opdatering og sletning

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret