大部分的 PowerApps 應用程式使用儲存於雲端服務中稱為資料來源的外部資訊。 常見範例是儲存在商務用 OneDrive 中的 Excel 檔案資料表。 應用程式會使用「連接」來存取這些資料來源。

本文討論不同類型的資料來源,以及如何使用資料表的資料來源。

要建立進行基本讀取和寫入資料來源的應用程式很容易。 但有時候您想要進一步控制您應用程式的資料流入及流出方式。 本文將說明 PatchDataSourceInfoValidateErrors 函式如何提供更大的控制權。

資料來源的種類

資料來源可以連接至雲端服務,或對應用程式而言可以是本機。

已連線的資料來源

最常見的資料來源是資料表,您可以使用它來擷取與儲存資訊。 您可以使用資料來源的連接來讀取與寫入 Microsoft Excel 活頁簿、SharePoint 清單、SQL 資料表,以及許多其他格式中的資料,這些都可以儲存在像是商務用 OneDrive、DropBox、SQL Server 等等的雲端服務中。

資料表以外的資料來源包括電子郵件、行事曆、Twitter 和通知,但是這篇文章不討論這些其他類型的資料來源。

本機資料來源

使用資源庫顯示表單編輯表單控制項,可以輕鬆地建立從資料來源讀取與寫入資料的應用程式。 若要開始,請參閱資料表單一文。

當您要求 PowerApps 從資料建立應用程式時,會使用這些控制項。 在幕後,應用程式會使用內部資料表來儲存及處理來自資料來源的資料。

集合是一種特殊的資料來源,這對應用程式是本機的,且不受連接至雲端中的服務支援,因此資訊不能跨相同使用者的裝置或在使用者之間共用。 可在本機載入和儲存集合。

資料表的類型

PowerApps 應用程式內部的資料表是固定的值,就像數字或字串是值一樣。 內部資料表不會儲存在任何地方,只存在於應用程式的記憶體。 您無法直接修改結構和資料表的資料。 反之,您可以執行的是透過公式建立新的資料表︰您使用該公式來製作原始資料表的已修改副本。

外部資料表會儲存在資料來源中,以供日後擷取與共用。 PowerApps 提供「連接」來讀取和寫入儲存的資料。 在連接內,您可以存取多個資訊資料表。 您將選取要在應用程式中使用的資料表,且每個都將成為個別的資料來源。

若要深入了解,使用資料表會更詳細探討內部資料表的詳細資料,但它也適用於位於雲端服務中的外部資料表。

使用資料表

您可以與使用內部 PowerApps 資料表相同的方式來使用資料表資料來源。 就像內部資料表,每個資料來源都有可以在公式中使用的記錄資料行以及屬性。 此外:

  • 資料來源與連接中的基礎資料表具有相同的資料行名稱和資料類型。

    注意:對於包含具有空格之資料行名稱的 SharePoint 和 Excel 資料來源,PowerApps 會將空格取代為 "_x0020_"。 例如,SharePoint 或 Excel 中的 "Column Name" 在資料版面配置中顯示或是在公式中使用時,會在 PowerApps 中顯示為 "Column_x0020_Name"

  • 資料來源是在應用程式載入時從服務自動載入。 您可以使用 Refresh 函式強制資料重新整理。

  • 當使用者執行應用程式時,它們可以建立、修改和刪除記錄,並將這些變更推送回服務中的基礎資料表。

  • DataSourceInfoDefaultsValidate 函式提供可用來最佳化使用者經驗的資料來源相關資訊。

建立資料來源

PowerApps 無法用來建立連接的資料來源或修改其結構;資料來源必須已存在於某處的服務。 例如,若要在儲存於 OneDrive 上的 Excel 活頁簿中建立資料表,您要先使用 OneDrive 上的 Excel Online 來建立活頁簿。 接下來,要從您的應用程式建立與其的連接。

不過,可以在應用程式內建立和修改集合資料來源,但只暫時性的。

顯示一或多個記錄

上圖顯示當應用程式讀取資料來源中資訊時的資訊流程︰

  • 資訊會透過儲存體服務儲存並共用 (在此案例中,Office 365 網站的 SharePoint 清單)。
  • 連接會提供這項資訊給應用程式。 連接會負責驗證存取資訊的使用者。
  • 啟動應用程式或按下 Refresh 函式時,資訊會取自連接到應用程式中的資料來源以供本機使用。
  • 公式用來讀取資訊並將它公開在使用者可見的控制項。 您可以使用螢幕上的資源庫及連線 Items 屬性到資料來源︰Gallery.Items = DataSource,以顯示資料來源的記錄。 您使用控制項的 Default 屬性,將資源庫內的控制項連線至資源庫。
  • 資料來源也是資料表。 因此,您可以使用 FilterSortAddColumns 和其他函式,在使用它作為整體之前改善並增強資料來源。 您也可以使用 LookupFirstLast 和其他函式來使用個別的記錄。

修改記錄

在先前章節中,您看到如何讀取資料來源。 請注意,上圖中的箭號是單向。 資料來源的變更不是透過擷取資料的相同公式回推入。 而是使用新的公式。 通常編輯記錄與瀏覽記錄會使用不同的螢幕,尤其是在行動裝置上。

請注意,若要修改資料來源的現有記錄,記錄必須初始來自資料來源。 記錄可能會經過資源庫、內容變數,及任何數目的公式,但是其來源應該可回溯至資料來源。 這很重要,因為其他資訊會與唯一識別它的記錄共同移動,確保您修改正確的記錄。

