Delen via


Maak uitbreidingen voor het hulpprogramma voor codegeneratie

 

Gepubliceerd: januari 2017

Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

U kunt de functionaliteit van het hulpprogramma voor het genereren van code uitbreiden door extra opdrachtregelparameters en parameterwaarden op te geven. Als u een parameter wilt opgeven, voegt u het volgende toe aan de opdrachtregel: /<parameternaam>: <klassenaam>, <assemblynaam>. Houd er rekening mee dat de assemblynaam niet de uitbreiding .dll bevat. Als alternatief kunt u de equivalente waarde aan het configuratiebestand toevoegen in de notatie "<add key=”<parameternaam>” value=”<klassenaam>,<assemblynaam>” />”.

De volgende tabel bevat de parameters die u kunt gebruiken.

Parameternaam

Interfacenaam

Beschrijving

/codecustomization

ICustomizeCodeDomService

Aangeroepen nadat het genereren van CodeDOM is voltooid, uitgaande van het standaardexemplaar van ICodeGenerationService. Het is nuttig om extra klassen te genereren, zoals de constanten in selectielijsten.

/codewriterfilter

ICodeWriterFilterService

Aangeroepen tijdens het genereren van CodeDOM, uitgaande van het standaardexemplaar van ICodeGenerationService, om te bepalen of een bepaald object of een eigenschap moet worden gegenereerd.

/codewritermessagefilter

ICodeWriterMessageFilterService

Aangeroepen tijdens het genereren van CodeDOM, uitgaande van het standaardexemplaar van ICodeGenerationService, om te bepalen of een bepaald bericht moet worden gegenereerd. Dit mag niet worden gebruikt voor aanvragen/reacties omdat deze al worden gegenereerd in Microsoft.Crm.Sdk.Proxy.dll en Microsoft.Xrm.Sdk.dll.

/metadataproviderservice

IMetadataProviderService

Aangeroepen om de metagegevens van de server te halen. Dit kan meerdere malen tijdens het genereren worden aangeroepen, dus de gegevens moeten worden opgeslagen in het cachegeheugen.

/codegenerationservice

ICodeGenerationService

Kernimplementatie van het genereren van CodeDOM. Als dit wordt gewijzigd, werken de overige uitbreidingen wellicht niet op de beschreven manier.

/namingservice

INamingService

Aangeroepen tijdens het genereren van CodeDOM om de naam van objecten te bepalen, uitgaande van de standaardimplementatie.

De implementatie van deze interfaces moet een van de volgende constructors hebben:

MyNamingService()
MyNamingService(INamingServicedefaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingServicedefaultService, IDictionary<string, string> parameters)

De Microsoft.Crm.Services.Utility-naamruimte wordt gedefinieerd in CrmSvcUtil.exe. Voeg een verwijzing naar CrmSvcUtil.exe toe aan uw uitbreidingsprojecten voor het hulpprogramma voor het genereren van code van Microsoft Visual Studio.

Voorbeelduitbreiding om opsommingen voor optiesets te genereren

In de volgende voorbeeldcode ziet u hoe u een uitbreiding schrijft.


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);
    }
}

U vindt deze voorbeeldcode en de voorbeelduitbreiding GeneratePicklistEnums in de volgende map SampleCode\CS\CrmSvcUtilExtensions van de SDK. Download het Microsoft Dynamics CRM SDK-pakket. De voorbeelduitbreiding GeneratePicklistEnums produceert een broncodebestand dat opsommingen bevat voor alle optiesets, toestandcodes en statuscodes. Voor een voorbeeld van hoe u deze opsommingen kunt gebruiken raadpleegt u het voorbeeld van SampleCode\CS\QuickStart.

Zie ook

Eerder gebonden entiteitklassen maken met het hulpmiddel voor het genereren van code (CrmSvcUtil.exe)
Gebruik de eerder gebonden entiteitsklassen voor maken, bijwerken en verwijderen
Tips voor probleemoplossing
Een eenvoudig programma uitvoeren met Microsoft Dynamics 365-webservices

Microsoft Dynamics 365

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht