從 Microsoft Dataverse 串流資料

Datastream 支援從 Microsoft Dataverse 執行個體複製異動事件。Dataverse 是雲端資料平台,可讓您安全地儲存及管理商務應用程式使用的資料。

本頁面提供以下資訊:

  • 從 Dataverse 複製資料時,您需要瞭解的重要用語。
  • Datastream 處理從來源 Dataverse 環境擷取資料的行為。
  • Datastream 支援的 Dataverse 版本。
  • 使用 Dataverse 做為來源時的已知限制。

重要詞彙

Dataverse 的運作方式如下:

  • 資料表 (舊稱「實體」) 類似於關聯式資料庫中的資料表。Dataverse 預設包含標準表格,但您也可以建立自訂表格。
  • 資料欄 (舊稱「欄位」) 是資料表的屬性,類似於關聯式資料庫中的資料欄。
  • 資料列是資料表中的特定記錄,類似於關聯式資料庫中的資料列。

行為

Datastream 中的 Dataverse 來源支援功能依賴 Dataverse Web API,後者使用開放資料通訊協定 (OData)。Datastream 會根據您設定的時間間隔,輪詢來源的變更。

從 Dataverse 來源複製資料時,會出現下列情況:

  • API 互動:Datastream 會使用 RESTful 要求與 Dataverse Web API 互動。基礎環境網址為 https://ORGANIZATION_ID.crm.dynamics.com/api/data/v9.1/。 使用標準標頭 (Accept: application/jsonOData-MaxVersion: 4.0OData-Version: 4.0)。
  • 驗證:Datastream 會使用 OAuth 2.0 搭配用戶端憑證授權類型處理驗證。Datastream 會從 Microsoft Identity Platform 取得權杖。
  • 結構定義探索:Dataverse 結構定義是動態的。Datastream 會查詢 /EntityDefinitions 端點,找出物件名稱和結構定義。

    • 物件名稱:資料串流會將 GET 請求傳送至 /EntityDefinitions 實體集路徑,並使用 $filter=TableType ne 'Virtual' and IsPrivate eq false 篩選器和 $select=EntitySetName 參數,擷取物件名稱。
    • 物件結構定義:資料串流會將 GET 要求傳送至 /EntityDefinitions 實體集路徑,並使用 $expand=Attributes($select=LogicalName,AttributeType,AttributeTypeName) 參數和 $filter=EntitySetName eq '[objectName]' 篩選器,為每個實體擷取物件結構定義。
  • 資料複製

    • Datastream 會複製標準和自訂的 Dataverse 資料表。不包括虛擬和私人資料表。
    • 歷來資料補充作業:如果為串流設定這項作業,Datastream 會複製所含資料表的所有歷來資料。方法是將初始 GET 要求傳送至實體集,並使用 API 回應中提供的 @odata.nextLink 屬性,逐一查看所有頁面。使用 Prefer: odata.maxpagesize=5000 標頭。
    • 增量同步:Datastream 會複製插入和更新事件。這項作業是透過時間戳記同步功能完成,並篩選 modifiedon 欄位大於上次同步時間 ($filter=modifiedon gt [last_sync_timestamp]) 的記錄。資料串流不會擷取刪除事件。
  • 輪詢間隔:Datastream 會根據您建立串流時設定的輪詢間隔,輪詢變更。資料更新間隔會反映在串流的資料更新間隔指標中。

所有複製的物件都支援使用 modifiedon 欄位進行增量同步,以及完整回填。

版本

Datastream 使用 Dataverse Web API v9.1 版。

已知限制

使用 Dataverse 做為來源時,已知限制包括:

  • modifiedon 時間戳記為準的增量同步方法不會擷取刪除事件。
  • Datastream 不支援使用差異連結 (@odata.deltaLink) 的 Dataverse 建議變更追蹤功能,因為系統不支援儲存後續增量提取所需的差異連結網址。
  • 複製功能僅適用於標準和自訂表格。不支援虛擬和私有資料表。
  • 請務必正確更新來源資料表中的 modifiedon 欄位,確保累加同步處理功能正常運作。
  • 如要擷取 Picklist 欄位的標籤,資料要求必須包含 Prefer: data.include-annotations="*" 標頭,而不只是整數值。

後續步驟