Erstellen von Erweiterungen für das Codegenerierungstool
Veröffentlicht: Januar 2017
Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Sie können die Funktionalität des Codegenerierungstools erweitern, indem Sie zusätzliche Befehlszeilenparameter und Parameterwerte angeben. Um einen Parameter anzugeben, fügen Sie der Eingabeaufforderung Folgendes hinzu: /<parametername>:<class name>,<assembly name>. Beachten Sie, dass assembly name nicht die .dll-Erweiterung enthält. Alternativ können Sie den Gegenwert der CONFIG-Datei im Format “<add key=”<parametername>” value=”<class name>,<assembly name>” />” hinzufügen.
In der folgenden Tabelle werden die Parameter aufgeführt, die Sie verwenden können:
Parametername |
Schnittstellenname |
Beschreibung |
---|---|---|
/codecustomization |
ICustomizeCodeDomService |
Aufgerufen, nachdem die CodeDOM-Generierung abgeschlossen wurde, nimmt die Standardinstanz von ICodeGenerationService an. Dies ist nützlich zum Erstellen von zusätzlichen Klassen, wie die Konstanten in Auswahllisten. |
/codewriterfilter |
ICodeWriterFilterService |
Angerufen während des Vorgangs der CodeDOM-Generierung, nimmt die Standardinstanz von ICodeGenerationService an, um zu bestimmen, ob ein bestimmtes Objekt oder eine Eigenschaft generiert werden soll. |
/codewritermessagefilter |
ICodeWriterMessageFilterService |
Angerufen während des Vorgangs der CodeDOM-Generierung, nimmt die Standardinstanz von ICodeGenerationService an, um zu bestimmen, ob eine bestimmte Nachricht generiert werden soll. Dies sollte nicht für Anforderungen/Antworten verwendet werden, da diese bereits in Microsoft.Xrm.Sdk.dll und Microsoft.Crm.Sdk.Proxy.dll generiert werden. |
/metadataproviderservice |
IMetadataProviderService |
Aufgerufen, um Metadaten vom Server abzurufen. Dies kann mehrmals während des Generierungsprozesses aufgerufen werden, daher sollten die Daten zwischengespeichert werden. |
/codegenerationservice |
ICodeGenerationService |
Kernimplementierung der CodeDOM-Generierung. Wenn dieses geändert wird, verhalten sich unter Umständen die anderen Erweiterungen nicht in der beschriebenen Weise. |
/namingservice |
INamingService |
Angerufen während der CodeDOM-Generierung, um den Namen für Objekte zu bestimmen, die Standardimplementierung vorausgesetzt. |
Die Implementierung dieser Schnittstellen muss einen der folgenden Konstruktoren haben:
MyNamingService()
MyNamingService(INamingServicedefaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingServicedefaultService, IDictionary<string, string> parameters)
Der Microsoft.Crm.Services.Utility-Namespace wird in CrmSvcUtil.exe definiert. Fügen einen Verweis auf CrmSvcUtil.exe in Ihren Microsoft Visual Studio-Codegenerierungstool-Erweiterungsprojekten hinzu.
Beispielerweiterung, um Enumerationen für Optionssätze zu generieren
Der folgende Beispielcode zeigt, wie eine Erweiterung geschrieben wird.
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);
}
}
Sie können diesen Beispielcode und die GeneratePicklistEnums-Beispielerweiterung im folgenden Ordner SampleCode\CS\CrmSvcUtilExtensions des SDK suchen.Laden Sie das Microsoft Dynamics CRM SDK-Paket herunter. Die GeneratePicklistEnums-Beispielerweiterung gibt eine Quellcodedatei aus, die Enumerationn fü alle Optionssätze, Zustandscodes und Statuscodes enthält. Ein Beispiel dafür, wie diese Enumerationen verwendet werden, finden Sie im SampleCode\CS\QuickStart-Beispiel.
Siehe auch
Entitätsklassen mit früher Bindung mit dem Codegenerierungstool erstellen (CrmSvcUtil.exe)
Verwenden der Entitätsklassen mit früher Bindung zum Erstellen, Löschen und Aktualisieren
Problembehandlungs-Tipps
Ausführen eines einfachen Programms mit Microsoft Dynamics 365-Webdiensten
Microsoft Dynamics 365
© 2017 Microsoft. Alle Rechte vorbehalten. Copyright