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