次の方法で共有


With 関数

適用対象: キャンバス アプリ Copilot Studio デスクトップ フロー モデル駆動型アプリ Power Platform CLI Dataverse 関数 Power Pages

値を計算し、名前付きの値のインライン レコードを含む 1 つのレコード に対してアクションを実行します。

内容

With 関数は単一レコードの数式を評価します。 数式は、値を計算したり、操作 (データの変更や接続の操作など) を実行したりできます。 ForAll 関数 を使用して、レコードのテーブル内のすべてのレコードの数式を評価します。

現在処理されているレコードのフィールドは、この数式内で使用できます。 ThisRecord 演算子を使用するか、他の値を参照するのと同様に名前でフィールドを参照します。 As 演算子を使用して処理対象のレコードを指定することもできます。そうすると数式がわかりやすくなり、入れ子になったレコードにアクセスしやすくなります。 詳細については、以下の例と「レコードのスコープに関する作業」を参照してください。

Withを使用して、複雑な数式をより小さな名前付きサブ数式に分割して読みやすくします。 これらの名前付き値は、 Withのスコープに限定された単純なローカル変数のように動作します。 UpdateContext 関数で使用されるのと同じインライン レコード構文を、Withで使用できます。 Withは自己完結型であり、理解しやすく、宣言型の数式コンテキストで使用できるため、コンテキストまたはグローバル変数よりも優先されます。

Withを使用して、PatchMatch などの関数によって返されるレコードのフィールドにアクセスします。 With は、これらの関数の値を、それ以上の計算やアクションで使用できる長さまで保持します。

Withする Record 引数がエラーの場合、そのエラーは関数によって返され、数式は評価されません。

構文

With( Record, Formula )

  • 記録 – 必須。 実行されるレコード。 名前の値には、インライン構文 { name1: value1, name2: value2, ... } を使用します
  • – 必須。 レコードについて評価する数式。 この数式は、レコードの任意のフィールドをレコード スコープとして直接参照できます。

単純な名前付き値

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 関数を入れ子にして、毎月の 住宅ローン支払いの 2 層計算を作成します。 競合がない限り、外側の With の名前付き値はすべて内部 With内で使用できます。

スライダー コントロールは 1 ずつしか移動できないため、スライダーを分割または乗算して、効果的にカスタムの増分を作成します。 金利の場合、RateSliderMax プロパティを48 に設定され、1/8 パーセント ポイントの増分の場合は 8 で除算され、0.125% から 6% の範囲をカバーするパーセンテージから小数に変換するには 100 で除算されます。 ローン金額の場合、AmountSliderMax プロパティを 60 に設定され、10,000 倍されて、10,000 から 600,000 の範囲をカバーします。

スライダーが移動し、新しいローンの支払いが表示されると、 With が自動的に再計算されます。 変数は使用されず、スライダーコントロールの OnChange プロパティを使用する必要はありません。

このアプリを作成するための詳細な手順は次のとおりです。

  1. 新しいアプリを作成します。
  2. Slider コントロール を追加して RateSlider という名前を付けます。 Max プロパティを 48 に設定します。
  3. Label コントロール をスライダーコントロールの左側に追加します。 Text プロパティを"金利:" に設定します。
  4. Label コントロール をスライダー コントロールの右側に追加します。 Text プロパティを数式 RateSlider/8 & " %" に設定します。
  5. 別の Slider コントロールを追加して AmountSlider という名前を付けます。 Max プロパティを 60 に設定します。
  6. Label コントロールをこのスライダー コントロールの左側に追加します。 Text プロパティを"ローン金額:" に設定します。
  7. Label コントロールをこのスライダー コントロールの右側に追加します。 Text プロパティを数式 AmountSlider/8 * 10000 に設定します。
  8. 別の Slider コントロールを追加して YearsSlider という名前を付けます。 Max プロパティを 40 に設定します。
  9. Label コントロールをこのスライダー コントロールの左側に追加します。 Text プロパティを"年数:" に設定します。
  10. Label コントロールをこのスライダー コントロールの右側に追加します。 Text プロパティを数式 YearsSlider に設定します。
  11. Label コントロールを追加し、その Text プロパティを上記の数式に設定します。
  12. Label コントロールを最後の Label コントロールの左側に追加します。 Text プロパティを"毎月の定期支払い:"に設定します。

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 の注文 テーブルに追加します。 次に、Patch 関数によって OrderID フィールドに返された受注の主キーを使用して、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 期間値から時間、分、秒を抽出し、これらのサブマッチを使用して Date/Time 値を作成します。

サブマッチには数字が含まれていますが、テキスト文字列のままです。 Value 関数を使用して、数学的操作を実行する前に数値に変換します。

コンポーネント内のレコードをマップします

レコードのマップ を参照します。