MoreBeerMorePower

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

first関数で不要なApply to eachを回避する

SharePointリストのフィルターを使って結果が1件になるように絞ったのに、次のアクションでその結果を使おうとしたら突然 "Apply to each" のループ処理が・・・ということありませんか?

f:id:mofumofu_dance:20200907152824p:plain

Apply to eachはそのループ内で変数の初期化が出来なかったり、そもそも処理が見えづらくなったり、1件だけを処理したい場合には圧倒的に向いていないですよね。

そんなモヤモヤを緩和できる方法をご紹介です。

『first() を使いましょう』

以上です...

まずは 1件だけ取得できても結果は配列である点がポイントであり問題の原因です。

SharePointリストであれば「複数の項目を取得」アクションの結果ですが、これは例え結果が1件でも配列型のデータを返しています。

f:id:mofumofu_dance:20200907154240p:plain

これによって、1件だけ取得できた結果のタイトル列を使いたいだけなのに、配列だからApply to eachになります。

じゃあどうするか、が first関数の利用です。手順は以下の通り:

  1. まず「作成」アクションを追加
  2. Apply to eachの入力をコピー
  3. 「作成」アクションで式を追加し、 2.の結果をペースト (@{outputs('複数の項目の取得')?['body/value']})
  4. 先頭の@{ と 最後の } を削除 (outputs('複数の項目の取得')?['body/value'])
  5. first()で囲む (first( outputs('複数の項目の取得')?['body/value'] ))

f:id:mofumofu_dance:20200907154421p:plain

あとは「作成」アクションの結果を使って、outputs('作成')?['Title'] のように必要な列の値を使うだけです。

もしこれが難しいなーという場合には次に「JSONの解析」アクションを追加してみてください。

f:id:mofumofu_dance:20200907155603p:plain

これを行うと、SharePointのアクションの結果と同様に、動的な値で各列名を指定することができます。