Criar extensões para a ferramenta de geração de código

 

Publicado: novembro de 2016

Aplicável a: Dynamics CRM 2015

É 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 CRM 2015

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais