Compartilhar via


Modelo de objeto do contexto das extensões de desenvolvedor (Dynamics CRM 2015)

 

Publicado: novembro de 2016

Aplicável a: Dynamics CRM 2015

As extensões de desenvolvedor para o Microsoft Dynamics CRM 2015 fornecem um conjunto de classes interdependentes que minimizam o trabalho necessário para criação e execução. O programa mais básico exige apenas a cadeia de conexão (ou o nome de uma cadeia de conexão no app.config) e um contexto de dados criado pelo CrmSvcUtil.exe conforme mostrado no seguinte exemplo:

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

Embaixo do capô há objetos aninhados que tratam de operações de nível inferior. O contexto de dados é a composição de todos esses objetos e, portanto, o comportamento do contexto de dados depende dos objetos. Essas dependências podem ser expostas por meio do uso de construtores específicos. Quando expandida, a composição padrão de objeto parece o exemplo a seguir:

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))
{
}

Dependências

A tabela a seguir lista as dependências disponíveis e seus comportamentos.

Interface

Classe base

Tipo padrão

Descrição

Elemento de configuração

CrmConnection

CrmConnection

Os detalhes de conexão na forma de uma cadeia de conexão.

<connectionStrings>

ObjectCache

MemoryCache

O serviço de cache de dados brutos que é independente dos outros componentes do SDK.

<objectCache>

IOrganizationServiceCache

OrganizationServiceCache

OrganizationServiceCache

Um serviço de cache de dados resumido mais detalhado que armazene os resultados das operações do IOrganizationService. Define automaticamente as dependências do item do cache e invalida itens de cache dependentes ao realizar operações de atualização.

<serviceCache>

IOrganizationService

OrganizationService

CachedOrganizationService

Uma classe de wrapper sobre o IOrganizationService que gerencie os detalhes da configuração de umOrganizationServiceProxy ou outros objetos arbitrários do IOrganizationService. Quando emparelhado a um objeto de OrganizationServiceCache, torna-se um serviço de cache.

<services>

OrganizationServiceContext

O contexto de dados capaz do OData e do LINQ. Precisa ser especificamente declarado ou configurado de modo que não haja tipo padrão.

<contexts>

IDiscoveryService

DiscoveryService

Uma classe de wrapper sobre o IDiscoveryService que gerencie os detalhes da configuração de umDiscoveryServiceProxy ou outros objetos arbitrários do IDiscoveryService. Não existem implementações de cache para isso e não podem ser configuradas no app.config.

Implementar as interfaces, herdar as classes base disponíveis ou simplesmente reorganizar o objeto aninhado são ações que podem ser feitas para alterar o comportamento final. Por exemplo, uma forma de desabilitar a funcionalidade de cache é omitir os objetos relacionados a ele e preferir as classes brutas base.

var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myService = new OrganizationService(myConnection))
using (var myContext = new XrmServiceContext(myService))
{
}

Para remover uma dependência no código gerado por CrmSvcUtil.exe em favor do código dinâmico, use a classe de CrmOrganizationServiceContext. Outro cenário é omitir totalmente o contexto de dados e apenas ativar o IOrganizationService diretamente. Essa também é a opção para invocar o 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()));
}

Aprimoramentos de contexto

A diferença mais significante entre o CrmOrganizationServiceContext, que é a classe base direta do XrmServiceContext das Extensões do Desenvolvedor do Microsoft Dynamics 365 e a base do OrganizationServiceContext no SDK principal, é a implementação das interfaces do IUpdatable e do IExpandProvider. Esta implementação personalizada permite que o contexto de dados gerado e os objetos de entidade produzidos pelo contexto de dados participem da estrutura dos serviços de dados do WCF. Para atender o contexto de dados como um ponto de extremidade OData, adicione um novo ponto de extremidade de serviço dos dados do WCF (.svc) a um aplicativo 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" %>

Veja um ponto de extremidade de serviço de exemplo code-behind (.svc.cs) que pode ser usado para desenvolvimento. Especifique o XrmServiceContext como o parâmetro genérico de tipo da 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;
}
}
}

Confira Também

Extensões de desenvolvedor do Microsoft Dynamics CRM 2015
Configurar o contexto com o arquivo de configuração (Dynamics CRM 2015)
Relacionamentos de entidades de acesso (Dynamics CRM 2015)
Anexar entidades ao contexto (Dynamics CRM 2015)
Instruções passo a passo do portal do Dynamics CRM 2015

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais