共用方式為


了解畫布應用程式中的變數

如果您使用過其他程式設計工具,例如 Visual Basic 或 JavaScript,您可能會問: 變數在哪裡? Power Apps 的運作方式不同,需要不同的方法。 當您建置畫布應用程式時不要想拿到變數,而是問自己︰我會在 Excel 中做什麼?

在其他工具中,您可以明確執行計算並將結果儲存在變數中。 但 Power Apps 和 Excel 會在輸入資料變更時自動重新計算公式,因此您通常不需要建立或更新變數。 藉由使用此方法,您可以更輕鬆地建立、瞭解及維護應用程式。

有時,您需要在 Power Apps 中使用變數,這會透過新增 行為公式來擴充 Excel 的模型。 例如,當使用者選取一個按鈕時,就會執行這些公式。 在行為公式中,設定變數以用於其他公式通常會很有幫助。

一般而言,避免使用變數。 但有時只有變數可以讓您創建您想要的體驗。 當變數出現在設定其值的函式中時,會隱式建立並輸入。

將 Excel 轉譯至Power Apps

Excel

讓我們來檢閱 Excel 的運作方式。 輸入格可以有值,例如數字或字串,或是以其他輸入格值為基礎的公式。 當您在儲存格中輸入不同的值時,Excel 會自動重新計算相依於新值的任何公式。 您不需要執行任何程式設計即可啟用此行為。

在下列範例中,儲存格 A3 使用公式 A1+A2。 如果 A1A2 變更, A3 會自動重新計算以顯示變更。 此行為不需要公式本身之外的任何編碼。

Excel 重新計算兩個數字加總的動畫。

Excel 沒有變數。 具有公式的儲存格的值會根據其輸入而變更,但無法記住公式的結果並將其儲存在儲存格或其他任何位置。 若你更改輸入格的值,整個試算表可能會變更,且任何先前計算的值都會遺失。 您可以複製和粘貼單元格,但這是手動的,公式無法實現。

Power Apps

您在 Power Apps 中建立的應用程式運作方式很像 Excel。 你不需要更新儲存格,而是在螢幕上的任何位置加入控制項,並命名它們以便用於公式中。

例如,您可以新增名為 Label1Label 控制項,以及兩個名為 TextInput1TextInput2文字輸入控制項,以複製應用程式中的 Excel 行為。 如果您將 Label1Text 屬性設定為 TextInput1 + TextInput2,它一律會自動顯示 TextInput1TextInput2 中數字的總和。

在 Power Apps 中計算兩個數字的和。

請注意,已選取該 Label 控制項,在畫面頂端的公式列中顯示其 Text 公式。 公式 TextInput1 + TextInput2 會在這些控制項之間建立相依性,就像 Excel 活頁簿中儲存格之間的相依性一樣。 讓我們變更 TextInput1 的值:

在 Power Apps 中計算兩個數字之和的動畫。

Label1 的公式會自動重新計算並顯示新值。

在 Power Apps 中,您不僅可以使用公式來設定控制項的主要值,還可以設定格式等屬性。 在下一個範例中,標籤的 Color 屬性公式會自動以紅色顯示負值。 If 函數從 Excel 中看起來很熟悉:

If( Value(Label1.Text) < 0, Red, Black )

條件式格式設定的動畫。

您可以在許多案例中使用公式:

  • 當您裝置的 GPS 開啟時,地圖控制項會顯示您目前的位置,並使用包括 Location.LatitudeLocation.Longitude 的公式。 當您移動時,地圖會自動追蹤您的位置。
  • 其他使用者會更新 資料來源。 例如,團隊的其他人可能會更新清單中的項目。 當您重新整理資料來源時,任何相依公式都會自動重新計算,以顯示更新的資料。 例如,您可以將資料庫的 Items 屬性設定為公式 Filter(SharePointList),這會自動顯示經過新篩選的 記錄集。

優勢

