了解畫布應用程式中的資料來源
在 Power Apps 中,大部分的畫布應用程式使用儲存於雲端服務中,稱為資料來源的外部資訊。 常見範例是儲存在 OneDrive for Business 中的 Excel 檔案資料表。 應用程式會使用連線來存取這些資料來源。
本文討論不同類型的資料來源,以及如何使用資料表資料來源。
要建立進行基本讀取和寫入資料來源的應用程式很容易。 但有時候您會想要進一步控制您應用程式的資料流入及流出方式。 本文將說明 Patch、DataSourceInfo、Validate 和 Errors 函式如何提供更大的控制權。
資料來源的種類
資料來源可以連接至雲端服務,也可以當應用程式的本機。
已連線的資料來源
最常見的資料來源是資料表,您可以使用它來擷取與儲存資訊。 您可以使用資料來源的連線來讀取與寫入 Microsoft Excel 活頁簿、使用 Microsoft Lists 建立的清單、SharePoint 程式庫、SQL 資料表,以及許多其他格式中的資料,這些都可以儲存在像是商務用 OneDrive、DropBox 和 SQL Server 的雲端服務中。
資料表以外的資料來源包括電子郵件、行事曆、Twitter 和通知,但是這篇文章並不會討論這些其他類型的資料來源。
本機資料來源
使用**資源庫、顯示表單** 和**編輯表單** 控制項可以輕鬆地建立從資料來源讀取與寫入資料的應用程式。 若要開始,請參閱 了解資料表單 文章。
當您要求 Power Apps 從資料建立應用程式時,會使用這些控制項。 在幕後,應用程式會使用內部資料表來儲存及處理來自資料來源的資料。
集合 是一種特殊的資料來源,這對應用程式是本機的,且不受連接至雲端中的服務支援,因此資訊不能跨裝置在相同使用者或在多個使用者之間共用。 可在本機載入和儲存的集合。
資料表的類型
Power Apps 應用程式內部的資料表是固定的值,就像數字或字串是值一樣。 內部資料表不會儲存在任何地方,只存在於應用程式的記憶體內。 您無法直接修改資料表的結構和資料。 但您可以做的是,透過公式建立新的資料表︰您使用該公式來製作原始資料表的修改副本。
外部資料表會儲存在資料來源中,以供日後擷取與共用。 Power Apps 提供「連線」來讀取和寫入儲存的資料。 在連線內,您可以存取多個資訊資料表。 您將選取要在應用程式中使用的資料表,且每個都將成為個別的資料來源。
若要深入了解,使用資料表 會更詳細探討內部資料表的細節,但它也適用於位於雲端服務中的外部資料表。
使用資料表
使用資料表資料來源的方式,和使用內部 Power Apps 資料表的方式相同。 就像內部資料表一樣,每個資料來源都有可以在公式中使用的記錄、資料行 以及屬性。 此外:
資料來源與連線中的基礎資料表具有相同的資料行名稱和資料類型。
注意
SharePoint 和 Excel 資料來源可包含資料行名稱具有空格,而 Power Apps 會用 "_x0020_" 取代空格。 例如,SharePoint 或 Excel 中的 "Column Name" 在資料版面配置中顯示或用於公式時,將在 Power Apps 中顯示為 "Column_x0020_Name"。
資料來源是在應用程式載入時從服務自動載入。 您可以使用 Refresh 函式強制資料重新整理。
當使用者執行應用程式時,他們可以建立、修改和刪除記錄,並將這些變更發送回服務中的基礎資料表。
DataSourceInfo、Defaults 和 Validate 函式提供可用來優化使用者經驗的資料來源相關資訊。
建立資料來源
Power Apps 無法用來建立已連線的資料來源或修改其結構;資料來源必須已存在於某處的服務中。 例如,若要在儲存於 OneDrive 上的 Excel 活頁簿中建立資料表,您要先使用 OneDrive 上的 Excel Online 來建立活頁簿。 接下來,要從您的應用程式建立與其的連線。
不過,集合資料來源可以在應用程式內建立和修改,但只是暫時性的。
顯示一或多個記錄
上圖顯示當應用程式讀取資料來源中資訊時的資訊流程︰
- 此資訊是透過儲存服務 (在此案例中,為 Microsoft Lists 或 SharePoint Online) 進行儲存和共用。
- 連線會提供這項資訊給應用程式。 連線會負責驗證存取資訊的使用者。
- 啟動應用程式或按下 Refresh 函式時,資訊會從連接到應用程式資料來源的連線中提取,以供本機使用。
- 公式用來讀取資訊並將它公開在使用者可見的控制項。 您可以透過畫面上的資源庫和把 Items 屬性連到資料來源︰Gallery.Items = DataSource,來顯示資料來源的記錄。 請使用控制項的 Default 屬性,將資源庫內的控制項連線至資源庫。
- 資料來源也是一個表格。 因此,您可以使用 Filter、Sort、AddColumns 和其他函式,在資料來源作為整體使用前改善並強化它。 您也可以使用 Lookup、First、Last 和其他函式來使用個別的記錄。
修改記錄
在先前章節中,您已看到如何讀取資料來源。 請注意,上圖中的箭號是單向。 資料來源的變更不是透過擷取資料的相同公式回推。 而是使用新的公式。 通常編輯記錄與瀏覽記錄會使用不同的畫面,尤其是在行動裝置上。
請注意,若要修改資料來源的現有記錄,記錄必須本來就來自原始資料來源。 記錄可能會資源庫、內容變數,及其他某些公式間移動,但是其來源應該可回溯至資料來源。 這很重要,因為其他資訊會與唯一識別它的記錄共同移動,以確保您修改的是正確的記錄。
上圖顯示更新資料來源的資訊流程︰
- 編輯表單 控制項提供輸入卡片的容器,是由使用者輸入控制項(如文字輸入控制項或滑桿)所組成。 DataSource 和 Item 屬性是用來識別要編輯的記錄。
- 每個輸入卡片都有 Default 屬性,通常設定為表單之 ThisItem 記錄的欄位。 輸入卡片內的控制項會從 Default 取得其輸入值。 通常您不需要修改這個值。
- 每個輸入卡片會公開一個 Update 屬性。 這個屬性會將使用者的輸入對應至記錄的特定欄位,以寫回資料來源。 通常您不需要修改這個值。
- 螢幕上的按鈕或圖像控制項可讓使用者儲存對記錄的變更。 控制項的 OnSelect 公式會呼叫 SubmitForm 函式來進行這項工作。 SubmitForm 會讀取卡片所有的 Update 屬性,並使用這個來寫回至資料來源。
- 有時會有問題。 網路連線可能會關閉,或由應用程式不知道的服務進行驗證檢查。 表單控制項的 Error 和 ErrorKind 屬性會使這項資訊可用,因此您可以將它顯示給使用者。
如需更精細地控制程序,您也可以使用 Patch 和 Errors 函式。 編輯表單 控制項會公開 Updates 屬性,使您能讀取表單內欄位的值。 您也可以使用這個屬性來呼叫連線上的自訂連接器,進而完全略過 Patch 和 SubmitForm 函式。
驗證
變更記錄之前,應用程式應該盡可能確定變更是可接受的。 這有兩個理由︰
- 立即回應給使用者。 修復問題的最佳時機就是發生狀況當下,當使用者還記憶猶新的時候。 實際上在每次觸控或擊鍵時,當發現輸入有問題時,會出現紅色文字。
- 較低網路流量和比較少的使用者延遲。 在應用程式中偵測到越多的問題,表示透過網路來偵測並解決問題的對話越少。 每個對話都需花費時間,而在這期間使用者必須等候才能夠繼續進行。
Power Apps 提供兩個驗證工具︰
- 資料來源可以提供何者有效及何者無效的資訊。 例如,數字可能有最小和最大值,而且可能需要一次或多次輸入。 您可以使用 DataSourceInfo 函式來存取這項資訊。
- Validate 函式會使用這個相同的資訊來檢查單一資料行或整筆記錄的值。
錯誤處理
太棒了,您已驗證您的記錄。 是時候使用 Patch 來更新該記錄!
但可惜的是,可能仍有問題。 網路已關閉、服務驗證失敗,或使用者沒有適當的權限,這些只是一些您的應用程式可能遇到的錯誤舉例。 必須適當地回應錯誤情況,提供回饋給使用者及修正它的方法。
當資料來源發生錯誤時,您的應用程式會自動記錄錯誤資訊,並透過 Errors 函式使其可用。 錯誤和發生問題的記錄有關。 如果是使用者可以修正的問題(例如驗證問題),他們可以重新提交記錄,而錯誤將會被清除。
如果是 Patch 或 Collect 建立記錄時發生錯誤,則沒有任何與錯誤相關的記錄。 在此情況下,便會由 Patch 傳回空白,且可用來當做 Errors 的紀錄引數。 建立錯誤會使用下一個作業清除。
Errors 函式會傳回錯誤資訊的資料表。 如果錯誤能歸因於特定的資料行,則這項資訊就能夠包括資料行資訊。 在資料行所在之編輯畫面附近的標籤控制項中,使用資料行層級錯誤訊息。 在整筆記錄之儲存按鈕附近的位置,使用記錄層級的錯誤訊息,其中錯誤資料表的資料行為空白。
使用大型資料來源
當您從大型資料來源 (或許是數百萬筆記錄)建立報表時,您會想要盡量減少網路傳輸。 假設您想要報告紐約市內所有擁有「白金」StatusCode 的客戶。 而您的客戶資料表包含數百萬筆記錄。
您不會想要將這數百萬個客戶都帶入您的應用程式,然後再一一挑選您想要的。 您想要的是在您儲存資料表的雲端服務內進行選擇,而且只透過網路傳送所選的記錄。
許多(但而非全部)您可用來選擇記錄的函式都可以接受委派,也就是說,能在雲端服務內執行。 您可以閱讀委派 來了解如何執行這項操作。
集合
集合是一種特殊的資料來源。 它們對應用程式是本機的,且不受連接至雲端中的服務支援,因此資訊不能跨裝置在相同使用者或在多個使用者之間共用。 它們的運作方式如同任何其他資料來源,但有一些例外︰
- 集合可以使用 Collect 函式動態建立。 不同於連線型資料來源,它們不需要事先建立。
- 集合的資料行可以隨時使用 Collect 函式進行修改。
- 集合允許重複的記錄。 集合中可以存在相同記錄的多個複本。 諸如 Remove 等函式會在它們找到的第一個相符項目上運作,除非提供 All 引數。
- 您可以使用 SaveData 和 LoadData 函式,來儲存和重新載入集合的複本。 資訊會儲存在其他使用者、應用程式或裝置無法存取的私人位置。
- 您可以使用**匯出** 和**匯入** 控制項,儲存集合的複本並將其重新載入至使用者可以互動的檔案。
如需使用集合做為資料來源的詳細資訊,請參閱建立並更新集合。
集合通常用於保存應用程式的全域狀態。 請參閱使用變數 來取得可用來管理狀態的選項。