Delen via


Gebruik de klasse OrganizationServiceContext

 

Gepubliceerd: januari 2017

Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

In Microsoft Dynamics 365 (online en on-premises), kunt u de klasse OrganizationServiceProxy gebruiken voor toegang tot de Webservices. Als alternatief kunt u de OrganizationServiceContext gebruiken die door het hulpprogramma voor codegeneratie is gegenereerd om toegang te krijgen tot extra functies. Met de klasse OrganizationServiceContext kunt u wijzigingen bijhouden, identiteiten en relaties beheren, en krijgt u toegang tot de Microsoft Dynamics 365 LINQ-provider. Deze klasse bevat ook een OrganizationServiceContext.SaveChanges methode die u gebruikt om de wijzigingen aan gegevens te verzenden die de context bijhoudt. Deze klasse is gebaseerd op hetzelfde concept als de klasse DataServiceContext in Windows Communication Foundation (WCF) gegevensservices.

Als u deze klasse wilt genereren, geeft u een waarde op voor de parameter /serviceContextName wanneer u eerder gebonden types genereert. Het hulpprogramma voor de codegeneratie gebruikt deze naam als de naam van de gegenereerde klasse. Voor meer informatie over het gebruik van het hulpprogramma voor het genereren van code raadpleegt u Eerder gebonden entiteitklassen maken met het hulpmiddel voor het genereren van code (CrmSvcUtil.exe). U kunt de context van de organisatieservice gebruiken wanneer toepassingen, plug-ins en workflowactiviteiten ontwikkelt.

In dit onderwerp

De klasse OrganizationServiceContext gebruiken

Wijzigingen bijhouden met de klasse OrganizationServiceContext

Gerelateerde objecten bijhouden met de klasse OrganizationServiceContext

Wijzigingen opslaan met de klasse OrganizationServiceContext

Gebruik virtuele methoden wanneer de context wordt gewijzigd

De klasse OrganizationServiceContext gebruiken

Om een exemplaar te maken van de contextklasse, moet u de klasseconstructor van een object doorgeven die de IOrganizationService interface implementeert. Eén optie is het doorgeven van een exemplaar van de klasse OrganizationServiceProxy. Voor meer informatie over de IOrganizationService interface, raadpleegt u Gebruik de Organisatieservice om gegevens of metagegevens te lezen en te schrijven..

Het volgende codevoorbeeld toont hoe u een nieuw exemplaar van de contextklasse maakt. In dit voorbeeld kreeg de contextklasse de naam AdventureWorksCycleServiceContext door de naam op te geven met de parameter /serviceContextName in het hulpprogramma voor de codegeneratie:

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

Nadat u het contextobject van de organisatieservice maakt, kunt u beginnen met het maken, wijzigen of verwijderen van entiteiten. Het volgende codevoorbeeld laat bijvoorbeeld zien hoe u een exemplaar maakt van een nieuwe contactpersoon en deze vervolgens opslaat naar een Microsoft Dynamics 365 server met behulp van het object van de servicecontext.

//  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();

Er zijn verschillende punten op te merken in het vorige codevoorbeeld. Eerst, nadat een exemplaar is gemaakt van een nieuwe contactpersoon, stuurt u dat contactpersoonobject door naar de OrganizationServiceContext.AddObject methode zodat de context het object kan beginnen opvolgen. Het tweede punt is dat het nieuwe object wordt opgeslagen naar de server met behulp van de methode OrganizationServiceContext.SaveChanges.

De context van de organisatieservice moet elke entiteit of relatie bijhouden die u wilt verzenden naar Microsoft Dynamics 365. U kunt bijvoorbeeld een record ophalen met een LINQ-query en de context houdt deze entiteit bij, of u kunt de methode OrganizationServiceContext.Attach gebruiken om de context de entiteit te laten bijhouden. U kunt met gegevens werken in een clienttoepassing en nieuwe entiteiten maken, gerelateerde entiteiten maken en bestaande entiteiten wijzigen, maar u moet de methode SaveChanges op bijgehouden entiteiten oproepen om wijzigingen toe te passen op de Microsoft Dynamics 365 server.

Wijzigingen bijhouden met de klasse OrganizationServiceContext

Om te bepalen hoe een entiteit wordt bijgehouden door de context, kunt u de eigenschap EntityState op het entiteitsexemplaar controleren. U moet de context van de organisatieservice opdragen een entiteit van Microsoft Dynamics 365 bij te houden door verschillende methoden aan te roepen of met behulp van een LINQ-query. Alle entiteiten die een .NET Language-Integrated Query (LINQ) query retourneert, worden bijgehouden door de servicecontext.

U kunt objecten toevoegen aan de servicecontext door een van de volgende methoden in OrganizationServiceContext aan te roepen.

Methode

Gebruiken

AddObject

Hiermee wordt een entiteit toegevoegd aan de reeks entiteiten die organisatieservice bijhoudt. De status van de entiteit in de context is ingesteld op Created. Als de methode SaveChanges wordt aangeroepen, wordt deze record gemaakt of toegevoegd aan de server.

Attach

Hiermee wordt een entiteit toegevoegd aan de reeks entiteiten die organisatieservice bijhoudt. De status van de entiteit in de context is ingesteld op Unchanged. Als de methode SaveChanges wordt aangeroepen, wordt deze entiteit niet naar de server teruggestuurd tenzij de status wordt gewijzigd.

CreateQuery