使用公式來建置應用程式有許多優點︰

  • 如果您會使用 Excel,便會使用 Power Apps。 模型和公式語言都相同。
  • 如果您使用過其他程式設計工具,請考慮執行這些範例需要多少程式碼。 在 Visual Basic 中,您會在每個文字輸入控制項上撰寫變更事件的事件處理常式。 在每個中進行計算的代碼是多餘的,可能會不同步,或者您需要編寫一個通用的子常式。 在 Power Apps 中,您可以使用單一單行公式來執行所有這些工作。
  • 若要查看 Label1 的文字來自何處,您必須確切地知道要查看的位置: Text 屬性中的公式。 沒有其他方法可以變更此控制項的文字。 在傳統程式設計工具中,任何事件處理程式或子常式都可以從程式中的任何位置變更標籤的值。 這使得很難追蹤變數發生變化的時間和地點。
  • 如果您變更滑桿控制項,然後改變主意,您可以將滑桿變更回其原始值。 就好像什麼都沒有改變一樣:該應用程序顯示與以前相同的控制值。 像在 Excel 中一樣,嘗試和詢問“如果”沒有任何後果。

一般來說,如果你能用公式做點什麼,你就會過得更好。 讓 Power Apps 中的公式引擎為您工作。

知道何時要使用變數

讓我們來變更我們簡單的加法器,讓它如同舊式加法機器一般執行總計功能。 當您選取 [新增 ] 按鈕時,您會將一個數字新增至執行總計。 當您選取 [清除] 按鈕時,您會將執行總計重設為零。

顯示 描述:
具有一個文字輸入控制項、一個標籤和兩個按鈕的應用程式。 當應用程式開始時,總和為 0。

紅點表示使用者在文字輸入方塊中的手指,使用者在其中輸入 77
文字輸入控制項包含 77,而正按下「新增」按鈕。 使用者選取新增按鈕。
總計是 77,而另一個 77 正在新增中。 77 會新增至總計中。

使用者再次選取新增按鈕。
在清除之前,總計為 154。 再次新增77 至總和,產生 154。

使用者選取清除按鈕。
已清除總計。 總計歸零。

我們的加法器會使用 Excel 中不存在的項目︰按鈕。 在此應用程式中,您無法僅使用公式來計算加總,因為它的值取決於一系列使用者採取的動作。 您需要手動記錄和更新運行總數。 大部分的程式設計工具會將此資訊儲存於變數

有時候,您需要一個變數,讓應用程式按照您想要的方式運作,但這種方法有注意事項:

  • 您需要手動更新總計。 自動重新計算無法完成您的特定要求。
  • 執行總計不會根據其他控制項的值來計算。 這取決於使用者選取 [ 新增 ] 按鈕的次數,以及每次文字輸入控制項中的值。 使用者是否輸入 77 並選取 [ 新增 ] 兩次,或是針對每個新增輸入 24 和 130? 總數達到154分後就分不清了。
  • 總數的變化可能來自不同的操作。 在此範例中, 新增清除 按鈕都會更新總計。 如果應用程式的行為不符合您的預期,哪個按鈕導致了問題?

使用全域變數

若要建立加法計算機,您需要一個變數來保存累計總和。 在 Power Apps 中使用的最簡單的變數是 全域變數

全域變數如何運作:

  • 使用 Set 函數設定全域變數的值。 Set( MyVar, 1 ) 將全域變數 MyVar 的值設為 1
  • 透過參照與 Set 函數一起使用的名稱來使用全域變數。 在此情況下, MyVar 會傳回 1
  • 全域變數可以保留任何值,包括字串、數字、記錄和資料表

使用全域變數重新構建計算機器:

  1. 新增名為 TextInput1 的文字輸入控制項,以及兩個名為 Button1 和 Button2 的按鈕。

  2. 按鈕 1Text 屬性設為 "Add",並將按鈕 2Text 屬性設為 "Clear"

  3. 若要在使用者選取 [ 新增 ] 按鈕時更新累計,請將其 OnSelect 屬性設定為下列公式:

    Set( RunningTotal, RunningTotal + TextInput1 )

    此公式會將 RunningTotal 建立為全域變數,因為運算子會保留 + 數字。 在應用程式中的任何位置參考 RunningTotal 。 當使用者開啟應用程式時, RunningTotal 的初始值為 空白

    當使用者第一次選取 [ 新增 ] 按鈕並 設定 執行時, RunningTotal 會設定為值 RunningTotal + TextInput1

    「新增」按鈕的 OnSelect 屬性設定為 Set 函式的螢幕擷圖。

  4. 若要在使用者選取 [清除] 按鈕時將執行總計設定為 0,請將其 OnSelect 屬性設定為下列公式:

    Set(RunningTotal, 0)

    「清除」按鈕的 OnSelect 屬性設定為 Set 函式的螢幕擷圖。

  5. 新增標籤控制項,並將其 Text 屬性設定為 RunningTotal

    此公式會自動重新計算並向使用者顯示 RunningTotal 的值,因為它會根據使用者選取的按鈕而變更。

    標籤的 Text 屬性設定為變數名稱的螢幕擷圖。

  6. 預覽應用程式。 在文字方塊中輸入數字,然後選取 [新增 ] 按鈕幾次。 準備就緒時,請使用 Esc 鍵返回製作體驗。

    文字輸入控制項輸入值與標籤顯示累積總和的螢幕擷圖。

  7. 若要顯示全域變數的值,請在應用程式製作功能表上選擇變數

    變數和集合功能表的螢幕擷取畫面。

  8. 若要顯示所有定義和使用變數的位置,請在全域變數底下選取變數。

    使用變數的位置清單的螢幕擷取畫面。

變數類型

Power Apps 有三種變數類型:

變數類型 Scope 描述: 函式建立
全域變數 應用程式 使用全域變數來保存數字、文字字串、布林值、記錄、表格或您在應用程式中任何位置參考的其他值。 Set
內容變數 畫面 使用內容變數將值傳遞至畫面,就像其他語言中的參數一樣。 您可從單一畫面引用它們。 UpdateContext
Navigate
集合 應用程式 使用集合來保存您在應用程式中任何位置參考的資料表。 您可以變更表格的內容,並將其儲存至本端裝置以供日後使用。 Collect
ClearCollect

建立和移除變數

當變數出現在 SetUpdateContextNavigateCollectClearCollect 函數中時,會隱含地建立變數。 若要宣告變數及其類型,只需將變數包含在應用程式中任何位置的任何這些函數中即可。 這些函數不會建立變數;它們只用值填充變數。 您絕不能像在另一個程式工具中那樣,明確地公布變數,而且所有輸入都是隱式的用法。

例如,您可能有一個按鈕控制項,其中有一個 OnSelect公式等於 Set( X, 1 )。 此公式會將 X 建立為數字類型的變數。 您在公式中使用 X 作為數字,而該變數在您開啟應用程式之後但在您選取按鈕之前的值為 空白 。 當您選取按鈕時,會為 X 指定值 1

如果您新增另一個按鈕,並將其 OnSelect 屬性設定為 Set( X, “Hello” ) ,則會發生錯誤,因為類型 (文字字串) 不符合前一個 Set (數字) 中的類型。 變數的所有隱式定義必須在類型上達成一致。 同樣,所有這些的發生都是因為您在公式中提到了 X ,而不是因為這些公式中的任何一個實際上都運行了。

移除隱含建立變數的所有 SetUpdateContextNavigateCollectClearCollect 函式,以移除變數。 沒有這些函式,變數就不存在。 同時移除變數的任何參考,因為它們會導致錯誤。

變數存留時間與初始值

應用程式執行時,變數會保留在記憶體中。 當應用程式關閉時,變數中的值會遺失。

使用 PatchCollect 函數將變數的內容儲存在資料來源中。 使用 SaveData 函式將值儲存在本機裝置上的集合中。

當使用者開啟應用程式時,所有變數都以 空白的初始值開頭。

讀取變數

使用變數的名稱來讀取其值。 例如,使用以下公式定義一個變數:

Set( Radius, 12 )

然後在任何使用數字的地方使用 Radius ,它會替換為 12

Pi() * Power( Radius, 2 )

如果給內容變數的名稱與全域變數或集合的名稱相同,則內容變數具有優先權。 您可以使用 消歧義運算子[@Radius]來參考全域變數或集合。

