MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

新しくなった Power Apps トリガーの変更点について

f:id:mofumofu_dance:20210520222853p:plain

Power Apps から Power Automate のフローを実行する場合におなじみの「Power Apps トリガー」に新しくV2が登場しましたので、今回は現行トリガー (V1) から V2への変更点と注意事項をまとめます。

f:id:mofumofu_dance:20210520223342p:plain

変更点

主な変更点は Power Apps からデータを取得する際の変数の定義方法です。

V1トリガーでは、Power Apps からデータを取得するために、利用するアクションの入力で動的コンテンツから「Ask in PowerApps」を選択していました。

f:id:mofumofu_dance:20210520224313p:plain

これを行うことで Power Apps からデータを渡す入れ物ができて、アプリでフローの実行を書くときに入力を指定できるようになります。

f:id:mofumofu_dance:20210520224658p:plain

この場合、以下3点で標準で少し使いづらさがあります。(ほかにもあるでしょうが)

  1. 名前を指定できない (回避策はある)
  2. 入力が必須
  3. トリガーで必要な項目が分散する

1は アクションと項目名 によって決定される名前なので、例えば「JSONの解析」で「Ask in PowerApps」すると、もはやそれが何のデータを渡せばいいのかわからなくなります。

回避策としては変数の初期化アクションに適切な名前を付けて、そこで「Ask in PowerApps」することです。

2はフローのJSONをいじらないとオプションにできなそうです。実際のフロー内では必須でないものもとりあえず渡す必要があるので、「渡さなかったのか空で渡したのか」が判別しにくくなります。

3はフロー上のアクションでいきなり追加するわけですから、何を渡すのか、トリガーを見ただけでは不明瞭です。

新しいトリガーV2ではこれら3点が解消されます!

V2トリガーにおける受け渡しデータの定義

V2トリガーではフローボタンと同様に、トリガーで渡すデータを定義します。ここが唯一の変更点であり、重要なポイントです。

入力として必要なだけ、データ型と名前を指定して追加していき、それぞれのオプションを指定します。

f:id:mofumofu_dance:20210520233129p:plain

オプションには入力を必須としない (オプションにする) や、複数の選択肢から設定する といったものがあります。

この点もボタントリガーと同様です。

ここでつけた名前は後続アクションでも表示されます。これまでのように「アクション名_項目名」形式ではないので、何のためのどういう入力なのかをわかりやすくできます。

f:id:mofumofu_dance:20210520234631p:plain

Power Apps 側での挙動

Power Apps ではどのように表示されるか確認してみると、フロー側でドロップダウンから選択 にした項目は、アプリ側でも選択肢になっていることがわかります。

また、オプションの項目は (オプションが複数ある場合を想定して) レコード型で指定する必要があります。

f:id:mofumofu_dance:20210520235616p:plain

このように、これまでオプションにできなかった項目の定義や、受け渡す値の制限も今回のトリガー変更で実現できるようになりました。

おまけ: File指定時の渡し方

入力データには「File」という項目もあります。

f:id:mofumofu_dance:20210521000837p:plain

これをPower Apps側から指定するのが少し難解です・・。

フローを追加すると、Fileがレコード形式のデータなのはわかりますが、どう渡せばいいのかわからないんですね。結論から書くと

PA_V2.Run(
    {file:
        {
            contentBytes: ここにメディア型の値,
            name: ここにファイル名
        }
    }
)

上記のように、{file:{contentBytes:xxxx, name: yyyy}}のように入れ子になったレコード型を入れる必要があります。

f:id:mofumofu_dance:20210521001417p:plain

上図を見てもわかる通り、Power Apps 上でのメディア型 のデータを直接わたせるんです!!!

これは大きいですね。

これまで何らかのファイルをフローに渡すときには JSON(xxxxx, IncludeBinaryData) をして、data Uri に変換して文字列で受け渡していました。 フロー上ではdataUriToBinary()していたわけです。( このあたりは過去の投稿を参照してください )

qiita.com

これが不要になります。少なくとも よく使う SharePointへのファイル保存、メールへの添付などでは。

ただし・・・

注意事項

contentBytes で受け渡しているのは Base64 化されたメディアの情報で、メディアの種類は含まれていません。

このため、もしメディアの種類で条件判定する場合には、ファイル名の拡張子から判別する必要が出てきます。

ここが少し厄介ですね。 JSON -> dataUriToBinary の場合には、dataUriがメディアの種類を含んでいるので、ファイルの拡張子を見なくてよかったので。

ということで、アクションによっては注意が必要で、これまでの方法もケースによってはいまだに有効です。

おわり

今回は新しくなった Power Automate のPower Apps トリガー V2 について変更点を紹介しました。

特に入力をオプションにできる、特定の値に制限できる点や、ファイルをPower Apps内のメディアそのまま渡せる点は非常に強力なアップデートといえます。

これまでのフローをすぐに置き換える必要はありませんが、これから新規で作る場合には新しいトリガーで作っていったほうがよいでしょう。