コード生成ツール用の拡張機能の作成

 

公開日: 2017年1月

対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

追加のコマンドライン パラメーターとパラメーター値を指定することで、コード生成ツールの機能を拡張できます。 パラメーターを指定するには、コマンド ラインに /<パラメーター名>:<クラス名>,<アセンブリ名を追加します>。 アセンブリ名に .dll 拡張子を含めないことに注意してください。 または、これらに相当する値を構成ファイル内に "<add key="<パラメーター名>" value="<クラス名>,<アセンブリ名>" />" 形式で追加することもできます。

使用できるパラメーターを次の表に示します。

パラメーター名

インターフェイス名

説明

/codecustomization

ICustomizeCodeDomService

CodeDOM の生成が完了した後で呼び出されます (ICodeGenerationService の既定のインスタンスを使用すると仮定します)。 候補リスト内の定数など、追加のクラスを生成するには便利です。

/codewriterfilter

ICodeWriterFilterService

特定のオブジェクトまたはプロパティを生成するかどうかを確認するために CodeDOM の生成中に呼び出されます (ICodeGenerationService の既定のインスタンスを使用すると仮定します)。

/codewritermessagefilter

ICodeWriterMessageFilterService

特定のメッセージを生成するかどうかを確認するために CodeDOM の生成中に呼び出されます (ICodeGenerationService の既定のインスタンスを使用すると仮定します)。 このパラメーターは、要求/応答に使用しないでください。要求/応答は、Microsoft.Crm.Sdk.Proxy.dll および Microsoft.Xrm.Sdk.dll で生成済みとなっているからです。

/metadataproviderservice

IMetadataProviderService

サーバーからメタデータを取得するために呼び出されます。 生成プロセス中に複数回呼び出されることがあるため、データはキャッシュに保存する必要があります。

/codegenerationservice

ICodeGenerationService

CodeDOM 生成の中心的な実装部分。 これを変更した場合、他の拡張機能が説明どおりに動作しなくなる可能性があります。

/namingservice

INamingService

オブジェクトの名前を確認するために CodeDOM 生成中に呼び出されます (既定の実装を使用すると仮定します)。

これらのインターフェイスの実装には、次のいずれかのコンストラクターが含まれる必要があります。

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

Microsoft.Crm.Services.Utility 名前空間は、CrmSvcUtil.exe で定義されています。 CrmSvcUtil.exe の参照を Microsoft Visual Studio コード生成ツール拡張機能プロジェクトに追加します。

オプション セットの列挙を生成するためのサンプル拡張機能

次のコード例は、拡張機能の作成方法を示しています。


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

このサンプル コードと GeneratePicklistEnums サンプル拡張機能は、SDK の SampleCode\CS\CrmSvcUtilExtensions フォルダーにあります。Microsoft Dynamics CRM SDK パッケージをダウンロードします。GeneratePicklistEnums サンプル拡張機能は、すべてのオプション セット、状態コード、およびステータス コードの列挙を含むソース コード ファイルを出力します。 これらの列挙を使用する方法の例については、SampleCode\CS\QuickStart サンプルを参照してください。

関連項目

コード生成ツール (CrmSvcUtil.exe) を使用して事前バインド型エンティティ クラスを作成する
作成、更新、および削除の事前バインド エンティティ クラスの使用
トラブルシューティングのヒント
Microsoft Dynamics 365 Web サービスを使用した単純なプログラムの実行

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 著作権