SaveData、LoadData 和 ClearData 函式

適用於: 畫布應用程式

從應用程式主機的儲存體中儲存並重新載入集合

Note

這些功能現在可以當作實驗性功能在網路瀏覽器中播放應用程式時使用。 此功能預設為停用。 若要啟用,請瀏覽至設定>即將推出的功能>實驗性>在網頁播放機上啟用 SaveData、LoadData、ClearData,然後打開開關。 若要提交有關此實驗性功能的意見反應,請移至 Power Apps 社群論壇

描述

SaveData 函式會以某名稱儲存集合物件以供稍後使用。

LoadData 函式會以 SaveData 先前儲存的名稱來重新載入集合物件。 您無法使用此函式從其他來源載入集合物件。

ClearData 函式會清除特定名稱下的儲存體,如果未提供名稱,則清除與該應用程式關聯的所有儲存體。

Note

  • SaveDataLoadDataClearData 之間共用的名稱是金鑰,而不是檔案名稱。 因為名稱在每個應用程式中都是唯一的,所以不需要複雜,也不會發生名稱衝突的危險。 名稱不能包含下列任一字元:*".?:\<>|/
  • 對於在 Teams 和網頁瀏覽器中執行的 Power Apps,SaveData 的資料限制為 1 MB。 行動播放機中的 Power Apps 執行不會有固定的限制,但是有下列的實際限制。
  • 請勿使用 SaveData 來儲存網頁中的敏感性資料,因為它會以純文字方式儲存。

使用這些功能,可以透過下列方式改善應用程式的啟動效能:

  • 在第一次執行時,在 公式中緩存資料。
  • 在下次執行時重新載入本機緩存。

您也可以使用這些函式,將 簡單的離線功能 新增至應用程式。

當下列條件時,您無法在瀏覽器中使用這些函式:

  • 製作 Power Apps Studio 中的應用程式。

若要測試您的應用程式,請在 iPhone 或 Android 裝置上的 Power Apps 行動裝置執行它。

這些函式受到可用應用程式記憶體數量的限制,因為這些函式是在記憶體內集合物件上運作。 可用的記憶體會根據下列因素而變化:

  • 裝置與作業系統。
  • Power Apps 播放機使用的記憶體。
  • 應用程式的複雜性與畫面和控制項。

在儲存大型資料時,您期望應用程式執行的裝置類型上,使用預期的案例測試您的應用程式。 通常會有 30 MB 到 70 MB 的可用記憶體。

這些函式依賴於以 CollectClearCollect 定義的內涵集合物件。 您不需要呼叫 CollectClearCollect,就能將資料載入至集合物件以進行定義。 當您在先前的 SaveData 之後使用 LoadData 時,通常會發生此案例。 您所需做的只是在公式中存在這些函式,以隱式定義集合的結構。 如需詳細資訊,請參閱 建立和移除變數

載入的資料會附加到集合物件中。 如果您要從空白集合物件開始,請使用 Clear 函式,然後再呼叫 LoadData

資料安全性

謹慎考量隔離和加密隨 SaveData 一起儲存的資料,並判斷這是否適合您的需要,尤其是如果裝置由多個使用者共用時。

SaveData 一起儲存的資料是透過 Power Apps 播放機與其他 Power Apps 進行隔離。 資料會根據應用程式的應用程式識別碼來儲存,並自動在 Power Apps 之隔離 SaveData 命名空間 。

作業系統和瀏覽器負責透過裝置和網站隔離 Power Apps 與其他應用程式之間的資料。 例如,作業系統負責將 Microsoft Outlook 中儲存的資料與 Power Apps 中儲存的資料進行隔離,以及將該資料與網站 (例如 Bing.com 或 PowerApps.com) 進行隔離。 作業系統的內建應用程式沙箱設施會用於 SaveData 儲存體,這通常無法供使用者存取,或是已對其隱藏。

