contextobjectmodel ontwikkelaarsuitbreidingen (Dynamics CRM 2015)
Gepubliceerd: november 2016
Is van toepassing op: Dynamics CRM 2015
Ontwikkelaarsuitbreidingen voor Microsoft Dynamics CRM 2015 bieden een aantal onderling afhankelijke klasses aan die het benodigde werk minimaliseren om aan de slag te gaan. Het eenvoudigste programma vereist alleen de verbindingstekenreeks (of de naam van een verbindingstekenreeks in app.config) en een gegevenscontext gemaakt door CrmSvcUtil.exe zoals getoond in het volgende voorbeeld:
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);
}
Achter de schermen zijn er geneste objecten die bewerkingen op lager niveau verwerken. De gegevenscontext is de samenstelling van al deze objecten en daarom is ook het gedrag van de gegevenscontext afhankelijk van de objecten. Deze afhankelijkheden kunnen door gebruik van specifieke constructors worden blootgesteld. Uitgevouwen ziet de standaardobjectsamenstelling eruit als in het volgende voorbeeld:
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))
{
}
Afhankelijkheden
De onderstaande tabel toont beschikbare afhankelijkheden en hun gedragingen.
Interface |
Basisklasse |
Standaardtype |
Beschrijving |
Configuratie-element |
---|---|---|---|---|
CrmConnection |
CrmConnection |
De verbindingdetails in de vorm van een verbindingstekenreeks. |
<connectionStrings> |
|
ObjectCache |
MemoryCache |
De cachingservice voor onbewerkte gegevens die niet afhankelijk zijn van de andere onderdelen van de SDK. |
<objectCache> |
|
IOrganizationServiceCache |
OrganizationServiceCache |
OrganizationServiceCache |
Een verdere samengevatte gegevenscachingservice die de resultaten van IOrganizationService bewerkingen opslaat. Stelt automatisch afhankelijkheden van cache-items in en het uitvoeren van updatebewerkingen maakt afhankelijke cache-items ongeldig. |
<serviceCache> |
IOrganizationService |
OrganizationService |
CachedOrganizationService |
Een wrapperklasse rond de IOrganizationService die de details beheert bij het instellen van een OrganizationServiceProxy of andere willekeurige IOrganizationService objecten. Wanneer gekoppeld met een OrganizationServiceCache object, wordt dit een gecachte service. |
<services> |
OrganizationServiceContext |
De OData en LINQ-compatibele gegevenscontext. Moet specifiek worden verklaard of geconfigureerd zodat er geen standaardtype bestaat. |
<contexts> |
||
IDiscoveryService |
DiscoveryService |
Een wrapperklasse rond de IDiscoveryService die de details beheert bij het instellen van een DiscoveryServiceProxy of andere willekeurige IDiscoveryService objecten. Er bestaan hier geen cache-implementaties voor en dit kan niet worden geconfigureerd in app.config. |
Het implementeren van de interfaces, het overnemen van de beschikbare basisklassen, of gewoon het ordenen van de objectnesten kunnen worden uitgevoerd door het uiteindelijke gedrag aan te passen. Eén manier om de cachefunctionaliteit uit te schakelen is bijvoorbeeld om cachegerelateerde objecten weg te laten en de onbewerkte basisklassen te gebruiken.
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myService = new OrganizationService(myConnection))
using (var myContext = new XrmServiceContext(myService))
{
}
Om de afhankelijk te verwijderen van code, gegenereerd door CrmSvcUtil.exe ten gunste van dynamische code, gebruikt u de klasse CrmOrganizationServiceContext. Een ander scenario is om de gegevenscontext volledig weg te laten en alleen de IOrganizationService direct aan te roepen. Dit is ook de methode voor het aanroepen van de 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()));
}
Contextverbeteringen
Het grootste verschil tussen de CrmOrganizationServiceContext, die de directe basisklasse is van XrmServiceContext, van ontwikkelaarsuitbreidingen voor Microsoft Dynamics 365 en van de basis OrganizationServiceContext in de kern-SDK, is de implementatie van de IUpdatable en IExpandProvider interfaces. Met deze aangepaste implementatie kunnen de gegenereerde gegevenscontext en de entiteitobjecten die door de gegevens zijn geproduceerd, deelnemen aan het framework voor de WCF gegevensservices. Om de gegevenscontext als een OData-eindpunt te bedienen, voegt u een nieuw WCF gegevensservice-eindpunt (.svc) toe aan een bestaande webtoepassing.
<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="MySite.MyContext" %>
Hier is een voorbeeld van een code-behind van een service-eindpunt (.svc.cs) dat kan worden gebruikt voor ontwikkeling. Geef XrmServiceContext op als een generisch type parameter van de klasse 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;
}
}
}
Zie ook
Uitbreidingen voor ontwikkelaars voor Microsoft Dynamics CRM 2015
De context configureren met het configuratiebestand (Dynamics CRM 2015)
Toegang krijgen tot entiteitsrelaties (Dynamics CRM 2015)
Entiteiten aan de context koppelen (Dynamics CRM 2015)
Portaloverzichten voor Dynamics CRM 2015
© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht