共用方式為


With 函式

適用於: 畫布應用程式 桌面流程 模型導向應用程式 Power Platform CLI

針對單一 記錄 計算值並執行動作,包括具名值的內嵌記錄。

描述

With 函式評估單一記錄的公式。 該公式可計算值,與/或執行動作,例如修改資料或使用連線。 使用 ForAll 函式評估記錄資料表中所有記錄的公式。

目前處理中的記錄其各個欄位可供您在公式內使用。 使用 ThisRecord 運算子,,或只需依名稱參照欄位,就像任何其他的值一樣。 As 運算子也可以用來命名所處理的記錄,這有助於讓您的公式更易於了解並讓嵌套記錄可以存取。 如需更多資訊,請參閱下列範例以及 處理記錄範圍

使用 With 將複雜公式分成較小的具名子公式,以改善其可讀性。 這些具名值的行為類似將簡單的本機變數限制為 With 範圍。 與 UpdateContext 函式 搭配使用的相同內嵌記錄語法可以搭配 With 使用。 使用 With 勝於上下文或全域變數因其包含的易於理解,而且可用在任何宣告性公式上下文中。

使用 With 存取函數傳回的記錄欄位,例如 PatchMatchWith 保留這些函式值的時間長到可用於進一步的計算或動作。

WithRecord 引數有誤,函式會傳回該錯誤,而且 公式 將不會進行評估。

語法

With( 記錄公式 )

  • Record – 必要項目。 記錄必須進行動作。 如果是名稱值,請使用內嵌語法 { name1: value1, name2: value2, ... }
  • Formula – 必要項目。 評估 記錄 的公式。 公式可直接將任何 記錄 欄位參考為記錄範圍。

範例

簡單具名值

With( { radius: 10,
        height: 15 },
    Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)

此範例使用具名值記錄計算圓柱的體積。 With 用來擷取所有輸入值,讓您輕鬆將它們與計算本身分開。

形成巢式結構

使用 With 函式的利息計算機。

With( { AnnualRate: RateSlider/8/100,        // slider moves in 1/8th increments and convert to decimal
        Amount: AmountSlider*10000,          // slider moves by 10,000 increment
        Years: YearsSlider,                  // slider moves in single year increments, no adjustment required
        AnnualPayments: 12 },                // number of payments per year
      With( { r: AnnualRate/AnnualPayments,  // interest rate
              P: Amount,                     // loan amount
              n: Years*AnnualPayments },     // number of payments
            r*P / (1 - (1+r)^-n)             // standard interest calculation
      )
)

此範例會形成 With 巢式函式結構以建立 每月抵押款項 的雙層計算。 只要沒有衝突,內部 With 就能使用具名值的所有外部 With

既然滑塊控制項只能以 1 增量移動,滑塊會被相除或相乘以有效建立自訂增量。 以利率為例,RateSliderMax 屬性會設定為 48,除以 8 表示 1/8 百分比點增量,再除以 100 從百分比轉換為小數點,涵蓋範圍 0.125% 到 6%。 在貸款金額的案例中,AmountSliderMax 屬性設定為 60,並乘以 10000,涵蓋範圍 10,000 至 600,000。

With 會在滑塊移動時自動重新計算,並顯示新的貸款款項。 不會使用任何變數,也不需要使用滑塊控制項的 OnChange 屬性。

以下是建立此應用程式的詳細指示:

  1. 建立新的應用程式。
  2. 新增 Slider 控制項並將其命名為 RateSlider。 將其 Max 屬性設定為 48。
  3. Label 控制項 新增至滑塊控制項的左側。 將其 Text 屬性設為 "Interest Rate:"
  4. Label 控制項新增至滑塊控制項的右側。 將其 Text 屬性設定為公式 RateSlider/8 & " %"
  5. 新增另一個 Slider 控制項並將其命名為 AmountSlider。 將其 Max 屬性設定為 60。
  6. Label 控制項新增至此滑塊控制項的左側。 將其 Text 屬性設為 "Loan Amount:"
  7. Label 控制項新增至此滑塊控制項的右側。 將其 Text 屬性設定為公式 AmountSlider/8 * 10000
  8. 新增另一個 Slider 控制項並將其命名為 YearsSlider。 將其 Max 屬性設定為 40。
  9. Label 控制項新增至此滑塊控制項的左側。 將其 Text 屬性設為 "年數:"
  10. Label 控制項新增至此滑塊控制項的右側。 將其 Text 屬性設定為公式 YearSlider
  11. 新增 Label 控制項,並將其Text屬性設定為如上所示的公式。
  12. Label 控制項新增至最後標籤控制項的左側。 將其 Text 屬性設為 Recurring Monthly Payment:

從 Patch 傳回的主要金鑰

With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),
      ForAll( NewOrderDetails,
              Patch( OrderDetails, Defaults( OrderDetails ),
                     { Order: OrderID,          // from With's first argument, primary key of Patch result
                       Quantity: Quantity,      // from ForAll's NewOrderDetails table
                       ProductID: ProductID }   // from ForAll's NewOrderDetails table
              )
      )
)

本範例將記錄新增至 SQL Server 中的 Order 資料表。 然後,它會使用傳回的主鍵來顯示順序,並由 OrderID 欄位中的 Patch 函式傳回以建立 OrderDetails 資料表中的相關記錄。

使用正則運算式提取值

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

此範例會從 ISO 8601 期間值析取時數、分鐘數和秒數,然後使用這些子配對建立日期/時間值。

請注意,雖然子配對包含的數位仍在文字字串中。 執行數學運算之前,請使用 Value 函式轉換成數字。

對應元件中記錄

參閱對應記錄