今回作ったフローの概要
・画面フローで
・入力された値を使用して
・レコードを12個自動作成する
・その際、作成したいレコードは参照関係項目を持っているため、別オブジェクトからレコードを取得しながらレコードを12個作成する
・作成された12個のレコードを使用して、さらに別オブジェクトのレコードも自動作成する
・システム管理者への問い合わせ工数削減のため、各所にエラー画面を表示する
前提
オブジェクト構造
実現したいこと
まず、今回作成したフローの全体像はこちら。
今回のフローはかなり複雑なので、機能別に4つに分類してみました。
それぞれで何をしているかというと、
A: 子レコードが12個ある場合のみ、入力画面を表示する(該当しない場合はエラー画面を表示する)
↓
B: 入力内容の不備を確認する(不備がある場合はエラー画面を表示する)
↓
C: 画面入力された値を使用して、複数レコード(参照関係項目含む)を自動作成する(参照関係項目が存在しない場合はエラー画面を表示する)
↓
D: 作成された子レコードを使って、さらに別のレコードを新規作成する
フローの詳細
A:子レコードが12個ある場合のみ、入力画面を表示する(該当しない場合はエラー画面を表示する)
①対象の商談レコードを取得
② ①に紐づく売上管理レコードを全件取得
③ ②のレコード数を取得
④ レコード数が12かどうか判定
⑤(④で12でない場合)エラー画面を表示
B:入力内容の不備を確認する(不備がある場合はエラー画面を表示する)
⑥ 請求管理レコード作成用の入力画面を表示
⑦入力内容に不備がないか判定
⑧(不備がある場合)エラー画面を表示
C:画面入力された値を使用して、複数レコード(参照関係項目含む)を自動作成する(参照関係項目が存在しない場合はエラー画面を表示する)
⑨マスタレコードを取得
⑩請求管理用のレコード変数に割り当て
⑪請求管理用のレコードコレクション変数に割り当て
⑫月数を減算
⑬決定要素で分岐
⑭(月数が0以外の場合)NextMonthをテキスト型変数に割り当て
⑮翌月のマスターを取得
⑯マスターが取得できたか判定
⑰(マスターが取得できない場合)エラー画面を表示
⑱(月数が0の場合)請求管理レコードを一括作成
D:作成された子レコードを使って、さらに別のレコードを新規作成する
⑲請求管理用のレコードコレクション変数をループして、売上管理を取得
⑳連結レコード用のレコード変数に割り当て
㉑連結レコード用のレコードコレクション変数に割り当て
㉒連結レコードを一括作成
とても長いですが、必要な機能のみ参照いただければと思います。
①対象の商談レコードを取得
シンプルにrecordIdが一致するものを取得すればOK。
recordIdの作成方法はこちら
② ①に紐づく売上管理レコードを全件取得
③ ②のレコード数を取得
SalesRecordNumの中身はこんなかんじです。
④ レコード数が12かどうか判定
⑤(④で12でない場合)エラー画面を表示
⑥ 請求管理レコード作成用の入力画面を表示
入力させたい項目のデータ型に合った入力コンポーネントを
ひたすら配置していきます。
選択リスト項目を入力させる場合「*選択肢」のところで
選択リスト選択肢セットなるものを作成してから選択する必要があるので、要注意。
たとえば以下の「発行書類」の選択肢 {!DocumentType} は、
こんなかんじで作ってあります。
⑦入力内容に不備がないか判定
「送付方法」の値が
・メール→メアド必須
・郵送→住所必須
・両方→メアドと住所必須
としたいので、そのように条件設定をしています。
⑧(不備がある場合)エラー画面を表示
⑨マスタレコードを取得
このフローを更にややこしくしているのが、
請求管理が参照関係項目を持っていること。しかも必須項目。
参照しているのは「売上・管理スケジュールマスター」オブジェクト。(以降マスター)
聞いたところ紐づくマスターの条件は
マスターの「納品書受領予定日」=商談の「初回納品&請求月」
だそうなので、それを取得します。
取得したレコードは変数SendMonthに入れておきます。
ちなみにSendMonthの中身はこんなかんじです。
⑩請求管理用のレコード変数に割り当て
請求管理用のレコード変数に、必要な値を割り当てていきます。
⑨で取得したマスターもここで割り当てます。
変数New1Recordの中身はこんなかんじです。
⑪請求管理用のレコードコレクション変数に割り当て
⑩のレコード変数をレコードコレクション変数に割り当てます。
⑫月数を減算
レコードを12個作りたいので、1ずつ減算します。
MonthNumの中身はこんなかんじです。
⑬決定要素で分岐
MonthNumが0以外の場合はレコード作成を繰り返し、
0の場合は繰り返しを終わらせてレコードを一括作成させたいので
ここで分岐させます。
⑭(月数が0以外の場合)NextMonthをテキスト型変数に割り当て
請求管理レコードの作成を繰り返す中で「マスターレコードが存在しない場合」があり得ます。
その場合に入力者はシステム管理者にマスター作成依頼をしますが
いつ以降のマスターを作成してほしいのか明示することで、問い合わせ工数削減につながると考えました。
つまりマスターが存在しない場合にこのようなエラー画面を出すことで、
・入力者は最後の3行をコピペしてシステム管理者に送ればよく、
・システム管理者は「ああ、2023年1月31日以降のマスターを作ればいいのね!」と一瞬で理解できます。
上記画面の「2023/01/31」を表示するために、数式項目NextMonthをテキスト項目TextDateに割り当てます。
あらかじめ作っておいた数式項目NextMonthの中身はこんなかんじです。
マスターの「納品書受領予定日」(ScheduleMaster_LastDate__c)の翌月末を算出するようにしています。
数式はこちらを参照しました。
[数式 サンプル] 日付型項目から当月・翌月・〇か月後の末日を取得する数式
余談ですが、この割り当て要素を⑮の取得要素の次に置いていて、その結果TextDateがブランクで日付が表示されない…という現象に悩みまくりました。
出来心?で⑮の前に置いてみたら、なぜか値が取得できました。
理由は今でもよく分かりません…
⑮翌月のマスターを取得
先述の通り、NextMonthはマスターの「納品書受領予定日」(ScheduleMaster_LastDate__c)の翌月末を算出します。
その日付と合致するマスターを取得して、SendMonthに割り当てます。
⑯マスターが取得できたか判定
取得できた場合は⑩に分岐させて、請求管理レコードの作成を繰り返します。
⑰(マスターが取得できない場合)エラー画面を表示
ここで作成したエラー画面は、入力者には以下のように見えます。
⑱(月数が0の場合)請求管理レコードを一括作成
⑲請求管理用のレコードコレクション変数をループして、売上管理を取得
請求管理と紐づけたい売上管理を条件指定して、取得します。
⑳連結レコード用のレコード変数に割り当て
㉑連結レコード用のレコードコレクション変数に割り当て
㉒連結レコードを一括作成
ここまで読んだけど、よく分からない😭という方へ
ここまで読んでいただき、ありがとうございます。
最善を尽くして記事を書いていますが、
私の説明力不足ゆえに分かりづらい点があることをご容赦ください。
・ブログの内容について直接質問したい
・その他、Salesforceについて質問や相談をしたい
という方向けに、オンラインで直接質問していただけるサービスをご用意しています。
「こんなことを質問したいけど、対応可能?」というご相談はもちろん無料で受け付けております。上記リンクからお気軽にどうぞ💁♀️