保留變數名

請勿使用下列任何變數名稱。 這些名稱是應用程式屬性,使用它們可能會導致變數名稱衝突,進而導致非預期的應用程式行為。

  • ActiveScreen
  • DesignHeight
  • DesignWidth
  • MinScreenHeight
  • MinScreenWidth
  • SizeBreakpoints
  • StudioVersion
  • TestCaseId
  • 正在測試
  • TestSuiteId
  • 主題

使用內容變數

讓我們看看如何使用上下文變數而不是全域變數來建立加法機。

內容變數的運作方式

  • 使用 UpdateContextNavigate 函式可隱式建立和設定內容變數。 當應用程式啟動時,每個內容變數的初始值都是 空白的。
  • 您可以使用記錄來更新內容變數。 在其他程式設計工具中,通常使用“=”進行賦值,例如“x = 1”。 在內容變數中,則改用 { x: 1 }。 當您使用內容變數時,請直接使用它的名稱,而不需要有記錄語法。
  • 當您使用 Navigate 函式來顯示畫面時,您也可以使用內容變數。 如果您將螢幕視為一種過程或子常式,則這種方法就像其他程式設計工具中的參數傳遞。
  • 除了 Navigate,內容變數僅限於單一畫面的內容,也就是他們取得其名稱之處。 您無法在此內容之外使用或設定它們。
  • 內容變數可以保留任何值,包括字串、數字、記錄和資料表

使用上下文變數重建加法機器:

  1. 新增名為 TextInput1 的文字輸入控制項,和名為 Button1Button2 的兩個按鈕。

  2. 按鈕 1Text 屬性設為 "Add",並將按鈕 2Text 屬性設為 "Clear"

  3. 若想在每次使用者選取新增按鈕時,更新計算加總,請將其 OnSelect 屬性設為以下公式︰

    UpdateContext( { RunningTotal: RunningTotal + TextInput1 } )

    此公式將 RunningTotal 建立為內容變數,該變數因運算子的運作而保持為一個數字。 您可以在此畫面中的任何位置參考 RunningTotal 。 當使用者開啟應用程式時, RunningTotal 的初始值為 空白

    當使用者第一次選取 [ 新增 ] 按鈕並執行 UpdateContext 時, RunningTotal 會設定為值 RunningTotal + TextInput1

    附有 updatecontext 的新增按鈕的 OnSelect 屬性。

  4. 若想在每次使用者選取清除 按鈕時,將計算加總設為 0 ,請將其 OnSelect 屬性設為以下公式︰

    UpdateContext({ RunningTotal: 0 })

    同樣地,將 UpdateContext 與公式 UpdateContext( { RunningTotal: 0 } ) 搭配使用。

    附有 updatecontext 的清除按鈕的 OnSelect 屬性。

  5. 新增標籤控制項,並將其 Text 屬性設定為 RunningTotal

    此公式會自動重新計算,並會在根據使用者選取的按鈕而進行變更時,為使用者顯示 RunningTotal 的值。

    標籤的 Text 屬性。

  6. 預覽應用程式。 在文字方塊中輸入數字,然後選取 [新增 ] 按鈕幾次。 當您準備好時,請使用 Esc 鍵返回撰寫體驗。

    文字輸入控制項會顯示值,而標籤會顯示總計。

  7. 在導覽至畫面時設定內容變數的值,以將「內容」或「參數」從一個畫面傳遞至另一個畫面。 若要示範此技術,請插入畫面、插入按鈕,並將其 OnSelect 屬性設定為此公式:

    Navigate(Screen1,None,{ RunningTotal:-1000 })

    按鈕的 OnSelect 屬性。

    選取此按鈕時按住 Alt 鍵以顯示 Screen1 ,並將環境定義變數 RunningTotal 設定為 -1000。

    畫面 1 已打開。

  8. 若要顯示內容變數的值,請執行下列其中一項動作:

    • 如果您使用的是 Power Apps Studio 的預覽版本,請在應用程式製作功能表中選取變數

    • 如果您使用的是 Power Apps Studio 的傳統版本,請選取 檔案 功能表,然後在左窗格中選取 變數

  9. 若要顯示定義和使用內容變數的位置,請在內容變數底下選取變數。

