こんにちは、ロジカル・アーツの星山です。
今回はWinter’23にて画面フローで使用可能になった、
DataTableコンポーネントで商談商品を複製するフローを紹介いたします。
フローの動作紹介(ゴールイメージの共有)
今回は「提供日」が8月の商談商品が、事前に4つ登録されている商談レコードを使用します。
①画面フローを「商談商品を複製」ボタンに埋め込み、押下することで起動させます。
②フローを起動させると、
今回紹介する機能であるDataTableを使用した商談商品の一覧が表示されます。
複製する商談商品にチェックを付けて「次へ」。(今回は全てにチェックを付けて進めます。)
③最後に何ヶ月分複製するか入力する画面になりますので、値を入力します。
④フローが実行され、②でチェックを付けた商談商品が③で入力した値の分だけ複製されます。
また「提供日」も9月・10月と複製基準とした商談商品から、
値が更新されていることも確認できます。
フローでの処理の紹介・解説
フローの動作確認ができたと思いますので、
次はフローの中身について紹介・解説をいたします。
全体図は以下のようになっています。
「商談を取得~同期中の判定」まで
〇「商談を取得」
フローを起動したレコードIDを受け取るための入力変数を定義します。
詳細は以下のリンクより確認をしていただければと思います。
https://help.salesforce.com/s/articleView?id=sf.omnichannel_create_recordid.htm&type=5
〇「商談に紐づく商談商品を取得」
「商談を取得」で定義した recordId を使用して、該当の商談商品を取得します。
今回は「提供日」項目も条件に含んでいますが、要件に合わせて適宜変更をしてください。
【ポイント!】
①商談商品の並び替えについて
取得する商談商品の並び替えをすることで、
この後DataTableで表示順を定義することができます。
(「提供日」順や「価格」順など)
②レコードデータの保存方法について
「項目を選択して後は Salesforce に任せる」を選択してください。
理由としては、「単価」(UnitPrice)と「合計金額」(TotalPrice)項目を両方取得した状態で、
商談商品レコードを作成しようとするとエラーが発生するためです。
そのため「単価」(UnitPrice)か「合計金額」(TotalPrice)のどちらかだけを
変数に保存するようにしましょう。
他の標準項目やカスタム項目は、
少し手間ではありますが必要なものは一緒に変数に保存してください。
〇「同期中の判定」
見積オブジェクトとの同期中はレコードがロックされるため、同期中はフローを終了させます。
商談の「見積ID」項目がNullかどうかで同期中の判定をします。
「複製する商談商品を選択~何ヶ月複製するか指定」まで
〇「複製する商談商品を選択」
ここで今回紹介するDataTableコンポーネントを使用します。
以下詳細になりますが、適宜要件に合わせて設定を行ってください。
・ソースコレクションは取得した商談商品を選択する
・列の設定では表示したい商談商品の情報を選択する
・商談商品は「商談に紐づく商談商品を取得」にて定義した並び順で表示される
〇「何ヶ月複製するか指定」
複製回数を決めるための数値コンポーネントを使用します。
API参照名や各種設定を適宜設定します。
「入力された月分作成されたかの判定~商談商品Listに追加」まで
〇「入力された月分作成されたかの判定」
数値型でデフォルト値が 0 で設定した変数(DeterminingNumber)を準備します。
DeterminingNumber と「何ヶ月複製するか指定」での入力値を比較し、
入力値よりもDeterminingNumberが小さい場合はレコード作成処理を行います。
〇「CountUp処理」
変数 DeterminingNumber に 1 を追加します。
ここでCountUpを行うことで、
「何ヶ月複製するか指定」で入力した値以上に商談商品が作成されません。
例)
変数/結果 | DeterminingNumber | 「何ヶ月複製するか指定」で入力した値 | 「入力された月分作成されたかの判定」 |
---|---|---|---|
1回目 | 0 (デフォルト値) | 1 | レコード作成 |
2回目 | 1 (CountUp後) | 1 | レコード作成終了 |
〇「商談商品の割り当てループ」
商談商品を作成するためにループを使用します。
DataTableコンポーネントを使用すると、
コレクション変数にDataTableで、
「選択された行」を使用することができるのでこちらを使用します。
〇「取得した商談商品を割り当て」
ループ内の「商談ID」項目に最初作成した recordId 変数を割り当て、
「提供日」項目に数式 AddMonth を作成し、割り当てます。
数式AddMonthの内容は以下の通りです。
ADDMONTHS ( {!OppLineItemsLoop.ServiceDate} , {!DeterminingNumber} )
「提供日」(ServiceDate)に DeterminingNumber の値を AddMonths 関数で足すことで、
「提供日」項目の月を変更する処理を行っています。
(CountUp処理をループの前に行っているので、複製回数分だけ月の変更処理は行われます。)
〇「商談商品Listに追加」
ループの項目を割り当てるために List変数を作成します。
この時「複数の値を許可」にチェックを入れます。
作成したList変数にループの項目を追加します。
【ポイント!】
要素での処理は以上ですが、
ループ後の接続先を「入力された月分作成されたかの判定」の決定要素に接続してください。
そうすることで指定した回数分、商談商品のListにレコードが追加されます。
(以下イメージ画像)
「Listに値があるかの判定~商談商品を作成」とボタン作成
〇「Listに値があるかの判定」
Listに値があるかの判定を行います。
値がない状態で作成処理を行うとエラーが発生してしまいます。
〇「商談商品を作成」
レコードの作成要素にて複数作成を選択し、レコードコレクションにListを選択します。
〇ボタン作成
フローの作成が終了したら、商談のオブジェクトマネージャーからボタンの作成を行います。
詳細は以下のリンクより確認をしていただければと思います。
https://help.salesforce.com/s/articleView?id=sf.flow_distribute_internal_action.htm&type=5
おわりに
今回、画面フローのDataTableコンポーネントを使用してフローを作成してみましたが、
フロー起動時のUIや選択した行をコレクションとして使用できる面で、
非常に使い勝手が良いと感じました。
Web上ではDataTableコンポーネントで、
選択した行を削除するフローについては見受けられましたが、
レコードを作成するフローは多くはなかったので、この記事が参考になれば幸いです。