Créer des extensions pour l’outil de génération de code

 

Date de publication : janvier 2017

S’applique à : Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Vous pouvez étendre les fonctionnalités de l’outil de génération de code en spécifiant d’autres paramètres de ligne de commande et valeurs de paramètre. Pour spécifier un paramètre, ajoutez la syntaxe suivante à la ligne de commande : /<nom du paramètre>:<nom de la classe>,<nom de l’assembly>. Notez que le nom de l’assembly ne contient pas l’extension .dll. Vous pouvez également ajouter la valeur équivalente au fichier de configuration au format "<ajouter une clé="<nom du paramètre>"valeur=”<nom de la classe>,<nom de l’assembly>” />”.

Le tableau suivant répertorie les paramètres que vous pouvez utiliser.

Nom du paramètre

Nom de l’interface

Description

/codecustomization

ICustomizeCodeDomService

Appelé à la fin de la génération de CodeDOM, en supposant l’instance par défaut de ICodeGenerationService. Ce paramètre est très utile pour générer des classes supplémentaires, telles que les constantes dans les listes déroulantes.

/codewriterfilter

ICodeWriterFilterService

Appelé durant le processus de génération de CodeDOM, en supposant l’instance par défaut de ICodeGenerationService, pour déterminer si un objet ou une propriété spécifique doit être généré.

/codewritermessagefilter

ICodeWriterMessageFilterService

Appelé durant le processus de génération de CodeDOM, en supposant l’instance par défaut de ICodeGenerationService, pour déterminer si un message spécifique doit être généré. Ce paramètre ne doit pas être utilisé pour les demandes/réponses, car celles-ci sont déjà générées dans Microsoft.Crm.Sdk.Proxy.dll et Microsoft.Xrm.Sdk.dll.

/metadataproviderservice

IMetadataProviderService

Appelé pour récupérer les métadonnées du serveur. Ce paramètre peut être appelé plusieurs fois durant le processus de génération ; par conséquent, les données doivent être mises en cache.

/codegenerationservice

ICodeGenerationService

Implémentation principale de la génération de CodeDOM. Si ce paramètre est modifié, les autres extensions peuvent ne pas se comporter de la manière décrite.

/namingservice

INamingService

Appelé pendant la génération de CodeDOM pour déterminer le nom des objets, en supposant l’implémentation par défaut.

L’implémentation de ces interfaces doit avoir l’un des constructeurs suivants :

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

L’espace de noms Microsoft.Crm.Services.Utility est défini dans CrmSvcUtil.exe. Ajoutez une référence à CrmSvcUtil.exe dans vos projets d’extension de l’outil de génération de code Microsoft Visual Studio.

Exemple d’extension pour générer des énumérations pour les groupes d’options

L’exemple de code suivant montre comment écrire une extension.


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

Vous trouverez cet exemple de code et l’exemple d’extension GeneratePicklistEnums dans le dossier suivant SampleCode\CS\CrmSvcUtilExtensions du Kit de développement logiciel (SDK).Téléchargez le package Kit de développement logiciel (SDK) de Microsoft Dynamics CRM. L’exemple d’extension GeneratePicklistEnums génère un fichier de code source contenant des énumérations pour tous les groupes d’options, codes d’état et codes de statut. Pour obtenir un exemple sur l’utilisation de ces énumérations, consultez l’exemple SampleCode\CS\QuickStart.

Voir aussi

Créer des classes d’entité à liaison anticipée à l’aide de l’outil de génération de code (CrmSvcUtil.exe)
Utiliser les classes d’entité à liaison anticipée pour la création, la mise à jour et la suppression
Conseils de dépannage
Exécuter un programme simple à l’aide des services Web Microsoft Dynamics 365

Microsoft Dynamics 365

© 2017 Microsoft. Tous droits réservés. Copyright