Modello a oggetti del contesto delle estensioni per gli sviluppatori (Dynamics CRM 2015)
Data di pubblicazione: novembre 2016
Si applica a: Dynamics CRM 2015
Le estensioni per gli sviluppatori per Microsoft Dynamics CRM 2015 includono un set di classi interdipendenti per ridurre il lavoro necessario per l'attivazione e l'esecuzione. Il programma di base richiede solo la stringa di connessione (o il nome di una stringa di connessione in app.config) e un contesto dati creato da CrmSvcUtil.exe come illustrato nel seguente esempio:
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);
}
Sotto la cappa sono presenti oggetti annidati che gestiscono le operazioni di livello inferiore. Il contesto dati è la composizione di tutti questi oggetti e, pertanto, il comportamento del contesto dati dipende dagli oggetti. Le dipendenze possono essere esposte tramite l'utilizzo di costruttori specifici. Quando espansa, la composizione predefinita degli oggetti è simile alla seguente:
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))
{
}
dipendenze
Nella tabella seguente sono elencate le dipendenze disponibili e i relativi comportamenti.
Interfaccia |
Classe di base |
Tipo predefinito |
Descrizione |
Elemento di configurazione |
---|---|---|---|---|
CrmConnection |
CrmConnection |
I dettagli di connessione nel modulo di una stringa di connessione. |
<connectionStrings> |
|
ObjectCache |
MemoryCache |
Il servizio di cache dei dati non elaborati che è indipendente dagli altri componenti dell'SDK. |
<objectCache> |
|
IOrganizationServiceCache |
OrganizationServiceCache |
OrganizationServiceCache |
Un ulteriore servizio di cache dei dati astratti che memorizza nella cache i risultati delle operazioni IOrganizationService. Le dipendenze dell'elemento cache viene configurato automaticamente e tramite operazioni di aggiornamento gli elementi dipendenti della cache vengono invalidati. |
<serviceCache> |
IOrganizationService |
OrganizationService |
CachedOrganizationService |
Una classe wrapper per IOrganizationService che gestisce i dettagli della configurazione di OrganizationServiceProxy o di altri oggetti IOrganizationService arbitrari. Quando abbinato a un oggetto OrganizationServiceCache, diventa un servizio memorizzato nella cache. |
<services> |
OrganizationServiceContext |
Il contesto dati che supporta LINQ e OData. Deve essere dichiarato in modo specifico o configurato in quanto non esiste un tipo predefinito. |
<contexts> |
||
IDiscoveryService |
DiscoveryService |
Una classe wrapper per IDiscoveryService che gestisce i dettagli della configurazione di DiscoveryServiceProxy o di altri oggetti IDiscoveryService arbitrari. Non è disponibile alcuna implementazione della cache né è possibile configurarla in app.config. |
È possibile eseguire l'implementazione delle interfacce, l'ereditarietà delle classi di base disponibili o semplicemente la ridisposizione degli oggetti annidati per modificare il comportamento finale. Ad esempio, è possibile disabilitare la funzionalità della cache omettendo gli oggetti cache correlati e preferendo le classi di base non elaborate.
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myService = new OrganizationService(myConnection))
using (var myContext = new XrmServiceContext(myService))
{
}
Per rimuovere la dipendenza dal codice generato da CrmSvcUtil.exe a favore del codice dinamico, utilizzare la classe CrmOrganizationServiceContext. Un altro scenario comporta l'omissione totale del contesto dati e la sola chiamata diretta a IOrganizationService. Questo costituisce anche l'approccio per la chiamata a 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()));
}
Miglioramenti del contesto
La principale differenza tra CrmOrganizationServiceContext, ossia la classe di base diretta di XrmServiceContext, delle estensioni per gli sviluppatori per Microsoft Dynamics 365 e OrganizationServiceContext di base nell'SDK, sta nell'implementazione delle interfacce IUpdatable e IExpandProvider. Questa implementazione personalizzata consente al contesto dati generato e agli oggetti entità prodotti dal contesto dati di partecipare al framework Servizi dati WCF. Per servire il contesto dati come endpoint OData, aggiungere un nuovo endpoint di Servizi dati WCF (.svc) in un'applicazione Web esistente.
<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="MySite.MyContext" %>
Di seguito è riportato un code-behind dell'endpoint servizio di esempio (.svc.cs) che può essere utilizzato per lo sviluppo. Specificare XrmServiceContext come parametro di tipo generico della 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;
}
}
}
Vedere anche
Estensioni per sviluppatori per Microsoft Dynamics CRM 2015
Configurare il contesto con il file di configurazione (Dynamics CRM 2015)
Relazioni tra entità di accesso (Dynamics CRM 2015)
Collega entità al contesto (Dynamics CRM 2015)
Procedure dettagliate dei portali per Dynamics CRM 2015
© 2017 Microsoft. Tutti i diritti sono riservati. Copyright