Creare le estensioni per lo strumento di generazione del codice
Data di pubblicazione: novembre 2016
Si applica a: Dynamics CRM 2015
È possibile estendere la funzionalità dello strumento di generazione del codice specificando i parametri della riga di comando aggiuntivi e i valori dei parametri. Per specificare un parametro, aggiungere le opzioni seguenti alla riga di comando: /<nomeparametro>: <nome classe>, <nome assembly>. Si noti che il nome dell'assembly non include l'estensione .dll. In alternativa, è possibile aggiungere il valore equivalente al file di configurazione nel formato “<aggiungi chiave=”<nomeparametro>” value=”<nome classe>,<nome assembly>” />”.
Nella tabella seguente sono elencati i parametri che è possibile utilizzare.
Nome parametro |
Nome interfaccia |
Descrizione |
---|---|---|
/codecustomization |
ICustomizeCodeDomService |
Chiamato una volta completata la generazione di CodeDOM presupponendo l'istanza predefinita di ICodeGenerationService. È utile per la generazione di altre classi, ad esempio le costanti negli elenchi a discesa. |
/codewriterfilter |
ICodeWriterFilterService |
Chiamato durante il processo di generazione di CodeDOM, presupponendo l'istanza predefinita di ICodeGenerationService, per determinare se generare un oggetto specifico o una proprietà. |
/codewritermessagefilter |
ICodeWriterMessageFilterService |
Chiamato durante il processo di generazione di CodeDOM, presupponendo l'istanza predefinita di ICodeGenerationService, per determinare se generare un messaggio specifico o una proprietà. Questo non può essere utilizzata per le richieste e le risposte poiché sono già generate in Microsoft.Crm.Sdk.Proxy.dll e Microsoft.Xrm.Sdk.dll. |
/metadataproviderservice |
IMetadataProviderService |
Chiamato per recuperare i metadati dal server. Può essere chiamato più volte durante il processo di creazione, in modo che i dati devono essere memorizzati nella cache. |
/codegenerationservice |
ICodeGenerationService |
Implementazione principale della generazione di CodeDOM. Se viene modificata, le altre estensioni potrebbero non funzionare nel modo descritto. |
/namingservice |
INamingService |
Definito durante la generazione di CodeDOM per determinare il nome degli oggetti, presupponendo l'implementazione predefinita. |
L'implementazione di queste interfacce deve avere uno dei seguenti costruttori:
MyNamingService()
MyNamingService(INamingServicedefaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingServicedefaultService, IDictionary<string, string> parameters)
Lo spazio dei nomi Microsoft.Crm.Services.Utility è definito in CrmSvcUtil.exe. Aggiungere un riferimento a CrmSvcUtil.exe nei progetti di estensione dello strumento di generazione del codice di Microsoft Visual Studio.
Estensione di esempio per la generazione di enumerazioni per i set di opzioni
Il seguente codice di esempio illustra come scrivere un'estensione.
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);
}
}
È possibile trovare questo codice di esempio e l'estensione di esempio GeneratePicklistEnums nella cartella seguente SampleCode\CS\CrmSvcUtilExtensions di SDK.Scarica il pacchetto SDK di Microsoft Dynamics CRM. L'estensione di esempio GeneratePicklistEnums produce un file di codice sorgente contenente le enumerazioni per tutti i set di opzioni, i codici di stato e i codici di stato. Per visualizzare un esempio su come utilizzare queste enumerazioni, consultare SampleCode\CS\QuickStart.
Vedere anche
Creare le classi di entità con associazione anticipata con lo strumento di generazione del codice (CrmSvcUtil.exe)
Utilizzare le classi dell'identità con associazione anticipata per la creazione, l'aggiornamento e l'eliminazione
Suggerimenti per la risoluzione dei problemi
Eseguire un semplice programma tramite i servizi Web di Microsoft Dynamics CRM 2015
© 2017 Microsoft. Tutti i diritti sono riservati. Copyright