使用相同的應用程式時,作業系統和瀏覽器也負責隔離不同作業系統層級使用者之間的資料。 例如,如果兩個不同的使用者共用一台電腦,並使用兩個不同的 Windows 登入認證,則作業系統會負責隔離兩個 Windows 使用者之間的資料。

如果作業系統使用者相同,就不一定會隔離不同 Power Apps 使用者之間的資料。 並非每個 Power Apps 播放機都會以相同的方式來處理這種情況。 例如,以相同 Windows 使用者的身分登入時,使用者在 Power Apps 播放機中登出 Power Apps 後,又以不同 Power Apps 使用者的身分登入。 變更 Power Apps 使用者之前儲存在應用程式中的資料,可能可供相同應用程式中第二個 Power Apps 使用者存取。 資料也可能遭移除,而第一個 Power Apps 使用者可能再也無法存取該資料。 此行為會因Power Apps 播放機不同而有所不同。

作業系統也可能會加密資料,或者您可以使用行動裝置管理工具,例如 Microsoft Intune。 在網頁瀏覽器中播放應用程式時儲存的資料並未加密。

語法

SaveData (CollectionName)
LoadData (CollectionName [,IgnoreNonexistentFile ])

  • Collection - 必要。 要儲存或載入的集合物件。
  • Name - 必要。 儲存體名稱。 您必須使用相同名稱來儲存及載入相同的資料集。 此命名空間不會與其他應用程式共用。 名稱不能包含下列任一字元:*".?:\<>|/
  • IgnoreNonexistentFile - 非必要。 布林值指示尚未存在時要執行的動作。 使用 false (預設值) 來返回錯誤,而使用 true 禁止顯示錯誤。

ClearData( [Name] )

  • Name - 非必要。 先前使用 SaveData 儲存的儲存體名稱。 如果未提供名稱,則將清除與該應用程式關聯的所有儲存體。

範例

公式 描述 結果
SaveData( LocalCache, "MyCache" ) LocalCache 集合物件儲存至使用者的裝置,其名稱為「MyCache」,適用於 LoadData 稍後再檢索。 將資料儲存到應用程式主機,其名稱為「MyCache」。
LoadData( LocalCache, "MyCache" ) 從使用者的裝置載入 LocalCache 集合物件,其名稱為「MyCache」,先前是以呼叫 SaveData 進行儲存。 將資料從應用程式主機載入,其名稱為「MyCache」。
ClearData( "MyCache" ) 清除儲存體,其名稱為「MyCache」。 以此名稱儲存的所有資料將無法再透過 LoadData 使用。 將資料從應用程式移除,其名稱為「MyCache」。
ClearData() 清除與此應用程式關聯的所有儲存體。 其他應用程式儲存的資料不受影響。 從應用程式主機中移除所有資料。

簡單離線範例

下列簡單的範例會在離線時捕獲並儲存每天的名稱與照片。 它會將資訊儲存在裝置的本機儲存體中以備後用。 這樣可讓應用程式關閉,或在裝置重新開機時不會遺失資料。

Note

