Crear extensiones para la herramienta de generación de código
Publicado: noviembre de 2016
Se aplica a: Dynamics CRM 2015
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 CRM 2015
© 2017 Microsoft. Todos los derechos reservados. Copyright