Freigeben über


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