Compartir a través de


Crear extensiones para la herramienta de generación de código

 

Publicado: enero de 2017

Se aplica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Puede ampliar la funcionalidad de la herramienta de generación de código especificando parámetros de línea de comandos y valores de parámetros adicionales. Para especificar un parámetro, agregue lo siguiente a la línea de comandos: /<nombre de parámetro>:<nombre de clase>,<nombre de ensamblado>. Tenga en cuenta que el nombre del ensamblado no incluye la extensión .dll. También puede agregar el valor equivalente al archivo de configuración con el formato “<add key=”<nombre de parámetro>” value=”<nombre de clase>,<nombre de ensamblado>” />”.

En la siguiente tabla se muestran los parámetros que puede usar.

Nombre del parámetro

Nombre de la interfaz

Descripción

/codecustomization

ICustomizeCodeDomService

Se le llama una vez finalizada la generación de CodeDOM, suponiendo que se trata de la instancia predeterminada de ICodeGenerationService. Es útil para generar clases adicionales, como las constantes de las listas desplegables.

/codewriterfilter

ICodeWriterFilterService

Se le llama durante el proceso de generación de CodeDOM, suponiendo que se trata de la instancia predeterminada de ICodeGenerationService, para determinar si debe generarse una propiedad o un objeto específico.

/codewritermessagefilter

ICodeWriterMessageFilterService

Se le llama durante el proceso de generación de CodeDOM, suponiendo que se trata de la instancia predeterminada de ICodeGenerationService, para determinar si debe generarse un mensaje específico. No debe usarse para las solicitudes/respuestas, puesto que estas ya están generadas en Microsoft.Crm.Sdk.Proxy.dll y Microsoft.Xrm.Sdk.dll.

/metadataproviderservice

IMetadataProviderService

Se le llama para recuperar los metadatos del servidor. La llamada puede realizarse varias veces durante el proceso de generación, por lo que los datos se deben almacenar en caché.

/codegenerationservice

ICodeGenerationService

Implementación principal de la generación de CodeDOM. Si se cambia, las otras extensiones pueden no comportarse de la manera descrita.

/namingservice

INamingService

Se le llama durante la generación de CodeDOM para determinar el nombre de los objetos, suponiendo que se trata de la implementación predeterminada.

La implementación de estas interfaces debe tener uno de los constructores siguientes:

MyNamingService()
MyNamingService(INamingServicedefaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingServicedefaultService, IDictionary<string, string> parameters)

El espacio de nombres Microsoft.Crm.Services.Utility se define en CrmSvcUtil.exe. Agregue una referencia a CrmSvcUtil.exe en los proyectos de extensión de la herramienta de generación de código de Microsoft Visual Studio.

Ejemplo de extensión para generar enumeraciones para los conjuntos de opciones

El siguiente código de ejemplo muestra cómo escribir una extensión.


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

Puede encontrar este código de ejemplo y la extensión de ejemplo GeneratePicklistEnums en la siguiente carpeta SampleCode\CS\CrmSvcUtilExtensions de SDK.Descargue el paquete de SDK de Microsoft Dynamics CRM. La extensión de ejemplo GeneratePicklistEnums crea un archivo de código fuente que contiene enumeraciones para todos los conjuntos de opciones y códigos de estado. Para obtener un ejemplo de cómo usar estas enumeraciones, vea el ejemplo de SampleCode\CS\QuickStart.

Ver también

Crear las clases de entidad con enlace en tiempo de compilación con la herramienta de generación de código (CrmSvcUtil.exe)
Usar las clases de entidad con enlace en tiempo de compilación para crear, actualizar y eliminar
Sugerencias para la solución de problemas
Ejecutar un programa sencillo mediante los servicios web de Microsoft Dynamics 365

Microsoft Dynamics 365

© 2017 Microsoft. Todos los derechos reservados. Copyright