共用方式為


With 函數

適用於: 畫布應用程式 Copilot Studio 桌面流程 模型導向應用程式 Power Platform CLI Dataverse 函數 Power Pages

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

描述

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

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

用於 With 將複雜公式分割成較小的命名子公式,以改善複雜公式的可讀性。 這些具名值就像僅限於 的 With範圍的簡單局部變數一樣。 與 UpdateContext 函數 搭配使用的相同行內記錄語法可以與 With搭配使用。 使用 With 比上下文或全域變數更受青睞,因為它是獨立的、易於理解的,並且可以在任何聲明式公式上下文中使用。

With 來存取 PatchMatch 等函數所傳回的記錄欄位。 With 保留這些函數的值足夠長的時間,以便用於進一步的計算或動作。

如果 RecordWith 數是錯誤,則函數會傳回該錯誤,且不會評估 Formula

語法

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 利息計算器。

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 函式轉換成數字。

對應元件中記錄

參閱對應記錄