Share via


Utiliser la classe OrganizationServiceContext

 

Date de publication : novembre 2016

S’applique à : Dynamics CRM 2015

Dans Mise à jour de Microsoft Dynamics CRM 2015 et de Microsoft Dynamics CRM Online 2015, vous pouvez utiliser la classe OrganizationServiceProxy pour accéder aux services Web. Sinon, vous pouvez utiliser le OrganizationServiceContext généré par l’outil de génération de code pour accéder à la fonctionnalité supplémentaire. La classe OrganizationServiceContext vous permet d’effectuer le suivi des modifications, de gérer des identités et des relations, et vous donne accès au fournisseur LINQ Microsoft Dynamics 365. Cette classe contient également une méthode OrganizationServiceContext.SaveChanges utilisée pour envoyer les modifications apportées aux données que le contexte suit. Cette classe est basée sur le même concept que la classe DataServiceContext dans les services de données Windows Communication Foundation (WCF).

Pour générer cette classe, entrez une valeur pour le paramètre /serviceContextName lorsque vous générez les types de liaison anticipée. L’outil de génération de code utilise ce nom comme nom de la classe générée. Pour plus d’informations sur l’utilisation de l’outil de génération de code, voir Créer des classes d’entité à liaison anticipée à l’aide de l’outil de génération de code (CrmSvcUtil.exe). Vous pouvez utiliser le contexte du service d’organisation lorsque vous développez des applications, des plug-ins et des activités de workflow.

Contenu de la rubrique

Utilisation de la classe OrganizationServiceContext

Suivre des modifications avec la classe OrganizationServiceContext

Suivre les objets associés avec la classe OrganizationServiceContext

Enregistrer des modifications avec la classe OrganizationServiceContext

Utiliser des méthodes virtuelles lorsque le contexte est modifié

Utilisation de la classe OrganizationServiceContext

Pour instancier la classe de contexte, vous devez transmettre au constructeur de classe un objet qui implémente l’interface IOrganizationService. Une solution est de transmettre une instance de la classe OrganizationServiceProxy. Pour plus d’informations sur l’interface T:Microsoft.Xrm.Sdk.IorganizationService, voir Utilisez le service Web IOrganizationService pour lire et écrire des données ou des métadonnées.

L’exemple de code suivant montre comment créer une instance de la classe de contexte. Dans cet exemple, la classe de contexte a été nommée AdventureWorksCycleServiceContext en spécifiant le nom avec le paramètre /serviceContextName sur l’outil de génération de code :

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

Après avoir créé l’objet de contexte du service d’organisation, vous pouvez commencer à suivre, créer, modifier ou supprimer des entités. Par exemple, l’exemple de code suivant montre comment instancier un nouveau contact, puis l’enregistrer sur un serveur Microsoft Dynamics 365 en utilisant l’objet de contexte de service.

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

Il existe plusieurs points à prendre en compte dans l’exemple de code précédent. Tout d’abord, après l’instanciation d’un nouveau contact, transmettez l’objet de contact à la méthode OrganizationServiceContext.AddObject pour que le contexte puisse commencer à suivre l’objet. Le deuxième point à noter est que le nouvel objet est enregistré sur le serveur à l’aide de la méthode OrganizationServiceContext.SaveChanges.

Le contexte du service d’organisation doit suivre une entité ou une relation que vous souhaitez envoyer à Microsoft Dynamics 365. Par exemple, récupérez un enregistrement avec une requête LINQ et le contexte suit cette entité, ou utilisez la méthode OrganizationServiceContext.Attach pour indiquer au contexte de commencer à suivre l’entité. Vous pouvez utiliser des données dans une application cliente et créer des entités, créer des entités associées et modifier des entités existantes, mais vous devez appeler la méthode SaveChanges sur les entités suivies pour valider les modifications sur le serveur Microsoft Dynamics 365.

Suivre des modifications avec la classe OrganizationServiceContext

Pour déterminer la façon dont une entité est suivie par le contexte, vous pouvez activer la propriété EntityState sur l’instance d’entité. Vous devez indiquer au contexte du service d’organisation de suivre une entité de Microsoft Dynamics 365 en appelant diverses méthodes ou à l’aide d’une requête LINQ. Toutes les entités retournées d’une requête Language-Integrated Query (LINQ) .NET sont suivies par le contexte de service.

Vous pouvez ajouter des objets au contexte de service en appelant l’une des méthodes suivantes dans OrganizationServiceContext.

Méthode

Utiliser

AddObject

Ajoute une entité à l’ensemble d’entités que le contexte du service d’organisation suit. Le statut de l’entité dans le contexte est défini sur Created. Si la méthode SaveChanges est appelée, l’enregistrement est créé ou ajouté au serveur.

Attach

Ajoute une entité à l’ensemble d’entités que le contexte du service d’organisation suit. Le statut de l’entité dans le contexte est défini sur Unchanged. Si la méthode SaveChanges est appelée, cette entité n’est pas envoyée au serveur à moins que son statut ne change.

