Modelo de objetos de contexto de extensiones de desarrollador (Dynamics CRM 2015)
Publicado: noviembre de 2016
Se aplica a: Dynamics CRM 2015
Las extensiones para desarrolladores de Microsoft Dynamics CRM 2015 proporcionan un conjunto de clases interdependientes que minimizan el trabajo necesario para empezar a trabajar. El programa más básico requiere solo la cadena de conexión (o el nombre de una cadena de conexión en la app.config) y un contexto de datos creado por CrmSvcUtil.exe tal como se muestra en el siguiente ejemplo:
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);
}
También hay objetos anidados que administran las operaciones de nivel bajo. El contexto de datos es la creación de todos estos objetos y, por consiguiente, el comportamiento del contexto de datos depende de los objetos. Estas dependencias se pueden exponer mediante el uso de constructores específicos. Cuando se expande, la creación predeterminada de objetos se parece al siguiente ejemplo:
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))
{
}
Dependencias
En la siguiente tabla se enumeran dependencias disponibles y sus comportamientos.
Interfaz |
Clase básica |
Tipo predeterminado |
Descripción |
Elemento de configuración |
---|---|---|---|---|
CrmConnection |
CrmConnection |
Los detalles de la conexión en forma de cadena de conexión. |
<connectionStrings> |
|
ObjectCache |
MemoryCache |
El servicio de almacenamiento en caché de datos sin procesar que es independiente de los demás componentes del SDK. |
<objectCache> |
|
IOrganizationServiceCache |
OrganizationServiceCache |
OrganizationServiceCache |
Otro servicio resumido de almacenamiento en caché de datos que almacena en caché los resultados de las operaciones de IOrganizationService. Establece automáticamente dependencias de elemento en caché y realizar operaciones de actualización invalida elementos en caché dependientes. |
<serviceCache> |
IOrganizationService |
OrganizationService |
CachedOrganizationService |
Una clase contenedora acerca de IOrganizationService que administra los detalles de configuración de un OrganizationServiceProxy u otros objetos IOrganizationService arbitrarios. Cuando se empareja con un objeto de OrganizationServiceCache, se convierte en un servicio de caché. |
<services> |
OrganizationServiceContext |
El contexto de datos compatibles con OData y LINQ. Necesita estar específicamente declarado o configurado de forma que no existan tipos predeterminados. |
<contexts> |
||
IDiscoveryService |
DiscoveryService |
Una clase contenedora alrededor de IDiscoveryService que administra los detalles de configuración de un DiscoveryServiceProxy u otros objetos IDiscoveryService arbitrarios. No existen implementaciones de almacenamiento en caché para esto y no pueden configurarse en app.config. |
Se pueden implementar las interfaces, heredar las clases básicas disponibles o simplemente reorganizar la anidación de objetos para modificar el comportamiento final. Por ejemplo, una forma de deshabilitar funcionalidad de almacenamiento en caché es omitir los objetos relacionados con la caché y preferir las clases básicas sin procesar.
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myService = new OrganizationService(myConnection))
using (var myContext = new XrmServiceContext(myService))
{
}
Para quitar la dependencia del código generado por CrmSvcUtil.exe a favor de código dinámico, use la clase CrmOrganizationServiceContext. Otro escenario es omitir el contexto de datos completamente y solo invocar IOrganizationService directamente. También es el método de invocación 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()));
}
Mejoras de contexto
La diferencia más importante entre CrmOrganizationServiceContext, que es la clase básica directa de XrmServiceContext, de las extensiones para desarrolladores de Microsoft Dynamics 365 y la OrganizationServiceContext básica en la SDK principal, es la implementación de las interfaces IUpdatable y IExpandProvider. Esta implementación personalizada permite que el contexto de datos generado y los objetos de entidad producidos por el contexto de datos participen en el marco de servicios de datos de WCF. Para servir el contexto de datos como extremo OData, agregue un nuevo extremo de servicio de datos de WCF (.svc) a una aplicación web existente.
<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="MySite.MyContext" %>
Este es un ejemplo de código subyacente de extremo de servicio (.svc.cs) que puede usarse para el desarrollo. Especifique XrmServiceContext como parámetro de tipo genérico de la clase 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;
}
}
}
Ver también
Extensiones de desarrollador para Microsoft Dynamics CRM 2015
Configurar el contexto con el archivo de configuración (Dynamics CRM 2015)
Acceder a relaciones entre entidades (Dynamics CRM 2015)
Adjuntar entidades al contexto (Dynamics CRM 2015)
Tutoriales de portal para Dynamics CRM 2015
© 2017 Microsoft. Todos los derechos reservados. Copyright