LoginSignup
0
1

More than 1 year has passed since last update.

フローを使って開始日と終了日の期間に対して月に1つのレコードを作成する

Posted at

参考にした質問/回答

決定要素の抜け先(要素に接続)を決定要素に戻すだけです。

これはレイアウトを自由形式にしないとできないみたい

It is possible in flow , create a loop with iteration equals to the difference in Months of start and end date and perform create records as many times for it. Try this and let me know for any issue.

フローでは、開始日と終了日の月の差に等しい反復でループを作成し、その回数だけレコードの作成を実行できます。これを試して、問題があればお知らせください。

まずは、開始日と終了日の月の差を計算しましょう。
以下の数式リソースで可能です。

CountMonth

IF( YEAR( {!StartDate}) = YEAR({!EndDate}) , MONTH({!EndDate}) - MONTH( {!StartDate}),
IF( MONTH({!EndDate}) > MONTH( {!StartDate}) , ( YEAR({!EndDate}) - YEAR( {!StartDate}) )*12 +  (MONTH({!EndDate}) - MONTH( {!StartDate}) ) ,
( YEAR({!EndDate}) - YEAR( {!StartDate}) -1)*12  + 12 + MONTH({!EndDate}) - MONTH( {!StartDate})   ))

試しに変数counterを作って、最初にこの変数にCountMonthを割り当てます。
決定要素でカウンターがゼロかどうかを判断します。ゼロの場合は終了です。
image.png

ゼロでないときは処理を続けます。

カウンターと1つマイナスします。
またコレクション変数にここではカウンターの値を追加していますが、この案件ではレコード変数に必要な値をセットして、次の割り当て処理でレコードのコレクション変数にこのレコード変数を追加するといいと思います。

image.png

最終的にはこの処理を先ほどの判定処理でカウンターがゼロかを判定させます。

全体の流れは以下です。
image.png

採取結果は最終の間違えですね。この画面の変わりにレコードのコレクション変数を使ってレコードを新規作成すればいいと思います。
注意点としては今の処理は複数回流すと同じ月のレコードができてしまうので問題です。
Apexを使えばupsertできるので、親のIdと年月の格納するフィールドを作っておいて、このフィールドをキーにupsertすれば重複は防げますが... フローではupsertできないみたいです。
https://ideas.salesforce.com/s/idea/a0B8W00000Gdf3zUAB/upsert-option-in-flow-builder

これを使えばできるかも...
https://unofficialsf.com/create-or-update-with-the-new-upsertrecords-action/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1