Salesforce ToDoアラームの自動更新

#**SFDCのToDoアラームを、プロセスビルダー＋フローで作成**

ワークフロールールを作成し、ワークフローアクションでToDoを実装すれば、
ToDoアラームの自動作成は簡単に実現できるんですが・・・。

<br>
**「レコードを更新しても、１度自動作成されたToDoのアラーム日は更新されない！！不便！！:frowning2:」**
<br>
ということで。
プロセスビルダーとフローを組み合わせれば、レコードを更新する度、ToDoも更新することができます。


#####【使用方法】レコードの、ある日付を基準に、n日前（またはn日後）にToDoアラームを自動作成する時に使用。その日付を更新すると、ToDoのアラーム日も自動更新される。
<br>
▼今回の例▼
 旅行アプリケーションにて、予約情報レコード、日時項目「搭乗時間（行き）」を登録したら、「搭乗時間（行き）」の3日前に、「旅行の3日前です」というアラームを表示するToDoを自動作成しておきたい。
そこで、もし「搭乗時間（行き）」が変更になった場合、ToDoのアラーム日も自動変更したい。

##### ①. 自動起動フローを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/a93b3301-a06b-0296-42f0-68aaced8386d.png)

##### ②. 基準となる日付、ToDoアラーム先を取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/cec8065e-3510-1406-a958-79f4c69a3070.png)


##### ③. ToDoの件名を格納する定数を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/7a7a35dd-fb4d-c0f5-d2a9-efa80ea77b44.png)

##### ④. ToDoが既に作成されているか検索
以下の条件で検索（AND）
・件名が一致
・ToDoを紐づけるレコード（WhatId）が当該レコードに一致
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/af655fae-573c-9466-d6e5-d2a1df90d971.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/46ded019-9ff1-e547-5981-1eb22e056d22.png)


##### ⑤. リソースに、アラーム日を作成
搭乗時間（行き）の3日前 　　※DateTime→Dateへの変換をしています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/ad5d9cbb-9f9c-1b53-fdbe-5f9c28877c38.png)

##### ⑥. 意思決定を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/0a6c9fbf-e1af-c0e5-6bc0-9e1230f9e05b.png)


##### ⑦. ToDoが既に作成されている場合、ToDoレコードの更新をする
ToDo項目値に以下を設定

| 項目             | 値                 | 
|:-----------------|:------------------|
| ActivityDate     |アラーム日 |
| OwnerId          |アラーム通知先 |
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/93e94121-6abc-ee3d-b6a0-6aff60514722.png)




##### ⑧. ToDoがまだ作成されていない（ToDoレコードの取得がnullで失敗した）場合、ToDoレコードの作成をする
ToDo項目値に以下を設定

| 項目             | 値                 | 
|:-----------------|:------------------|
| ActivityDate     |アラーム日 |
| IsReminderSet    |ポップアップを出す場合＝True |
| Priority         |優先度 |
| ReminderDateTime |アラーム日 |
| Status           |ToDo作成時の状況 |
| Subject          |件名|
| WhatId           |ToDoを作成するレコードのID|
| OwnerId          |アラーム通知先 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/d84ac8d2-2d95-1e93-ab94-9b772536d566.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/2de9dc35-949b-d5d2-6ec2-bf1761a5c45d.png)


##### ⑨. フローを繋ぎ、保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/4963fa2c-60a9-4d2d-e30d-b280d46abb31.png)


##### ⑩. プロセスビルダーを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/f6e89b75-a72e-76da-4a5f-8be98bd111de.png)

##### ⑪. オブジェクトを選択してプロセスを開始するタイミングを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/751e996b-0cae-9506-8cbb-b470225059d5.png)

##### ⑫. このアクショングループの条件を定義
条件：搭乗時間（行き）≠　null
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/df3dac12-088f-81ea-100d-d17930c12d45.png)

##### ⑬. アクションを選択して定義
フロー変数に、レコードIdを渡す設定を忘れずに。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/2a144842-0b71-f20b-517c-970de310afc0.png)


#### ▼▼実際に動きを確認▼▼
1. ToDoがまだ作成されていない場合<br>
1-1. {搭乗時間（行き）}を登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/fe5febba-4246-cf99-3147-83c6acb84d4e.png)
1-2. 期待通りの日にアラームが設定されます。
![tempsnip2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/f4fde574-23e2-c7ab-5a6a-07d88524f29a.png)

2. ToDoが既に作成されている場合（1-2の続きから）<br>
2-1. {搭乗時間（行き）}を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/5ff10bb9-1288-c34e-70a4-04ea860701ef.png)
2-2. きちんとアラーム日も更新されます。
![tempsnip3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539431/1861c634-ed00-bad2-9a34-0a2286d75d68.png)




#####【memo】

以上、レコードを更新する度、プロセスビルダーが起動し、フローでToDoの更新をしていく処理でした。
レコードの所有者が変わったときも、ToDoが前任に残ったままにならないのでとても便利だと思います。

ちょっと手間はかかっても、ユーザーが使いやすい機能にしたくてがんばりました(o^―^o)



<br>
以上

※途中、何度かエラー吐いて画像撮り直しているのでフローバージョンが前後しているところありますが気にしないでください。。。（笑）