CreateQuery

Ajoute les résultats d’une requête à l’ensemble d’entités que le contexte du service d’organisation suit.

Suivre les objets associés avec la classe OrganizationServiceContext

Dans Dynamics 365 et CRM Online, le contexte du service d’organisation vous permet de créer et de mettre à jour les relations entre les entités. Les propriétés de navigation générées par l’outil CrmSvcUtil et présentes dans les classes d’entité à liaison anticipée vous permettent d’accéder et de modifier les propriétés et relations associées aux entités. Le contexte du service d’organisation doit suivre l’entité associée pour que l’entité associée soit disponible pour la mise à jour sur le serveur.

Utilisez les méthodes suivantes dans OrganizationServiceContext pour utiliser les entités associées et ajouter l’entité au contexte de service :

Méthode

Utiliser

AddRelatedObject

Ajoute la cible au contexte. Appelle la méthode Attach sur l’entité cible, puis appelle la méthode AddLink entre l’entité source et l’entité cible (associée).

AttachLink

Ajoute l’entité associée au contexte pour le suivi. Le statut de l’entité dans le contexte est défini sur Unchanged.

AddLink

Crée une relation entre les entités source et cible. Ajoute la cible au contexte. Le statut de l’entité cible dans le contexte est défini sur Created.

LoadProperty

Charge l’entité associée définie pour la relation spécifiée. Donne accès aux entités associées à l’aide de la propriété de navigation. Contactez la méthode AddObject sur l’entité associée après avoir accédé à l’entité à l’aide d’une propriété de navigation sur l’entité parente.

UpdateObject

Modifie l’état de l’entité spécifiée dans OrganizationServiceContext à Modifié.

DeleteObject

Modifie l’état de l’entité spécifiée à supprimer dans OrganizationServiceContext.

Charger les entités associées à l’aide des propriétés de navigation

Les entités associées pour les entités que vous avez récupérées avec LINQ sont nulles si vous n’utilisez pas LoadProperty pour les récupérer. L’exemple de code suivant montre comment accéder aux enregistrements de tâche associés à un enregistrement Contact spécifique.

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

Enregistrer des modifications avec la classe OrganizationServiceContext

Le contexte du service d’organisation contient un graphique des entités dont il effectue le suivi. L’ordre dans lequel le contexte du service d’organisation traite les modifications apportées aux entités et les envoie au serveur est essentiel. Les mises à jour de l’entité principale sont traitées, puis les entités associées sont traitées à leur tour. Si une valeur est définie sur l’entité principale par l’entité associée, cette valeur est utilisée pour la mise à jour des données sur le serveur.

Si une erreur se produit lors de l’enregistrement des informations d’entité, un nouveau type d’exception qui contient SaveChangesResult est levé par la méthode OrganizationServiceContext.SaveChanges, indépendamment de la valeur du paramètre SaveChangesOptions transmis à la méthode.

Utiliser des méthodes virtuelles lorsque le contexte est modifié

Parfois, il peut être nécessaire d’agir en fonction des modifications apportées à OrganizationServiceContext. Pour ce faire, vous disposez de méthodes virtuelles qui vous permettent d’intercepter ou d’être prévenu d’une opération. Pour tirer profit de ces méthodes, vous devez effectuer une dérivation de OrganizationServiceContext ou modifier le contexte du service d’organisation généré. Le tableau suivant répertorie les méthodes virtuelles.

Méthode

Description

OnBeginEntityTracking

Appelé après qu’une entité soit jointe à OrganizationServiceContext.

OnBeginLinkTracking

Appelé après qu’une liaison soit jointe à OrganizationServiceContext.

OnEndEntityTracking

Appelé après qu’une entité soit détachée de OrganizationServiceContext.

OnEndLinkTracking

Appelé après qu’une liaison soit détachée de OrganizationServiceContext.

OnExecuting

Appelé juste avant qu’une requête soit envoyée à Microsoft Dynamics CRM Server.

OnExecute

Appelé uniquement lorsqu’une demande est envoyée à Microsoft Dynamics CRM Server, qu’une exception se produise ou non.

OnSavingChanges

Appelé avant toute opération après un appel à SaveChanges.

OnSaveChanges

Appelé lorsque toutes les opérations d’un appel à SaveChanges sont terminées, ou en cas d’échec.

Voir aussi

T:Microsoft.Xrm.Sdk.IorganizationService
OrganizationServiceContext
Utiliser les classes d’entité à liaison anticipée dans le code
Exemple : Requêtes LINQ complexes
Créer des classes d’entité à liaison anticipée à l’aide de l’outil de génération de code (CrmSvcUtil.exe)
Utiliser les classes d’entité à liaison anticipée pour la création, la mise à jour et la suppression

© 2017 Microsoft. Tous droits réservés. Copyright