使用集合

讓我們使用集合來建立加法機。 由於集合可以輕鬆修改資料表,因此這個加總器會保留每次輸入數值的「紙帶」。

集合的運作方式

  • 使用 ClearCollect 函式來建立和設定集合。 您可以改用 Collect 函數,但它需要另一個變數,而不是取代舊變數。
  • 集合是一種資料來源和表格。 若要取得集合中的單一值,請使用 First 函數,並從產生的記錄中取得一個欄位。 如果您搭配 ClearCollect 使用單一值,則這是 [值] 欄位,如下列範例所示:
    First(VariableName).Value

使用集合建立加法機器:

  1. 新增名為 TextInput1文字輸入控制項,和名為 Button1Button2 的兩個按鈕。

  2. 按鈕 1Text 屬性設為 "Add",並將按鈕 2Text 屬性設為 "Clear"

  3. 若想在每次使用者選取新增按鈕時,更新計算加總,請將其 OnSelect 屬性設為以下公式︰

    Collect( PaperTape, TextInput1.Text )

    此公式的光是存在就會將紙帶建立為保留單一資料行資料表中文字字串的集合。 您可以在應用程式中的任何地方參考紙帶。 每當使用者打開此應用程式時,紙帶都是空白資料表。

    當此公式執行時,會將新值新增至集合結尾。 由於我們要新增單一值,Collect 會自動將它放在單一資料行資料表中,且該資料行的名稱為,這在稍後會使用到。

    附有 collect 的新增按鈕的 OnSelect 屬性。

  4. 若要在使用者選取清除按鈕時清除紙帶,請將其 OnSelect 屬性設為以下公式︰

    透明( 紙帶 )

    ![清除按鈕的 OnSelect 屬性。 若要執行新增機器,請選取 F5 以開啟預覽,在文字輸入控制項中輸入數字,然後選取按鈕。

    顯示文字輸入控制項輸入值與標籤顯示累積總和的螢幕擷圖。 label.](media/working-with-variables/papertape-3.png)

  5. 若要執行加法器,請按下 F5 鍵開啟「預覽」,並在文字輸入控制項中輸入數字,然後選取按鈕。

    文字輸入控制項會顯示值,而標籤會顯示總計。

  6. 若要返回預設工作區,請選取 [Esc]。

  7. 若要顯示紙帶,請插入 資料表 控制項,並設定其 **[Items](controls/properties1). 若要查看集合物件中的值,請執行下列其中一項動作:

    • 如果您使用的是 Power Apps Studio 的預覽版,請在應用程式製作功能表中選取變數,然後選取集合。

    • 如果您使用的是 Power Apps Studio 的傳統版本,請選取檔案功能表上的集合。 若要查看集合物件中的值,請執行下列其中一項動作:

    • 如果您使用的是 Power Apps Studio 預覽版本,請在應用程式製作功能表中選取變數,然後選取集合

    • 如果您使用的是 Power Apps Studio 傳統版本,請在檔案功能表中選取集合

  8. 若要儲存和取得您的集合,請再新增兩個按鈕控制項,並將其 [文字] 屬性設定為 [載入][儲存]。 將載入按鈕的 OnSelect 屬性設為此公式:

    Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )

    您需先清除集合,因 LoadData 會將儲存值附加至集合結尾。

    載入按鈕的 OnSelect 屬性。

  9. 儲存按鈕的 OnSelect 屬性設為以下公式:

    SaveData( PaperTape, “StoredPaperTape” )

    儲存按鈕的 OnSelect* 屬性。

  10. 選取 F5 再次預覽,在文字輸入控制項中輸入數字,然後選取按鈕。 選取儲存按鈕。 關閉並重新載入應用程式,然後選取載入按鈕以重新載入集合。

Note

SaveDataLoadData 函式可在 Power Apps Mobile 運作,但不能在 Power Apps Studio 或 Power Apps 的 Web 播放程式中運作。