此範例使用相機控制項來擷取影像。 由於在 Teams 或網頁瀏覽器執行時,SaveData 的資料限制為 1 MB,因此這個範例將不會處理太多影像。 此外,根據相機的不同,它甚至可能無法處理一張圖像。 使用裝置來執行此完整範例,或移除此範例的相機控制項和圖片部分,以在 Teams 或網頁瀏覽器中執行。

  1. 使用平板電腦版面配置建立空白的畫布應用程式。 如需詳細資料,請閱讀 從範本中建立應用程式,並在 Blank app 下選取 Tablet layout

  2. 新增 Text input 控制項和 Camera 控制項,並如顯示的方式大致排列:

    將文字輸入和相機控制項新增至空白畫面。

  3. 新增 Button 控制項

  4. 按兩下按鈕控制項,將按鈕文字變更為 Add Item (或修改 Text屬性)。

  5. 將按鈕控制項的 OnSelect 屬性設為此可將項目新增至集合物件的公式:

    Collect( MyItems, { Item: TextInput1.Text, Picture: Camera1.Photo } )
    

    使用文字「新增項目」 和 OnSelect 屬性集所新增的按鈕控制項

  6. 新增另一個 Button 控制項。

  7. 點擊兩下按鈕控制項,將按鈕文字變更為 Save Data (或修改 Text 屬性)。

  8. 將按鈕控制項的 OnSelect 屬性設為此可為了將我們的集合物件儲存本機設備的公式:

    SaveData( MyItems, "LocalSavedItems" )
    

    使用文字「儲存資料」 和 OnSelect 屬性集所新增的按鈕控制項

    測試按鈕並不會影響任何項目是很有吸引力的。 但是,當您在網頁瀏覽器中製作時,您將只會看到錯誤。 在您執行後續步驟測試此公式之前,請先在裝置上儲存並開啟應用程式:

  9. 新增第三個 Button 控制項。

  10. 點擊兩下按鈕控制項,將按鈕文字變更為 Load Data (或修改 Text 屬性)。

  11. 將按鈕控制項的 OnSelect 屬性設為此可從本機設備的載入集合物件的公式:

    LoadData( MyItems, "LocalSavedItems" )
    

    使用文字「載入資料」 和 OnSelect 屬性集所新增的按鈕控制項

  12. 以包含圖片和文字區域的垂直版面配置來新增 Gallery 控制項:

    資源庫種類的選取,使用影像和文字區域選取「垂直」

  13. 出現提示時,選取 MyItems 集合物件做為此資源庫的資料來源。 這將設定 Gallery 控制項目的 Items 屬性:

    資料來源的資源庫選項。 資源庫範本中的影像控制項應將其 Image 屬性預設為 ThisItem.Picture,標籤控制項應將其 Text 屬性預設為 ThisItem.Item。 在下列步驟中新增項目之後,請檢查這些公式,看不到資源庫中的任何項目。

  14. 將控制項置放到其他控制項的右側。

    重新置放至畫面右側。

  15. 儲存您的應用程式。 如果是第一次儲存,就不需要發佈它。 如果不是第一次,請在儲存後發佈應用程式。

  16. 在裝置上開啟您的應用程式,例如手機或平板電腦。 SaveDataLoadData 無法在 Studio 或網頁瀏覽器中使用。 如果您未立即看到您的應用程式,請重新整理應用程式清單,可能需要幾秒鐘的時間,應用程式才會顯示在您的裝置上。 登入並傳回您的帳戶也同樣有説明。

    在執行的應用程式未新增任何專案。 下載您的應用程式之後,您可以從網路斷開,並離線執行應用程式。

  17. 輸入名稱並拍下項目的圖片。

  18. 選取 Add Item按鈕。 重複多次新增項目,以載入您的集合物件。

    已新增三個項目的應用程式。

  19. 選取 Sace Data 按鈕。 這會將您集合物件中的資料儲存至本機裝置。

  20. 關閉應用程式。 在記憶體中的集合物件將會遺失,包括所有項目名稱和圖片,但是它們仍然會存在於裝置的儲存體中。

  21. 再次啟動應用程式。 在記憶體中的集合物件將在資源庫中再次顯示為空白。

    再次以無新增項目執行的應用程式。

  22. 選取 Load Data 按鈕。 集合物件將會從您裝置上儲存的資料重新填入,而您的項目就會回到資源庫中。 在此按鈕呼叫 LoadData 函式之前,集合物件已空;您無需先呼叫 CollectClearCollect 才可以從儲存體中載入資料。

    在呼叫 LoadData 函式之後,執行三個項目的應用程式會還原。

  23. 再次選取 Load Data 按鈕。 儲存的資料會附加至集合物件末尾,而捲軸會出現在資源庫上。 如果您想要取代附加,請先使用 Clear 函式來清除集合物件,然後再呼叫 LoadData 函式。

    在呼叫 LoadData 函式兩次後,執行六個項目的應用程式會還原。

更多高級離線範例

如需詳細的範例,請參閱 簡單離線功能 的文章。