Criar extensões para a ferramenta de geração de código
Publicado: janeiro de 2017
Aplicável a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
É possível ampliar a funcionalidade da ferramenta de geração de código especificando parâmetros da linha de comando e valores de parâmetro adicionais. Para especificar um parâmetro, adicione o seguinte na linha de comando: /<parametername>: <nome da classe>, <nome do assembly>. Observe que o nome do assembly não inclui a extensão .dll. Como alternativa, você pode adicionar o valor equivalente ao arquivo de configuração no formato “<add key=”<parametername>” valor=”<nome da classe>,<nome do assembly>” />”.
A tabela a seguir lista os parâmetros que você pode usar.
Nome do parâmetro |
Nome da interface |
Descrição |
---|---|---|
/codecustomization |
ICustomizeCodeDomService |
Chamado depois da geração do CodeDOM ser concluída, assumindo a instância padrão de ICodeGenerationService. É útil para gerar classes adicionais, como constantes em listas. |
/codewriterfilter |
ICodeWriterFilterService |
Chamado durante o processo de geração de CodeDOM, assumindo a instância padrão de ICodeGenerationService, para determinar se um objeto específico ou uma propriedade devem ser gerados. |
/codewritermessagefilter |
ICodeWriterMessageFilterService |
Chamado durante o processo de geração de CodeDOM, assumindo a instância padrão de ICodeGenerationService, para determinar se uma mensagem específica deve ser gerada. Isso não deve ser usado para solicitações/respostas pois elas já foram geradas em Microsoft.Xrm.Sdk.dll e Microsoft.Crm.Sdk.Proxy.dll. |
/metadataproviderservice |
IMetadataProviderService |
Chamado para recuperar os metadados do servidor. Isso pode ser chamada várias vezes durante o processo de geração, portanto, os dados devem ser armazenados em cache. |
/codegenerationservice |
ICodeGenerationService |
Implementação principal da geração CodeDOM. Se isso for modificado, outras extensões não podem se comportar da maneira descrita. |
/namingservice |
INamingService |
Chamado durante a geração de CodeDOM para determinar o nome de objetos, assumindo a implementação padrão. |
A implementação destas interfaces deve ter um dos seguintes construtores:
MyNamingService()
MyNamingService(INamingServicedefaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingServicedefaultService, IDictionary<string, string> parameters)
O espaço reservado Microsoft.Crm.Services.Utility é definido em CrmSvcUtil.exe. Adicionar uma referência a CrmSvcUtil.exe nos projetos de extensão de ferramentas da geração de código do Microsoft Visual Studio.
Extensão de amostra para gerar enumerações para conjuntos de opções
O seguinte código de amostra mostra como escrever uma extensão.
using System;
using Microsoft.Crm.Services.Utility;
using Microsoft.Xrm.Sdk.Metadata;
/// <summary>
/// Sample extension for the CrmSvcUtil.exe tool that generates early-bound
/// classes for custom entities.
/// </summary>
public sealed class BasicFilteringService : ICodeWriterFilterService
{
public BasicFilteringService(ICodeWriterFilterService defaultService)
{
this.DefaultService = defaultService;
}
private ICodeWriterFilterService DefaultService { get; set; }
bool ICodeWriterFilterService.GenerateAttribute(AttributeMetadata attributeMetadata, IServiceProvider services)
{
return this.DefaultService.GenerateAttribute(attributeMetadata, services);
}
bool ICodeWriterFilterService.GenerateEntity(EntityMetadata entityMetadata, IServiceProvider services)
{
if (!entityMetadata.IsCustomEntity.GetValueOrDefault()) { return false; }
return this.DefaultService.GenerateEntity(entityMetadata, services);
}
bool ICodeWriterFilterService.GenerateOption(OptionMetadata optionMetadata, IServiceProvider services)
{
return this.DefaultService.GenerateOption(optionMetadata, services);
}
bool ICodeWriterFilterService.GenerateOptionSet(OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
{
return this.DefaultService.GenerateOptionSet(optionSetMetadata, services);
}
bool ICodeWriterFilterService.GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata,
IServiceProvider services)
{
return this.DefaultService.GenerateRelationship(relationshipMetadata, otherEntityMetadata, services);
}
bool ICodeWriterFilterService.GenerateServiceContext(IServiceProvider services)
{
return this.DefaultService.GenerateServiceContext(services);
}
}
Você pode encontrar este código de amostra e a extensão de amostra GeneratePicklistEnums na seguinte pasta SampleCode\CS\CrmSvcUtilExtensions do SDK. Baixe o pacote do SDK do Microsoft Dynamics CRM. A extensão de amostra GeneratePicklistEnums resulta em um arquivo de código-fonte que contenha enumerações para todos os conjuntos de opções, códigos de estado e códigos de status. Para ver um exemplo de como usar essas enumeração, consulte a amostra SampleCode\CS\QuickStart.
Confira Também
Criar classes de entidade associadas precocemente com a ferramenta de geração de código (CrmSvcUtil.exe)
Usar as classes de entidade associadas precocemente para criar, atualizar e excluir
Dicas de solução de problemas
Executar um único programa usando os serviços Web do Microsoft Dynamics 365
Microsoft Dynamics 365
© 2017 Microsoft. Todos os direitos reservados. Direitos autorais