PowerAppsモデル駆動型アプリ（Dynamics365）ワークフローのテクニック 関連するレコードの値を使用する

# Dynamics365のワークフロー・導入
## Dynamics365のワークフローとは
下図のようなことを自動でやってくれる機能です。
しかもGUIで構成できるのでノンプログラミングでいろいろできます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/7b117caa-55dc-75eb-0f0b-43802f4531ed.png)

ワークフローは複雑な動作も実行できるため便利です。
複雑な動作とは具体的に下記のような動作です。
- 条件分岐が設定できます。
- レコードを作成・更新する際フィールドに設定する値に動的な値を設定できます。

自分がQiitaでしつこく書いていますが、
**Dynamics365の機能ですがPowerAppsのモデル駆動型アプリでも使えます。**
（結局これを力説したい）

## PowerAppsのキャンバスアプリとの組み合わせ
個人的に推しまくっているモデル駆動型アプリですが、
Dynamics365をベースにしているためワークフローを使えます。
キャンバスアプリでは、個人的には複雑なロジックは組みにくいです（私は）。
複雑なロジックをワークフローでやることで、自由度が上がります。
今回記事にするのは、そのワークフローのテクニックの一つです。

## 関連するレコードの値とは
Dynamics365では「関連」と呼ばれるもので、
PowerApps(Common Data Service)でみると「リレーションシップ」と表現されています。
Dynamics365のデフォルトでいうと、「取引先企業」に対して複数の「取引先担当者」が関連する、
一対多の構造になっています。
**※「関連」と「リレーション」は同義ではない？？ここはまた詳しく調査します。**

関連する値を利用するとは、「取引先担当者」にレコードを作ったときに別の「エンティティB」にレコードを作るとき、
「取引先担当者」が所属する「取引先企業」に設定されているフィールドの値を、
「エンティティB」にセットできるということです。

（Dynamics365はバージョンを9.0以降にアップグレードすると、PowerAppsと同じくCDSとしてデータが下記のように参照できるようです）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/754e8afc-2d56-2b84-5cb1-051dde1911f3.png)


# 関連するレコードの値を使用するには
取引先担当者にレコードを作ったら、「お客様のプロファイル」という新しく作ったエンティティに
レコードを作成するワークフローを作ります。
このとき、取引先担当者が所属する（関連する）取引先企業の情報を、プロファイルに設定します。
## まずワークフローを作る画面へ遷移
設定画面にたどり着くまでがわかりにくい。。。

下記の歯車から詳細設定を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/6a2e0053-1931-e1bd-cf86-0ccbdc1711ab.png)
画面上の「設定」を押して、プロセスを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/63f8c98b-bcfe-ae62-dbff-7cd4f8a3e395.png)
左上の新規ボタンを押すと、新しいワークフローを作るための画面が開きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/06a467b6-037b-2450-c1ab-1fde84322090.png)

## ワークフローの基本設定
プロセス名をてきとうに、何をするワークフローかわかりやすいを設定します。
カテゴリはワークフローを設定します。
エンティティは、ワークフローを起動するトリガーとなるエンティティを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/417bd551-4ba6-a328-d77c-d4507cea71ca.png)

## ワークフローの動作設定
ワークフローが動作する内容を設定していきます。
今回の設定しようとしているワークフローだと、上部の設定画面はデフォルトのままでいいので、
このままワークフローの動作を作っていきます。

「ステップの追加」を押して「レコードの作成」を選択する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/647e8cf2-c33c-29a0-b21c-110feeafc30c.png)

説明分はてきとうに入れます。
作成：には作成する対象のエンティティを選択します。
その後プロパティの設定を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/034f9870-1673-3a6c-bcdb-7330a6057508.png)

Primary Nameには固定値で「自動作成のプロファイル」を設定します。
固定値の場合はフィールドの入力欄に直接文字を入力します。

次に、所属する企業情報１と２に取引先企業の値を設定します。
固定値に対して、これはワークフローのトリガーになるレコードによって値が変わるので動的な値の設定になります。
画面右側、フォームアシスタントで検索：とある欄で「会社名（取引先企業）」を設定します。

次の順番に操作します。
1. 検索：の２個目の欄で、対象のフィールドに設定したいフィールド名を選択します。
2. 追加を押します。
3. 対象のフィールドをクリックしてカーソルを置きます。
4. OKを押します。

動的な値は黄色く表示されます。
設定が済んだら画面左上の保存して閉じるを押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/0a44d732-4d22-a10b-ab7a-5df5b81c07c8.png)


設定が完了したので、アクティブ化を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/c3c946fe-6fe3-4593-da9b-6ad805e4decd.png)

## 動作を試す
下記のような適当な取引先担当者を作成します。
非同期でワークフローは動くため、レコードを作成してから動作の完了までに何十秒かかかります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/8d610d9c-70a9-e153-a0be-ef6d60a3e3e4.png)

作成されたデータは以下です。ちゃんと設定した値たちが入っていました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/67b48db2-356e-690c-0af8-1d3f2ef7a08d.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/a25767d3-85da-eb2d-beb4-380e2b9ab745.png)



ワークフローの動作履歴については、下図のようにワークフローの画面から確認できます。
設定を失敗してうまくいかない場合、エラー原因をここから確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/190486/f2274ba2-19fc-2a10-d0ad-b927bd90db13.png)

# 最後に
ワークフロー以外にも、業務ルールやら計算フィールドやらあるので、この辺を活用すると
キャンバスアプリとのコラボレーション効果が出てくるのではないかと思います。
この辺も紹介してもっとPowerAppsを流行らせていきたいです。
（これがみなさんには響くのかどうかわかりませんが・・・・）