Developer Extensions のコンテキスト オブジェクト モデル (Dynamics CRM 2015)

 

公開日: 2016年11月

対象: Dynamics CRM 2015

Developer Extensions for Microsoft Dynamics CRM 2015 では、起動と実行のために必要な作業を最小限に抑える一連の相互依存クラスが提供されます。 最も基本的なプログラムで必要となるのは、次の例に示すように、接続文字列 (または app.config の接続文字列名) と、CrmSvcUtil.exe で作成されるデータ コンテキストのみです。

var connection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");

using (var context = new XrmServiceContext(connection))
{
var accounts = context.AccountSet;

foreach (var account in accounts)
Console.WriteLine(account.Name);
}

内部では、ネストされたオブジェクトが下位レベルの操作を処理します。 データ コンテキストは、これらのオブジェクトすべてのコンポジションです。このため、データ コンテキストの動作はオブジェクトに依存します。 このような依存関係は、特定のコンストラクターを使用すると明らかになります。 既定のオブジェクト コンポジションを展開すると、次の例のようになります。

var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
var myObjectCache = MemoryCache.Default;
var myServiceCache = new OrganizationServiceCache(myObjectCache, myConnection);
using (var myService = new CachedOrganizationService(myConnection, myServiceCache))
using (var myContext = new XrmServiceContext(myService))
{
}

依存関係

次の表に、使用可能な依存関係と動作の一覧を示します。

インターフェイス

基本クラス

既定タイプ

説明

構成要素

CrmConnection

CrmConnection

接続の詳細 (接続文字列の形式)。

<connectionStrings>

ObjectCache

MemoryCache

SDK の他のコンポーネントとは独立した生データ キャッシュ サービス。

<objectCache>

IOrganizationServiceCache

OrganizationServiceCache

OrganizationServiceCache

IOrganizationService 操作の結果をキャッシュする、より抽象化されたデータ キャッシュ サービス。 自動的にキャッシュ項目の依存関係を設定します。更新操作を実行すると、依存キャッシュ項目が無効になります。

<serviceCache>

IOrganizationService

OrganizationService

CachedOrganizationService

IOrganizationService の設定の詳細を管理する OrganizationServiceProxy または他の任意の IOrganizationService オブジェクトのラッパー クラス。OrganizationServiceCache オブジェクトと組み合わせると、キャッシュされたサービスになります。

<services>

OrganizationServiceContext

OData および LINQ に対応するデータ コンテキスト。 既定タイプが存在しないように、特に宣言または構成する必要があります。

<contexts>

IDiscoveryService

DiscoveryService

IDiscoveryService の設定の詳細を管理する DiscoveryServiceProxy または他の任意の IDiscoveryService オブジェクトのラッパー クラス。 これに対するキャッシュの実装は存在しません。app.config では構成できません。

インターフェイスの実装や、使用可能な基本クラスの継承、またはオブジェクトのネストの変更を行うだけでも、最終的な動作を変更できます。 たとえば、キャッシュ機能を無効にする方法の 1 つは、キャッシュ関連のオブジェクトを省略して、生の基本クラスを使用することです。

var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myService = new OrganizationService(myConnection))
using (var myContext = new XrmServiceContext(myService))
{
}

動的コードのために、CrmSvcUtil.exe によって生成されたコードへの依存関係を取り除くには、CrmOrganizationServiceContext クラスを使用します。 もう 1 つのシナリオは、データ コンテキスト全体を省略し、IOrganizationService を直接起動することです。 これは IDiscoveryService を起動する方法でもあります。

var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myContext = new CrmOrganizationServiceContext(myConnection))
{
}
using (var myService = new OrganizationService(myConnection))
{
var response = myService.Execute(new WhoAmIRequest()));
}
var discoveryConnection = CrmConnection.Parse("Url=http://crm.contoso.com");
using (var myDiscoveryService = new DiscoveryService(discoveryConnection))
{
var response = myDiscoveryService.Execute(new RetrieveOrganizationsRequest()));
}

コンテキストの機能拡張

CrmOrganizationServiceContext (Developer Extensions for Microsoft Dynamics 365 の XrmServiceContext の直接基本クラス) とコア SDK の基本 OrganizationServiceContext の最も大きな違いは、IUpdatable インターフェイスと IExpandProvider インターフェイスの実装です。 このカスタム実装では、生成されるデータ コンテキストと、データ コンテキストから作成されるエンティティ オブジェクトを、WCF Data Services フレームワークに含めることができます。 データ コンテキストを OData エンドポイントとして使用するには、新しい WCF Data Service エンドポイント (.svc) を既存の Web アプリケーションに追加します。

<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="MySite.MyContext" %>

次に、開発で使用できる、サンプルのサービス エンドポイント分離コード (.svc.cs) を示します。DataService<T> クラスのジェネリック型パラメーターとして XrmServiceContext を指定します。

using System.Data.Services;
using System.Data.Services.Common;
using System.ServiceModel;
using Xrm;

namespace MySite
{
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyContext : DataService<XrmServiceContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// Set rules to indicate which entity sets and service operations are visible, updatable, etc.
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
}

関連項目

Microsoft Dynamics CRM 2015 の Developer Extensions
構成ファイルを使用したコンテキストの構成 (Dynamics CRM 2015)
エンティティの関連付けへのアクセス (Dynamics CRM 2015)
エンティティのコンテキストへの添付 (Dynamics CRM 2015)
Dynamics CRM 2015 のポータルのチュートリアル

© 2017 Microsoft. All rights reserved. 著作権