使用 Microsoft Dataverse Data SDK,.NET 開發人員可以選擇建立自訂虛擬資料表資料提供者,以協助整合現有資料提供者不支援的外部資料來源類型。 每個資料提供者都由一組可重複使用的 Dataverse 外掛程式組成,這些外掛程式會實作支援的 CRUD 作業。 對於每個虛擬表格 (也稱為虛擬實體),開發人員可以建立外掛程式,並註冊它們,代表每個 Create、Update、Retrieve、RetrieveMultiple 和 Delete 作業。 本節提供資料提供者的基本資訊,以及開發自訂提供者的方法,包括範例程式碼。
備註
除了建立自訂資料來源提供者之外,您也應該考慮將資料來源調整為現有的資料提供者。 例如,如果您建立外部資料來源的 OData v4 介面,則您可以使用提供的標準 OData v4 資料提供者直接存取它,該提供者也支援 CRUD 作業。 新增此 REST 介面的機制因基礎資料服務技術而異,如需範例,請參閱 WCF 資料服務 4.5。 OData 有廣泛的產業支援,提供各種專用工具和相容技術。
先決條件
自訂資料提供者需要大量的開發資源來建立和維護。 您必須具備以下領域的基礎知識:
- 外部資料來源結構描述以及相關聯的資料存取技術。 此領域知識是適用於特定外部資料來源類型的知識。
- Dataverse 定義結構描述:其他資訊: 使用程式碼處理資料表和資料行定義。
- Dataverse 事件架構:其他資訊: 事件架構。
- Dataverse 外掛程式架構和開發:其他資訊: 使用外掛程式擴充商務流程。
Microsoft.Xrm.Sdk.Data.dll元件可作為 NuGet 套件使用:Microsoft.CrmSdk.Data
提供者類別
您可以使用虛擬資料表資料 SDK 元件建立兩種一般類別的資料提供者:泛型或目標。 下表說明這些方法,並列出相應於該方法的最合適資料提供者開發模型。
| 類別 | 開發模型 | 說明 |
|---|---|---|
| 泛型 | 「裸機」提供者 | 這些提供者可以靈活地將 FetchXML 查詢運算式轉換為對外部資料來源的關聯請求,然後傳回產生的記錄。 這類提供者可以重複用於此資料來源類型的所有執行個體。 此方法是最通用的方法,但開發起來更加複雜。 如果資料來源的結構描述變更,則只能重新對應受影響的虛擬資料表。 |
| 已設定目標 | 已知結構描述的 LINQ 提供者 | 這類提供者僅將查詢狹義地轉譯成現有已知資料來源執行個體的相關聯 LINQ 呼叫。 資料來源必須是 LINQ 提供者,如啟用 LINQ 查詢的資料來源主題中所述。 此方法僅限於特定資料來源執行個體,但所需編寫的程式碼要少得多。 如果資料來源的結構描述變更,則必須更新並重建資料提供者。 |
標準 OData v4 資料提供者和 Azure Cosmos DB 資料提供者是泛型提供者的範例。
使用自訂資料提供者的步驟
建立可匯入 Dataverse 應用程式的虛擬資料表資料提供者解決方案需要執行數個步驟:
- 開發自訂資料提供者外掛程式 DLL (或一組 DLL)。
- 使用外掛程式註冊工具 (PRT) 向您的 Dataverse 服務註冊自訂資料提供者。
- 建立資料提供者解決方案。
- 自訂資料來源表格以反映您的資料類型或特定實例。
- 匯出自訂資料提供者解決方案。
其他資訊: 範例:具有 CRUD 作業的自訂虛擬資料表提供者
外掛程式開發
由於虛擬資料表支援 CRUD 作業,因此您將以在 Create、Update、Retrieve、RetrieveMultiple 和 Delete 事件上註冊的外掛程式形式撰寫資料提供者。 每個相應的事件都會在執行內容中包含描述所要傳回之資料類型的資訊。
| Event | 執行內容 |
|---|---|
| 取回 | 描述要擷取的資料表,以及要包含的資料行和任何相關資料表。 |
| RetrieveMultiple | 包含 QueryExpression 定義查詢的物件。 此架構包含 QueryExpressionVisitor 類別,其設計目的是檢查查詢運算式樹狀結構的不同部分。 |
對於這兩個事件,您必須:
- 將執行上下文中的相應資訊轉換為適用於外部數據源的查詢。
- 從外部系統檢索數據。
- 針對 Retrieve,將資料轉換為Entity;否則,針對 RetrieveMultiple,將資料轉換為EntityCollection。 此結果會透過 Dataverse 平台傳回給執行查詢的使用者。
命名空間中的 Microsoft.Xrm.Sdk.Data 類別提供架構,協助將執行內容中的 Dataverse 查詢資訊對應至適合您外部資料來源的格式的查詢。 此架構可協助您將傳回的資料轉換為 Dataverse 平台預期的適當 Entity 或 EntityCollection 類型。
資料提供者例外狀況
如果由於任何原因,您的代碼無法達到預期的結果,則必須引發相應的錯誤。 Microsoft.Xrm.Sdk.Data.Exceptions命名空間包含下列衍生自 SdkExceptionBase的例外狀況類別,您可以將其用於此目的:
| 例外狀況類別 | 說明 |
|---|---|
| AuthenticationException | 在對外部資料來源服務進行安全性驗證時發生錯誤;例如,從外部資料服務收到的 HTTP 狀態 401。 通常因目前使用者沒有適當權限,或相關聯 EntityDataSource 中的連接資訊不正確而發生。 |
| EndpointException | 資料來源表格中的端點配置無效或端點不存在。 |
| GenericDataAccessException | 一般資料存取錯誤,在錯誤未對應至更明確的例外狀況時使用。 |
| InvalidMetadataException | |
| InvalidQueryException | 指定的查詢無效;例如,無效的子句組合或不支援的比較運算子。 |
| ObjectNotFoundException | 外部資料來源中指定的記錄不存在。 |
| TimeoutException | 外部操作未在允許的時間內完成;例如,來自外部資料服務的 HTTP 狀態 408 的結果。 |
外掛程式註冊
與一般外掛不同,您只會使用外掛註冊工具 (PRT) 來註冊組件和每個事件的外掛。 您將不會記錄特定步驟。 您的外掛程式將在階段 30 中執行,這是一般外掛程式步驟無法使用的作業的主要核心交易階段。 您將不會註冊步驟,而是使用下清單格設定您的資料提供者。
| 表 | 說明 |
|---|---|
| EntityDataProvider | 定義要用於每個事件的外掛程式,以及資料來源的邏輯名稱。 |
配置虛擬表格的定義,使用 PRT 登錄外掛程式,並在 EntityDataProvider 表格中設定正確的配置資料時,虛擬表格將開始回應要求。
其他資訊: 建立資料提供者並將外掛程式新增至提供者
偵錯外掛程式
自訂虛擬資料表提供者是一種外掛程式。 使用下列主題中的資訊來除錯自訂虛擬表格提供者的外掛程式: 除錯外掛程式 及 指導教學: 除錯外掛程式。