デスクトップ フローの Power Fx
Power Fx は、Microsoft Power Platform 全体でロジックを記述するためのロー コード言語です。 汎用、厳密な型指定、宣言型、そして関数型のプログラミング言語です。
Power Fx は、人が使いやすいテキストで表現されています。 作成者が Excel のような数式バーまたは Visual Studio Code のテキスト ウィンドウで直接操作できるローコード言語です。 ローコードの「ロー」は、言語の簡潔でシンプルな性質によるものであり、一般的なプログラミング タスクを作成者と開発者の両方にとって容易にします。
Power Fx プログラミング知識のないノーコード作成者からプロの開発者向けのプロコードまで、あらゆる開発を可能にします。 これにより、多様なチームが協力し、時間と労力を節約できるようになります。
デスクトップで Power Fx を使う
デスクトップ フローで Power Fx を式言語として使用するには、デスクトップ フローを作成し、デスクトップのコンソール用のフロー Power Automate を作成するときにそれぞれのトグル ボタンを有効にする必要があります。
Power Fx 有効化されたフローの違い
注意
各 Power Fx 式は、"=" (等号) で開始する必要があります。
Power Fx が無効化されたフローから有効化されたフローへ移行する場合、いくつかの違いに気付くかもしれません。 新しいデスクトップ フローを作成する際のエクスペリエンスを効率化するには、次の重要な概念に留意してください。
Excel の数式と同じように、式言語として Power Fx を使用するデスクトップ フローは、0 (ゼロ) ベースのインデックスではなく、1 (一) ベースの配列インデックスを採用します。 たとえば、式
=Index(numbersArray, 1)
はnumbersArray
アレイの最初の要素を返します。Power Fx を使用したデスクトップ フローでは、変数名の大文字と小文字が区別されます。 たとえば、NewVar は newVar とは異なります。
デスクトップ フローで Power Fx が有効になっている場合、使用前に変数の初期化が必要です。 初期化されていない変数を Power Fx 式で使用しようとすると、エラーが発生します。
If アクションは、単一の条件式を受け入れます。 以前は、複数のオペランドを受け入れていました。
Power Fx が有効になっていないフローでは、不明なオブジェクト タイプを示す "一般値" という用語が使用されますが、Power Fx は厳密な型システムを中心に展開されます。 Power Fx が有効なフローでは、動的変数 (実行時に型または値を変更できる変数) と 動的値 (実行時に型またはスキーマが決定される値) が区別されます。 この違いをより深く理解するために、次の例を参考にしてください。
dynamicVariable
は実行時にフォームがNumeric
からBoolean
値に変更されますが、dynamicValue
は実行時に型指定されていないオブジェクトであると判断され、実際のフォームはCustom object
になります。動的な値として扱われる値は次のとおりです。
- データ テーブル
- 不明なスキーマを持つカスタム オブジェクト
- 動的アクション出力 (たとえば、".NET スクリプトの実行" アクション)
- "デスクトップ フロー アクション実行" アクションからの出力
- 定義済みのスキーマのないアクション出力 (例: "Excel ワークシートから読み取る" や "新しいリストを作成する")
動的な値は、Power Fx 型指定されていないオブジェクト と同様に扱われ、通常は明示的な関数を使用して必要な型に変換する必要があります (例 :
Bool()
やText()
)。 エクスペリエンスを効率化するために、動的な値をアクション入力として、または Power Fx 式の一部として使用する場合は、暗黙的な変換が行われます。 作成中に検証は行われませんが、実行時の実際の値によっては、変換が失敗すると実行時エラーが発生します。動的変数が使用されるたびに、"遅延型が指定されました" という警告メッセージが表示されます。 これらの警告は Power Fxの強い型指定されたスキーマ (厳密に定義された型) に対する厳密な要件によって発生します。 動的変数は、リスト、テーブル、またはレコード値のプロパティとして使用することはできません。
Power Fx 式の実行 アクションと Collect、Clear、ClearCollect および Patch 関数を使用した式と組み合わせることで、アクション 項目をリストに追加する および 行をデータ テーブルに挿入する の動作をエミュレートできます。これらのアクションは以前は、Power Fx 対応のデスクトップ フローでは使用できませんでした。 両方のアクションが引き続き使用可能ですが、厳密に型指定されたリスト (ファイル リストなど) を操作する場合は、Collect 関数を使用します。 この関数は、リストが型指定されたままであることを保証します。なぜなら、リストに項目を追加アクションを使用するとリストが型指定されていないオブジェクトに変換されるからです。
使用例
- 入力フィールドの
=1
は数値 1 に相当します。 = variableName
は variableName 変数の値と等しくなります。- 式
= {'prop':"value"}
は、カスタム オブジェクトと同等のレコード値を返します。 = Table({'prop':"value"})
式は、Power Fx カスタム オブジェクトのリストに相当するテーブルを返します。- 式 -
= [1,2,3,4]
は数値のリストを作成します - リストから値にアクセスするには、関数
Index(var, number)
を使用します。ここで、var はリストの名前、number は取得する値の位置です。 - 列インデックスを使用してデータ テーブル セルにアクセスするには、
Index()
関数を使用します。=Index(Index(DataTableVar, 1), 2)
列 2 内の行 1 のセルから値を取得します。=Index(DataRowVar, 1)
1 行目のセルから値を取得します。 - 入力または UI/Web 要素セレクターに補間値を含めるには、次の構文を使用します :
Text before ${variable / expression} text after
- 例:
The total number is ${Sum(10, 20)}
- 例:
注意
Power Fx 式内または UI/Web 要素セレクターの構文でドル記号 ($
) に続いて左中括弧記号 ({
) を使用し、デスクトップ用 Power Automate で文字列補間構文として処理されないようにするには、次の構文に従ってください: $${
(最初のドル記号はエスケープ文字として機能します)
使用できる Power Fx 関数
デスクトップ フロー用 Power Automate で使用可能なすべての関数の完全なリストについては、数式リファレンス - デスクトップ フロー にアクセスしてください。
既知の問題と制限事項
- 自動化アクションの標準ライブラリからの次のアクションは現在サポートされていません:
- Switch
- Case
- 既定のケース
- IntelliSense を通じて提供される一部の Power Fx 機能は、現在デスクトップ フローではサポートされていません。 これらの関数を使用すると、次のデザイン時エラーが表示されます: "パラメーター 'Value': PowerFx タイプ 'OptionSetValueType' はサポートされていません。"
新機能
このセクションでは、各アップデートで変更された内容をリストします。
2.48
2024 年 9 月リリース:
- 変数 カテゴリから、以前はサポートされていなかったリストとデータ テーブルの操作アクションを再度有効にします。
- カスタム オブジェクト、リスト、データ テーブルに対するネイティブの 型指定されていないオブジェクト サポート。 型指定されていないオブジェクトの詳細については、型指定されていないオブジェクトのデータ型 を参照してください。
- この変更は、設計時の警告と遅延型の使用を減らすために導入されました。 型指定されていないオブジェクトは、設計時にスキーマが不明な型を処理する方法です。
- 以前のバージョンでは、動的変数 (実行時に型または値を変更できる変数) と 動的値 (実行時に型またはスキーマが決定される値) は同じ方法で処理されていました。 動的値または動的変数のいずれかが Power Fx 式 Power Fx で使用された場合、"遅延型が指定されました" という警告がトリガーされました。これらの警告は、厳密な型スキーマ (厳密に定義された型) を適用するために発生しました。 このバージョンから、これら 2 つのケースを区別するようになりました。 動的変数は引き続き "遅延型" 警告を生成しますが、動的値は型指定されていないオブジェクトとして扱われるようになりました。
- すべてのデータ テーブル変数は型指定されていませんが、JSON をカスタム オブジェクトに変換する アクションから生成されるカスタム オブジェクトは型指定されていません。 リストは、 変数 カテゴリからのデスクトップ アクション用 Power Automate で操作した後、型指定なしになります。
- 以前は、Excel からの読み取り、CSV からの読み取り、Web からのデータの抽出、ウィンドウからのデータの抽出、SQL ステートメントの実行、 JSON をカスタム オブジェクトに変換 など、標準のアクション ライブラリからの特定の自動化アクションによって、動的変数が生成され、"遅延型" の警告が表示されていました。 代わりに、型指定のないデータ テーブルまたは型指定のないカスタム オブジェクト変数が生成されるようになりました。
- 設定 Power Fx 関数は現在有効になっていますが、まだ完全にはサポートされていません。 変数の値を直接変更するために使用することはできませんが、上記の構造と組み合わせて使用することで、カスタム オブジェクトのプロパティや特定のインデックス内のリストの値を更新することもできます (たとえば、
=Set(Index(Index(DataTable, 1), 1), 42)
または=Set(customObject.property, 17)
)。 - Power Fx が有効なフロー内のオブジェクトのネストされたリスト プロパティにアクセスする際の問題を修正しました。
注意
デスクトップ用 Power Automate のバージョン 2.48 では、以前のバージョンで作成された Power Fx 対応デスクトップ フローの実行に影響を及ぼす可能性のある、Power Fx 対応デスクトップ フローの更新が行われました。 既存の Power Fx フローでこのバージョンを徹底的にテストすることをお勧めします。
- 子フローの出力: Power Fx が有効なデスクトップ フローで子フローからの出力変数を使用する場合は注意してください。 これには、リスト、カスタム オブジェクト、データ テーブルの各タイプの出力変数が含まれます。
- 単一値列配列:
=[1, 2, 3]
のような式を使用して作成された配列は、Power Fx 有効なフロー内で単一値列配列になり、その項目は単一のプロパティ:{Value: 1}
を持つオブジェクトになります。 最初の配列をアクションで変更した後、このアイテムのValue
プロパティにアクセスしようとすると、作成エラーが発生します。 - Power Fx 関数の使い方: 特定の Power Fx 関数(
IsEmpty()
など)では、以前のバージョンでは動的変数を引数として受け入れ、検証エラーが発生しませんでした。 2.48 バージョンでは、動的変数として処理される変数を使用すると検証エラーが発生し、既存のフローの実行に失敗します。 この問題を解決するには、動的な (型指定されていない) 値に適切なキャストを適用します。 キャスト関数の詳細については、型指定されていないオブジェクト データ型 を参照してください。 フロー編集時にこの問題が発生し、"無効な引数タイプ (UntypedObject)" のようなエラー メッセージが表示される場合があります。 代わりにテーブル値が必要です。" この問題を解決するには、エラー メッセージに追従する、式を有効な式に変換します。- 動的変数と型付き変数の組み合わせを使用すると検証エラーが発生する可能性がある関数の他の例としては、
Sum()
、Filter()
、Concatenate()
、in
などの演算子 (例:"string" in DynamicValueObject
) などがあります。
- 動的変数と型付き変数の組み合わせを使用すると検証エラーが発生する可能性がある関数の他の例としては、
- 変数の比較: 前述の問題と同様に、動的な値を含む式に比較演算子 (
=
、<>
、>
、<
など) を適用すると、型の非互換性が生じる可能性があります。 動的な値を比較する前に、注意して適切なキャストを適用してください。
2.43
2024 年 4 月のリリース:
- 大文字と小文字の区別。 たとえば、NewVar は newVar とは異なる変数です。
- Power Fx 式を実行 アクションは、アクションの 変数 グループで使用できます。 [Power Fx 式を実行] を使用すると、データ ソース上で式を直接実行できます。
- Collect、Clear、ClearCollect Power Fx 関数はデスクトップ フローでサポートされています。
- Patch Power Fx 関数はデスクトップ フローでサポートされています。
- 変数と Power Fx 式は、UI 要素またはWeb セレクター構文で使用できます。
- 補間値を UI/Web 要素セレクターの構文に含めることができるようになりました。 補間された文字列の場合は、次の構文を使用できます: ${ Power Fx expression }。
重要
デスクトップ用 Power Automate のバージョン 2.43 では、以前のバージョンで作成された Power Fx 対応デスクトップ フローの実行に影響を及ぼす可能性のある、Power Fx 対応デスクトップ フローの更新が行われました。 具体的には次のとおりです。
- 大文字と小文字を区別する変数名: デスクトップ用 Power Automate バージョン 2.43 以降 で作成された Power Fx 対応デスクトップ フロー内の変数名では、大文字と小文字が区別されます。 デスクトップ用 Power Automate バージョン 2.42 以前 で作成された Power Fx デスクトップ フローでは、大文字と小文字を区別しない変数名が使用できました。 たとえば、NewVar と newVAR は同じ変数を参照します。 デスクトップ用 Power Automate バージョン 2.42 以前 で作成された Power Fx 対応デスクトップ フローの場合は、生成された変数が想定どおりであることをレビューして確認してください。
2.42
2024 年 3 月リリース:
- IntelliSense 機能が Power Fx 対応のデスクトップ フローで利用できるようになりました。
- 構文の色付け
- 入力中のオートコンプリート機能とリアルタイムの提案
- Power Fx 関数の署名ヘルパー
注意
IntelliSense 機能は式に使用できます。 式を入力するには、各入力の先頭に 等号 (= 式 ) か、文字列補間表記 (${ 式 } ) を使用します。
- 関数ピッカー
- それぞれの入力を操作するときに、スキットルのfxボタンを使用して関数ピッカーにアクセスできます。 デスクトップ フローで現在サポートされているすべての Power Fx 機能がそこで利用可能です。
2.41
2024 年 2 月リリース:
- 今後、等号 (=) で始まらない入力はテキスト タイプの値とみなされます。 数値およびブール値の入力は常に等号で始まる必要があります。
- 入力で補間された文字列がサポートされるようになりました。 入力に補間値を含めるには、次の構文を使用します:
Text before ${variable/ expression} text after
。- 例:
The total number is ${Sum(10, 20)}
- 例:
注意
補間された文字列構文を使用するには、入力の先頭にある等号 (=) を省略します。
2.39
2023 年 12 月リリース:
- 指定された入力が等号で始まらない場合は、次のルールが適用されます。
- スペースのない数値は数値として解釈されます。
- True/ False 入力として、大文字と小文字に関係なく、スペースがなければブール値として解釈されます。
- 他のすべての入力はテキスト型の値とみなされます。