Hiermee wordt het resultaat van een query toegevoegd aan de reeks entiteiten die organisatieservice bijhoudt.

Gerelateerde objecten bijhouden met de klasse OrganizationServiceContext

In Dynamics 365 en Dynamics 365 (online) kunt u met de context van de organisatieservice relaties tussen entiteiten maken en bijwerken. De navigatie-eigenschappen door het hulpprogramma CrmSvcUtil worden gegenereerd en zich in de eerder gebonden klassen bevinden, geven u toegang tot bijbehorende eigenschappen en relaties, die u ook kunt aanpassen. De context van de organisatieservice moet de gerelateerde entiteit bijhouden om de gerelateerde entiteit beschikbaar te maken voor een update op de server.

Gebruik de volgende methoden in OrganizationServiceContext om met bijbehorende entiteiten te werken en de entiteit toe te voegen aan de servicecontext:

Methode

Gebruiken

AddRelatedObject

Voegt de doelstelling toe aan de context toe. Roept de methode Attach aan op de doelentiteit en roept vervolgens de methode AddLink aan tussen de bronentiteit en de (bijbehorende) doelentiteit.

AttachLink

Voegt de bijbehorende entiteit toe aan de context voor bijhouden. De status van de entiteit in de context is ingesteld op Unchanged.

AddLink

Maakt een relatie tussen de bron- en doelentiteiten. Voegt de doelstelling toe aan de context toe. De status van de doelentiteit in de context is ingesteld op Created.

LoadProperty

Laadt de gerelateerde entiteitenreeks voor de opgegeven relatie. Biedt toegang tot verwante entiteiten door de navigatie-eigenschap te gebruiken. Roep de AddObject methode op de bijbehorende entiteit aan nadat u de entiteit hebt geopend met een navigatie-eigenschap op de bovenliggende entiteit.

UpdateObject

Wijzigt de status van de opgegeven entiteit in de aan te passen OrganizationServiceContext.

DeleteObject

Wijzigt de status van de te verwijderen opgegeven entiteit in de OrganizationServiceContext.

Bijbehorende entiteiten laden die navigatie-eigenschappen gebruiken

Bijbehorende entiteiten voor entiteiten die u hebt opgehaald met LINQ, zullen null zijn tot u LoadProperty gebruikt om deze op te halen. In de volgende voorbeeldcode ziet u hoe u taakrecords kunt openen die aan een bepaalde contactrecord zijn gekoppeld.

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();
}

Wijzigingen opslaan met de klasse OrganizationServiceContext

De organisatieservicecontext heeft een grafiek van de entiteiten die deze bijhoudt. De volgorde waarin de entiteit van de contextprocessen van de organisatieservice deze wijzigt en verzendt naar de server, is belangrijk. Updates voor de primaire entiteit worden verwerkt en vervolgens worden de gerelateerde entiteiten verwerkt. Als een waarde is ingesteld op de primaire entiteit door de bijbehorende entiteit, wordt die waarde gebruikt voor het bijwerken van gegevens op de server.

Als er een fout optreedt wanneer de entiteitsinformatie wordt opgeslagen, wordt een nieuw uitzonderingstype dat de SaveChangesResult bevat die geretourneerd door de OrganizationServiceContext.SaveChanges methode, ongeacht de SaveChangesOptions parameter die in de methode wordt doorgegeven.

Gebruik virtuele methoden wanneer de context wordt gewijzigd

Het kan soms noodzakelijk om acties te ondernemen op basis van wijzigingen in de OrganizationServiceContext. Om dit te vergemakkelijken, krijgt u virtuele methoden zodat u kunt ingrijpen bij een bewerking, of van een bewerking op de hoogte kunt worden gebracht. Als u deze methodes gebruikt, moet afleiden uit OrganizationServiceContext of de gegenereerde context van de organisatieservice wijzigen. De volgende tabel bevat de virtuele methoden.

Methode

Beschrijving

OnBeginEntityTracking

Aangeroepen nadat een entiteit is toegevoegd aan OrganizationServiceContext.

OnBeginLinkTracking

Aangeroepen nadat een koppeling is toegevoegd aan OrganizationServiceContext.

OnEndEntityTracking

Aangeroepen nadat een entiteit is losgekoppeld van de OrganizationServiceContext.

OnEndLinkTracking

Aangeroepen nadat een koppeling is losgekoppeld van de OrganizationServiceContext.

OnExecuting

Onmiddellijk opgeroepen voordat een aanvraag wordt verzonden naar de Microsoft Dynamics 365 Server.

OnExecute

Onmiddellijk aangeroepen nadat een aanvraag is verzonden naar de Microsoft Dynamics 365 Server, ongeacht of een uitzondering is opgetreden of niet.

OnSavingChanges

Aangeroepen voordat bewerkingen worden uitgevoerd na een aanroep naar SaveChanges.

OnSaveChanges

Aangeroepen wanneer alle bewerkingen voor een aanroep naar SaveChanges zijn voltooid, of als er een fout is.

Zie ook

IOrganizationService
OrganizationServiceContext
De eerder gebonden entiteitklassen in code gebruiken
Voorbeeld: Complexe LINQ-query's
Eerder gebonden entiteitklassen maken met het hulpmiddel voor het genereren van code (CrmSvcUtil.exe)
Gebruik de eerder gebonden entiteitsklassen voor maken, bijwerken en verwijderen

Microsoft Dynamics 365

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht