透過使用 Microsoft Dataverse Data SDK,.NET 開發者可以建立自訂的虛擬資料表資料提供者,以協助整合現有資料提供者不支援的外部資料來源類型。 每個資料提供者都由一組可重複使用的 Dataverse 外掛程式組成,這些外掛程式會實作支援的 CRUD 作業。 對於每個虛擬資料表(也稱為虛擬實體),開發者可以建立外掛並註冊,代表每個 Create、 Update、 Retrieve、 RetrieveMultiple 和 Delete 操作。 本節提供資料提供者的基本資訊,以及開發自訂提供者的方法,包括範例程式碼。
備註
與其建立自訂資料來源提供者,不如考慮將資料來源調整到現有的資料提供者。 例如,如果您為外部資料來源建立 OData v4 介面,即可使用所提供的標準 OData v4 Data Provider 直接存取該資料來源;此 Data Provider 支援 CRUD 作業。 新增此 REST 介面的機制會依底層資料服務技術而異。 例如,請參見 WCF Data Services 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 資料表中設定正確的設定資料。 你的虛擬資料表開始回應要求。
更多資訊請參閱建立資料提供者及新增外掛。
偵錯外掛程式
自訂虛擬資料表提供者是一種外掛程式。 利用這些文章中的資訊來除錯自訂虛擬表格提供者的外掛: 除錯外掛 與 教學:除錯外掛。