Power Automateの裏側をみてみよう！ (1/2)

# Power Automateの裏側といっても制作現場とかではない
釣りタイトルっぽいですが、Power Automateのトリガー・アクションの裏側を見るという内容なので、嘘ではないはずです。。

『裏側』と言っているのは、普段見ているトリガーやアクションの設定を表として、コード表示や設定表示を指しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/2fdeefbd-d3e8-6e70-fc62-fef7ca3a4c3a.png)

あまり詳細に解説されていないので、それぞれの意味や、どう使うのかを紹介したいと思います。
2回構成で、最初はPeak codeと、それに関連したトリガー・アクション入力・出力へのアクセス方法です。


# そもそもどうやってこれを表示するのか
とにもかくにも、まずは・・・をクリックしましょう。そうすると、各トリガー・アクションのメニューが表示されます。
よく使うのは、Renameとか、Comment、あるいはConfigure run after (前のステップがどういうステータスで終了したときに実行するか)だと思います。
今回はそれ以外の、SettingsとPeak codeを見ていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/7175603d-4302-d945-2688-622339694941.png)

# Peak code (コード表示)
コード表示といってもいわゆる"コード"ではなく、設定を記述するjsonです。
個別のjson (コード表示)は紹介できないので、活用方法など中心に。

アクションには必ずinput/inputsがあります。
ここに入力(表側)で指定された各種設定値や関数、また明示的に設定していないコネクションの情報や、データアクセスがある場合にはメソッドなどが記載されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/978d033b-fbd9-d79a-1305-ad228f7896c6.png)
もしこれらの情報に、外部のアクションからアクセスしたい場合には **[actions(*action name*)](https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference#actions)**を利用します。
または、トリガーにおけるinput/inputsにアクセスする場合には、**[trigger()](https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference#trigger)** を利用します。

## trigger/actionsの情報
実際に ```trigger()``` 出力してみると、以下のような構成になっています。(下図はSharePointのアイテム作成トリガー)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/62f43966-937f-5ef2-900a-dab395a5fbba.png)
とてもたくさん文字が並んでいて、身構えてしまうのですが、大きくは

- inputパート : Peak codeで表示した部分
- outputパート
    - outputの本体 (body)
    
のように分解されます。それぞれの情報には、```trigger()``` に続く情報として、

- inputパート  : ```trigger()?['inputs']```
- outputパート : ```trigger()?['outputs']```
    - outputの本体 (body) : ```trigger()?['outputs']?['body']```
    
という数式でデータ取得ができます。(より下部の構造には?['xxxx']でアクセス)

```actions()```も基本的には同じです。おおよそinput, output, bodyパートから構成されています。
情報にアクセスする場合には (アクションは1つではないので、名前の指定が必要で) ```actions('action name')?['inputs']``` などの数式を利用します。

## inputsの情報との対応
話を戻して、Peak codeで表示した内容にほかのアクションからアクセスする場合には、trigger()/actions() に続けて```?['inputs']```で情報取得してください。

個人的には、もっと有効なのは、数式の抽出です。
表側から数式のコピーをしようとすると、しばしばイライラすることがあります。コピーしたはずがされていないとか、フォーカスがはずれてしまうとか。
そういった場合には、Peak codeで対象の数式を表示して、コピーするのが有効です。特に複雑/長い数式です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/f062caa0-7f61-e96f-fd58-dc5c4869d92a.png)

## 補足
trigger()の下部にあるoutputs, bodyは、なにも長いパスを書かなくても、```triggerOutputs()``` / ```triggerBody()``` という関数が用意されています。ですので、```trigger() ``` から書き始めて取得するとすれば、それはinputsあるはstartTime,endTimeくらいかなと思います。

```
trigger()?['inputs']?...
trigger()?['startTime']
trigger()?['endTime']
```
基本的には```actions()```も同様ですが、outputs, bodyはもっと単純に ```outputs('action name')``` / ```body('action name')``` で情報を取得できます。ですので、実際にactions()を利用するとすれば、inputs, startTime, endTime, そして**trackedProperties**　くらいかと思います。
※口述するtrackedPropertiesではむしろ、この```actions()?['inputs']...``` を積極的に活用します。

# Peak codeまとめ
Peak codeはトリガー・アクションの入力部分をjson形式で表示してくれる機能です。表示のみで、これを直接編集することはできませんが、ほかの数式バーに転用する場合など、数式のコピーにはうってつけです。

```trigger()```, ```actions()``` の関数を利用すると、トリガーおよび各アクションに関連する基本的な情報にアクセスできます。

通常は```triggerBody()```や、```triggerOutputs()```あるいは```body(), outputs()```を利用するので、あまり直接記述することはありませんが、特にアクションの**tracked Properties**では```actions()?['inputs']```等を積極的に活用していきますので、これは次回紹介します。

次回：[Power Automateの裏側をみてみよう (2/2)](https://qiita.com/h-nagao/items/4f590a6e3b21ea669d0d)