分享方式:


開發人員擴充功能內容物件模型 (Dynamics CRM 2015)

 

發佈日期: 2016年11月

適用對象: Dynamics CRM 2015

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 在中設定。

實作介面、繼承可用的基底類別或重新排列物件巢狀可以執行,以修改最後行為。 例如,停用快取功能方式之一是省略快取關聯的物件和偏好原始的基底類別。

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 類別。 另一個案例是整個省略資料內容並直接叫用 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()));
}

內容增強功能

Microsoft Dynamics 365 開發人員擴充功能的 CrmOrganizationServiceContext (這是 XrmServiceContext 的直接基底類別) 與核心 SDK 的基底 OrganizationServiceContext 的重大差異是,IUpdatableIExpandProvider 介面實作。 此自訂實作允許產生的資料內容以及資料內容所產生的實體物件參與 WCF 資料服務架構。 若要將資料內容當做 OData 端點,請新增 WCF 資料服務端點 (.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) 可用於開發。 指定 XrmServiceContext 做為 DataService<T> 類別的一般類型參數。

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 開發人員擴充功能
使用設定檔設定內容 (Dynamics CRM 2015)
存取實體關聯 (Dynamics CRM 2015)
將實體附加至內容 (Dynamics CRM 2015)
Dynamics CRM 2015 的入口網站逐步解說

© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權