Modèle d’objet de contexte des extensions développeur (Dynamics CRM 2015)
Date de publication : novembre 2016
S’applique à : Dynamics CRM 2015
Les extensions développeur pour Microsoft Dynamics CRM 2015 proposent un ensemble de classes interdépendantes qui réduisent la quantité de travail nécessaire pour être opérationnel. Le programme le plus fondamental nécessite uniquement la chaîne de connexion (ou le nom d’une chaîne de connexion dans app.config) et un contexte de données créé par CrmSvcUtil.exe, comme illustré dans l’exemple suivant :
var connection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var context = new XrmServiceContext(connection))
{
var accounts = context.AccountSet;
foreach (var account in accounts)
Console.WriteLine(account.Name);
}
Les options avancées proposent des objets imbriqués qui permettent de gérer les opérations de niveau inférieur. Le contexte de données correspond à la composition de tous ces objets et, par conséquent, le comportement du contexte de données dépend des objets. Ces dépendances peuvent être exposées à l’aide de constructeurs spécifiques. Une fois développée, la composition des objets par défaut ressemble à l’exemple suivant :
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
var myObjectCache = MemoryCache.Default;
var myServiceCache = new OrganizationServiceCache(myObjectCache, myConnection);
using (var myService = new CachedOrganizationService(myConnection, myServiceCache))
using (var myContext = new XrmServiceContext(myService))
{
}
Dépendances
Le tableau suivant répertorie les dépendances disponibles et leurs comportements.
Interface |
Classe de base |
Type par défaut |
Description |
Élément de configuration |
---|---|---|---|---|
CrmConnection |
CrmConnection |
Détails de connexion sous forme d’une chaîne de connexion. |
<connectionStrings> |
|
ObjectCache |
MemoryCache |
Service de mise en cache de données brutes indépendant des autres composants du Kit de développement logiciel. |
<objectCache> |
|
IOrganizationServiceCache |
OrganizationServiceCache |
OrganizationServiceCache |
Service de mise en cache de données plus abstrait qui met en cache les résultats des opérations IOrganizationService. Configure automatiquement les dépendances des éléments en cache et l’exécution des opérations de mise à jour rend non valides les articles mis en cache dépendants. |
<serviceCache> |
IOrganizationService |
OrganizationService |
CachedOrganizationService |
Classe de wrapper proche de IOrganizationService qui gère les détails de configuration d’un OrganizationServiceProxy ou d’autres objets IOrganizationService arbitraires. Une fois associé à un objet OrganizationServiceCache, devient un service mis en cache. |
<services> |
OrganizationServiceContext |
Contexte de données OData et LINQ. Doit être spécifiquement déclaré ou configuré de sorte qu’aucun type par défaut n’existe. |
<contexts> |
||
IDiscoveryService |
DiscoveryService |
Classe de wrapper proche de IDiscoveryService qui gère les détails de configuration d’un DiscoveryServiceProxy ou d’autres objets IDiscoveryService arbitraires. Aucune implémentation de mise en cache n’existe pour ceci et ne peut être configurée dans app.config. |
L’implémentation des interfaces, l’héritage des classes de base disponibles ou la simple réorganisation de l’imbrication d’objets peuvent être réalisées pour modifier le comportement final. Par exemple, un moyen de désactiver la fonctionnalité de mise en cache est d’omettre les objets associés en cache et de préférer les classes de base brutes.
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myService = new OrganizationService(myConnection))
using (var myContext = new XrmServiceContext(myService))
{
}
Pour supprimer la dépendance sur le code généré par CrmSvcUtil.exe en faveur de code dynamique, utilisez la classe CrmOrganizationServiceContext. Un autre scénario consiste à omettre le contexte de données entièrement et uniquement à invoquer IOrganizationService directement. Cette approche permet aussi d'invoquer IDiscoveryService.
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myContext = new CrmOrganizationServiceContext(myConnection))
{
}
using (var myService = new OrganizationService(myConnection))
{
var response = myService.Execute(new WhoAmIRequest()));
}
var discoveryConnection = CrmConnection.Parse("Url=http://crm.contoso.com");
using (var myDiscoveryService = new DiscoveryService(discoveryConnection))
{
var response = myDiscoveryService.Execute(new RetrieveOrganizationsRequest()));
}
Améliorations de contexte
La différence la plus importante entre CrmOrganizationServiceContext, qui est la classe de base directe de XrmServiceContext, des extensions développeur pour Microsoft Dynamics 365 et le OrganizationServiceContext de base du SDK principal est la mise en œuvre des interfaces IUpdatable et IExpandProvider. Cette implémentation personnalisée permet au contexte de données généré et les objets d’entités produits par le contexte de données de participer à la structure des Services de données WCF. Pour utiliser le contexte de données comme point de terminaison OData, ajoutez un nouveau point de terminaison des Services de données WCF (.svc) à une application Web existante.
<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="MySite.MyContext" %>
Voici un exemple de point de terminaison de service d'arrière-plan (.svc.cs) pouvant être utilisé pour le développement. Spécifiez XrmServiceContext comme paramètre de type générique de la classe DataService<T>.
using System.Data.Services;
using System.Data.Services.Common;
using System.ServiceModel;
using Xrm;
namespace MySite
{
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyContext : DataService<XrmServiceContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// Set rules to indicate which entity sets and service operations are visible, updatable, etc.
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
}
Voir aussi
Extensions développeur pour Microsoft Dynamics CRM 2015
Configurer le contexte avec le fichier de configuration (Dynamics CRM 2015)
Accéder aux relations d'entité (Dynamics CRM 2015)
Attacher des entités au contexte (Dynamics CRM 2015)
Procédures pas-à-pas du portail pour Dynamics CRM 2015
© 2017 Microsoft. Tous droits réservés. Copyright