Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
<*parametername*>:<*class name*>,<*assembly name*>
Tenga en cuenta que el nombre del ensamblado no incluye la extensión .dll. Como alternativa, puede agregar el valor equivalente al archivo de configuración en el formato:
<add key="<*parametername*>" value="<*class name*>,<*assembly name*>" />
En la tabla siguiente se enumeran los parámetros que puede utilizar.
| Nombre del parámetro | Nombre de la interfaz | Descripción |
|---|---|---|
codecustomization |
ICustomizeCodeDomService |
Se 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 en las listas de selección. |
codewriterfilter |
ICodeWriterFilterService |
Se llama durante el proceso de generación de CodeDOM, asumiendo la instancia predeterminada de ICodeGenerationService, para determinar si se debe generar un objeto o propiedad específicos. |
codewritermessagefilter |
ICodeWriterMessageFilterService |
Se llama durante el proceso de generación de CodeDOM, asumiendo la instancia predeterminada de ICodeGenerationService, para determinar si se debe generar un mensaje específico. Esto no debe usarse para solicitudes/respuestas, ya que estas ya se generan en Microsoft.Crm.Sdk.Proxy.dll y Microsoft.Xrm.Sdk.dll. |
metadataproviderservice |
IMetadataProviderService |
Se le llama para recuperar los metadatos del servidor. Esto se puede llamar varias veces durante el proceso de generación, por lo que los datos deben almacenarse en caché. |
codegenerationservice |
ICodeGenerationService |
Implementación principal de la generación de CodeDOM. Si esto se cambia, es posible que las otras extensiones no se comporten de la manera descrita. |
namingservice |
INamingService |
Se llama durante la generación de CodeDOM para determinar el nombre de los objetos, asumiendo la implementación predeterminada. |
La implementación de estas interfaces debe tener uno de los siguientes constructores:
MyNamingService()
MyNamingService(INamingService defaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingService defaultService, 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 Visual Studio.
Extensión de ejemplo para generar enumeraciones para opciones (conjuntos de opciones)
En el siguiente código de ejemplo se 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);
}
}
Descargue el ejemplo: CrmSvcUtilExtensions y GeneratePickListEnums.
La extensión de ejemplo GeneratePicklistEnums genera un archivo de código fuente que contiene enumeraciones para todos los conjuntos de opciones, códigos de estado y códigos de estatus.
Cada enumeración se puede usar para probar o establecer el valor de una propiedad. Normalmente, esta propiedad es una columna de tabla (atributo de entidad), pero hay algunas que se utilizan para otras propiedades.
Ejemplo de uso
En el ejemplo siguiente se muestra cómo usar una de estas enumeraciones para establecer un valor en una cuenta.
// Instantiate an account object. Note the use of the option set enumerations defined
// in OptionSets.cs.
Account account = new Account { Name = "Fourth Coffee" };
account.AccountCategoryCode = new OptionSetValue((int)AccountAccountCategoryCode.PreferredCustomer);
account.CustomerTypeCode = new OptionSetValue((int)AccountCustomerTypeCode.Investor);
// Create an account record named Fourth Coffee.
// Save the record reference so we can delete it during cleanup later.
Guid accountId = service.Create(account);