MoreBeerMorePower

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

Power Automateでハマるポイント

はじめに

自分がハマってしまった、というか苦手意識を持っていたポイントです。

そんなの全然へっちゃらだぜーという場合には、大丈夫。何でもできます!

Power Automateで使う関数というのは実に多様です。

公式のレファレンスを読もうと思ってもすごく分量多いので、全部みるというのは現実的ではありません。

そもそも私が最初苦手意識をもったのはそこではなく、

オブジェクトと配列

これに尽きます。でもこれらを操れるとPower Automateでできることがすごく広がるし、パフォーマンスも改善できるようになります。

何が怖いのか

例えば変数を定義したとしましょう。こんな内容で

{
    "name":"Hiroaki",
    "age":34
}

いろんなブログや公式のドキュメントを見ると、この変数の中から"name"の値を取り出す方法についていろいろな書き方があることに気づきます。 例えば以下のようなパターン

variables('object').name
variables('object')?.name
variables('object').['name']
variables('object')?['name']

『なんなのかこれは。全くわからない。どれが正解??』と混乱に陥ります。また、配列が加わるとさらに厄介です。

["aaa" , "bbb" , "ccc"]

こんな配列を変数の初期化で無事作ったとします。ここから"bbb"だけ抜き出したい!という場合には以下のようなパターンです。

variables('Array')[1]
variables('Array')?[1]

私はこの 『indexは0番から始まる』 というのはそれほど抵抗なかったんですが、ここも1個のポイントですよね。 さて、ここまででいくつかのパターンがありました。

  1. "."ピリオドなのか"?"はてなマークなのか
  2. "[ ]"固いカッコでくくるのか、剥き身なのか
  3. "[ ]"の中で ' シングルクォーテーションで囲むのか囲まないのか

わからなさも3つ重なると、もう放棄になってしまいますね。。私はそうでした。。

で、3か月ほど集中してここら辺を触った結果、『正解』ということでもないのですがおすすめの記法をご紹介します。

※オブジェクトって何よ?とか配列って何よ?というのはまた今度別の記事で書こうと思います。

おすすめ記法

3つのわからなさを一回忘れていただいて、こうです!という記法です。

パターン1 : 配列の中のある要素の値を取りたい場合

variables('xxxx')?[数字]?['要素名']

これです。とにかく、何らかの変数または処理の結果に対して、

?[数字] で配列内の順番を指定して ?['要素名'] で要素を指定する

です。要素名を指定するときには必ずシングルクォーテーションが必要です。一方で配列内の順番を指定するときにはシングルクォーテーションはいれません。

というルールです!

パターン2 : 要素が配列になっている場合

{
    "cars" : ["Toyota", "Honda", "Suzuki"]
}

こういう時です。この時にはやはりさっきのルール通り、

variables('xxx')?['cars']?[1]

これで結果は"Honda"が返ってきます。 まずは要素"cars"を指定しています。これによって得られるのは ["Toyota", "Honda", "Suzuki"] こういう配列です。

この配列に対して、さらに ?[1] で番号を指定します。そうすると、(最初が0番なので)返ってくるのは”Honda"になるわけです。

いずれのパターンでも鉄則は、

?[数字] で配列内の順番を指定して ?['要素名'] で要素を指定する

です。

練習

{
    "age": 30,
    "cars": {
        "car1": "Ford",
        "car2": "BMW",
        "car3": "Fiat"
    },
    "name": "John"
}

このようなオブジェクトがあったときに、"BMW"という値はどういう式を書けばいいでしょうか?

 [
        {
            "age": 30,
            "cars": ["Ford","BMW","Fiat"],
            "name": "John"
        },
        {

            "age": 23,
            "cars": ["Suzuki","Matsuda"],
            "name": "Tom"
        },
        {

            "age": 54,
            "cars": ["VW","Ferrari"],
            "name": "Alex"
        }
    ]

このような配列があったときに、"Alex"を得るにはどういう式が必要でしょうか?

このような練習ができるアプリをGithubに置いておきました。 Power Appsで作ったものですが、活用いただければ幸いです。

github.com

補足

最後に補足です。

  1. "."ピリオドなのか"?"はてなマークなのか
  2. "[ ]"固いカッコでくくるのか、剥き身なのか
  3. "[ ]"の中で ' シングルクォーテーションで囲むのか囲まないのか

ここら辺の意味合いです。

1. "."ピリオドなのか"?"はてなマークなのか

この二つは意味合いが違います。正確には、?でやると、戻りがNull の場合でもアクションがエラーになりません。 一方で.nameのようにすると、例えばプロパティがなかったような場合に、アクションがエラーになります。

f:id:mofumofu_dance:20200326215727p:plain
Objectへのアクセス方法

2. "[ ]"カッコか剥き身か

基本は同じです。ただしスペースを含んでいるような要素名の場合や特殊な文字を含んでいる場合には ['xx x'] のように書くので、カッコをつけたほうが覚えやすいかと思います。 また、配列は[ ]を使うので、配列の番号と要素名で記法を変えたくないという観点から、[ ]がおすすめ

3. "[]"の中でシングルクォーテーション有無

すでに書いたとおり、配列の番号か要素名かの違いです。

ということで、砕いてみると、それほど厄介ではないですよね。覚えるルールはそれほど多くないです。あとは組み合わせられているだけです。 何かご不明点あればコメントかTwitterまでお願いします!