【Salesforce】動的フォームを試してみた


#どんな機能？
・レコードの状態によって項目の表示可否が制御できる機能
・現在はカスタムオブジェクトのみ対応

#設定してみる
①まず詳細コンポーネントをレコードページに配置します。

②その詳細コンポーネントをクリックすると、画面右側に以下のリンクが表示されるのでクリックします。![詳細コンポーネント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/2ad79e0f-c9aa-99f1-2ad3-ea1e31f7bbaf.png)


③動的フォームのチュートリアル画面がでます。
　「次へ」ボタンをクリックします。![動的フォームチュートリアル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/1019588d-205c-715d-16e9-71e962f49468.png)


④動的フォーム表示元となるページレイアウトを選択し、「完了」ボタンを押します。![動的フォームチュートリアル2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/cc1cb19f-d4a0-a359-e2e8-f0e464e04593.png)



⑤これで動的フォームが設定されました。
　設定されると同時にアコーディオンコンポーネントも設定されます。　![設定後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/e1d24f33-5fae-32a6-55d8-3ed278ecf2c7.png)

#試してみる
①動的フォームは項目の位置を自由に変更できます。
![項目移動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/21d95117-e056-5687-2c0f-427652bdc41a.png)

②項目の表示条件を設定してみます。
　設定方法は他のコンポーネントの表示条件設定と変わりません。
　項目をクリックすると画面右側に以下のキャプチャの通り、
　「検索条件の追加」リンクが表示されるのでクリックします。![表示条件設定1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/2e5f45be-f93a-da79-56ac-b1d654cc278f.png)

③例として、”参加人数”項目が10以上のとき、"レベル"項目を表示させてみたいと思います。
　条件を設定したら「完了」→レコードページを保存します。![表示条件設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/dcf566e7-cb47-4b10-0a2c-3e8f70572bde.png)

④参加人数が「0」のとき表示されていません。![条件外.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/f5bfb2c6-93ff-61b4-2c32-7152bb144248.png)


⑤参加人数を「10」とすると表示されました。![条件満たす.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/bc52b3e5-6215-7358-f36e-7cfe8dba9b9d.png)



#さらに試してみる
##セクション/項目を追加する
**レコードページ内でセクション/項目を追加できるようになります**

①レコードページ編集画面左側に「項目」というタブがあります。
　ここからセクションや項目をドラッグ&ドロップすることで追加することが可能です。![セクションと項目を追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/da6b9543-71ef-02d7-7f5e-a053ca587a84.png)


##プロファイルに割り当てられているレイアウトと別のレイアウトをソースにするとどうなるか
**上記の通り、動的フォームを生成する時にソースとなるレイアウトを選択します。
このとき、どのプロファイルにも割り当てられていないレイアウトを選択したらどうなるのでしょうか。**

①セッションという名のカスタムオブジェクトには、「セッションレイアウト」を「セッションレイアウト2」がある状態です。![レイアウト2種.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/97fe7eb0-d9f6-4999-2351-92d25c3d0405.png)


③ちなみに「セッションレイアウト2」の中身はこのような感じです。![セッション2レイアウトの中身.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/5b253514-be28-9a0d-b19c-dfd8c76433f1.png)

③現在「セッションレイアウト2」はどのプロファイルにも割り当てられてません。![レイアウト割り当て状況.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/bb2f13c4-644f-c7a5-b72c-67d3ee151feb.png)

④動的フォーム設定画面では問題なく選択できます。![セッションレイアウト2選択可能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/6a3a004a-a994-b7fa-d9a9-85b85d9d527a.png)

⑤レコードページ上も「セッションレイアウト2」レイアウトと同じ配置となります。![セッションレイアウト2で動的フォーム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/1d20472b-187b-fa18-58e1-8349a116f67b.png)

⑥システム管理者以外のユーザでログインしてみても同様です。![システム管理者以外で.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/e7ee9753-20cf-908e-19e3-9f427600d257.png)

⑦編集画面も「セッションレイアウト2」の内容となってしまいます。![編集画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/72ac3389-cb70-6698-ba10-07be617f9fb1.png)


##動的フォーム追加した後、ソース元のレイアウトを変更するとどうなるか
**動的フォームを設定した後、ソース元のレイアウトにセクションや項目を追加したらどうなるのでしょうか。**

①上記から引き続き、セクションレイアウト2で試してみます。
　現在はこのようなレイアウトです。　![セッションレイアウト2で動的フォーム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/1d20472b-187b-fa18-58e1-8349a116f67b.png)

②「セクションレイアウト2」を編集してみます。
　「テスト2」というセクションを追加し、"参加人数"項目と"取引先"項目を配置しました。![レイアウト2編集後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/5a3d3371-5c97-868d-4ee8-57e52765f2ac.png)

③どうやら反映されないようです。![レイアウト2編集後レコードページ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/eb07e27d-3175-e6c1-bb9b-3c381651e7ad.png)

#動的フォーム上必須に設定した項目が非表示の場合、必須チェックエラーが発生するか【2020/11/18追記】
①"参加人数"項目を動的フォーム上必須にし、検索条件で"レベル"項目が「中級」のときに表示させるとします。
![必須を非表示に.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/1e02c26f-3e62-bb3a-8d0d-4ab24d3a2a7b.png)

②レベル「初級」だと”参加人数”項目は表示されません。
　この状態で適当に保存すると･･･![非表示ではエラーとなるか.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/43e2c1fe-9b40-6e86-c40e-8332ff75c14f.png)

③エラーは発生しませんでした。![非表示ではエラーとなるか_エラーなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/3c012281-f120-0711-fce3-0c59310481d3.png)


④レベルを「中級」にした途端に以下のメッセージが表示されました。![中級に.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/9f4df753-9ed3-bd24-d819-cc1f17a39f03.png)


⑤レベル「中級」の状態で”参加人数”が未入力のまま保存するとエラーが発生します。![中級で未入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218192/c8c6f595-8075-d344-ebd2-9488ec2db207.png)


#まとめ
+ 条件をつけて項目出し分け出来るのは便利
+ ページレイアウトとして割り当てらてないレイアウトでもソースとして選択できる
+ 動的フォームとして設定すると、ソース元のレイアウトとは独立したレイアウトとなる
+ 作成/編集画面のレイアウトも動的フォームのレイアウトと同様となる
+ レコードタイプと動的フォームを合わせて使いたい場合は、レイアウトの割り当てではなくレコードページ側で割り当てを行うことが必要