上圖顯示更新資料來源的資訊流程︰

  • 編輯表單控制項提供輸入卡片的容器,是由使用者輸入控制項 (例如文字輸入方塊、滑桿) 所組成。 DataSourceItem 屬性是用來識別要編輯的記錄。
  • 每個輸入卡都有 Default 屬性,通常設定為表單之 ThisItem 記錄的欄位。 接著輸入卡片內的控制項會從 Default 取得其輸入值。 通常您不需要修改這個值。
  • 每個輸入卡會公開 Update 屬性。 這個屬性會將使用者的輸入對應至記錄的特定欄位,以寫入回資料來源。 通常您不需要修改這個值。
  • 螢幕上的按鈕或影像控制項可讓使用者儲存對記錄的變更。 控制項的 OnSelect 公式會呼叫 SubmitForm 函式來進行這項工作。 SubmitForm 會讀取卡的所有Update 屬性,並使用此來寫回至資料來源。
  • 有時會有問題。 網路連接可能會關閉,或由應用程式不知道的服務進行驗證檢查。 表單控制項的 ErrorErrorKind 屬性會使這項資訊可用,因此您可以將它顯示給使用者。

如需更精細控制程序的詳細資訊,您也可以使用 PatchErrors 函式。 編輯表單控制項會公開 Updates 屬性,使您能讀取表單內之欄位值。 您也可以使用這個屬性來呼叫連接上的自訂連接器,進而完全略過 PatchSubmitForm 函式。

驗證

變更記錄之前,應用程式應該盡可能確定變更是可接受的。 這有兩個理由︰

  • 立即回應給使用者。 修復問題的最佳時機就是發生此狀況當下,使用者還記憶猶新時。 實際於每個觸控或按下按鍵,可能會出現紅色文字識別發生問題與其項目。
  • 較低網路流量和越少延遲使用者。 應用程式中偵測到更多的問題表示透過網路進行較少對話來偵測並解決問題。 每個對話需花費時間,在這期間使用者必須等候才可以繼續進行。

PowerApps 提供兩個驗證工具︰

  • 資料來源可以提供何者有效及何者無效的資訊。 例如,數字可能有最小和最大值,而且可能需要一或多個項目。 您可以使用 DataSourceInfo 函式來存取這項資訊。
  • Validate 函式會使用這個相同的資訊來檢查單一資料行或整筆記錄的值。

錯誤處理

太棒了,您已驗證您的記錄。 是時候使用 Patch 來更新該記錄!

但可惜的是,可能仍有問題。 網路已關閉、服務驗證失敗,或使用者沒有適當的權限,您的應用程式可能會發生的錯誤僅以這些為例。 必須適當地回應錯誤情況,提供回饋給使用者及修正它的方法。

當資料來源發生錯誤時,您的應用程式會自動記錄錯誤資訊,並透過 Errors 函式使其可用。 Errors 會與發生問題的記錄相關聯。 如果是使用者可以修正的問題 (例如驗證問題),它們可以重新提交記錄,並將錯誤清除。

如果當以 PatchCollect建立記錄時發生錯誤,則沒有可相關聯任何錯誤的記錄。 在此情況下,便會由 Patch 傳回空白,且可用來當做 Errors 的記錄引數。 建立錯誤會使用下一個作業清除。

Errors 函式會傳回錯誤資訊的資料表。 如果錯誤可以屬於特定的資料行,則這項資訊可以包括資料行資訊。 在資料行位於編輯畫面上之附近位置的標籤控制項中使用資料行層級錯誤訊息。 在整筆記錄的 [儲存] 按鈕附近的位置使用記錄層級的錯誤訊息,其中錯誤資料表的資料行為空白。

使用大型資料來源

當您從大型資料來源 (或許是數百萬筆記錄) 建立報告時,會想要減少網路流量。 例如,假設您想要報告紐約市所有擁有「白金」StatusCode 的客戶。 而「客戶」資料表包含數百萬筆記錄。

會想要將這些數百萬個客戶帶入您的應用程式,然後選擇您想要的。 您想要的是在您儲存資料表的雲端服務內進行選擇,而且只透過網路傳送所選的記錄。

許多而非全部您可用來選擇記錄的函式可以委派,也就是說,是在雲端服務內執行。 您可以閱讀委派來了解如何執行這項操作。

集合

集合是一種特殊的資料來源。 它們對應用程式是本機的,且不受連接至雲端中的服務支援,因此資訊不能跨相同使用者的裝置或在使用者之間共用。 它們的運作方式如同任何其他資料來源,但有一些例外狀況︰

  • 集合可以使用 Collect 函式動態建立。 它們不同於連接型資料來源,不需要事先建立。
  • 集合的資料行可以隨時使用 Collect 函式進行修改。
  • 集合允許重複的記錄。 集合中可以存在相同記錄的多個複本。 諸如 Remove 的函式會在它們找到的第一個相符項目上運作,除非提供 All 引數。
  • 您可以使用 SaveDataLoadData 函式,以儲存並重新載入集合的複本。 資訊會儲存在其他使用者、應用程式或裝置無法存取的私人位置。
  • 您可以使用匯出匯入控制項,將集合的複本儲存並重新載入至使用者可以互動的檔案。

如需使用集合做為資料來源的詳細資訊,請參閱建立並更新集合

集合通常用於保存應用程式的全域狀態。 請參閱使用變數以取得可用來管理狀態的選項。