フローを用いたToDo自動作成方法について_詳細編【Salesforce】
今回のブログでは、前回の「フローを用いたToDo自動作成方法について_概要編【Salesforce】」では説明できなかったフロー内の詳細について説明します。
各フローの詳細
フロー①:次回ToDo作成日更新フロー
契約開始(予定)日とTodo作成予定日に応じて分岐が生じます。
〇分岐用の数式を準備
・契約開始(予定)日のmm:数式名「ClosedDate」 DAY({!$Record.ClosedDate__c}) ・契約開始(予定)日の末日:数式名「ClosedDate_EndDay」 DAY( IF ( MONTH( {!$Record.ClosedDate__c}) = 12, DATE( YEAR( {!$Record.CloseDate}), 12, 31 ) , DATE( YEAR( {!$Record.ClosedDate__c}), MONTH( {!$Record.ClosedDate__c}) + 1, 1 ) - 1) ・Todo作成予定日の数値:数式名「ScheduledDate」 IF(TEXT({!$Record.TodoCreationScheduledDate__c}) = "1日",1, IF(TEXT({!$Record.TodoCreationScheduledDate__c}) = "5日",5, IF(TEXT({!$Record.TodoCreationScheduledDate__c}) = "10日",10, IF(TEXT({!$Record.TodoCreationScheduledDate__c}) = "15日",15, IF(TEXT({!$Record.TodoCreationScheduledDate__c}) = "20日",20, IF(TEXT({!$Record.TodoCreationScheduledDate__c}) = "25日",25, IF(TEXT({!$Record.TodoCreationScheduledDate__c}) = "末日",{!ClosedDate_EndDay}, 0) ))))))
■パターン1.契約開始(予定)日のmm<Todo作成予定日
例)契約開始(予定)日:2022/12/20、Todo作成予定日:末日、Todo作成タイミング:毎月
フロー内の数式で求める
①契約開始(予定)日の月初算出:2022/12/1
②「契約開始(予定)日の月初+Todo作成タイミング-1ヶ月」した日付け算出:2022/12/1
③Todo作成タイミング分マイナスする:2022/11/30←次回ToDo作成日
④算出した日付けをTodo作成予定日に合わせる:2022/12/31←ToDoの期限日
〇フロー内の数式詳細
①契約開始(予定)日の月初算出:数式名「ClosedDate_1」 DATE( YEAR({!$Record.ClosedDate__c}), MONTH({!$Record.ClosedDate__c}),1) ・契約開始(予定)日の月初+Todo作成タイミング:数式名「AddMonth」 CASE( TEXT( {!$Record.TodoCreationTiming__c} ), "毎月", ADDMONTHS( {!ClosedDate_1}, 1 ), "2ヶ月", ADDMONTHS( {!ClosedDate_1}, 2 ), "3ヶ月", ADDMONTHS( {!ClosedDate_1}, 3 ), "6ヶ月(半年)", ADDMONTHS( {!ClosedDate_1}, 6 ), "12ヶ月(1年)", ADDMONTHS( {!ClosedDate_1}, 12 ), ADDMONTHS( {!ClosedDate_1}, 0 )) ②契約開始(予定)日の月初+Todo作成タイミング-1ヶ月:数式名「pattern1」 ADDMONTHS({!AddMonth},-1) ③Todo作成タイミング分マイナスする:数式名「NextTodoCreationDate1」 CASE( TEXT( {!$Record.TodoCreationTiming__c} ), "毎月", ADDMONTHS( {!pattern1}, -1 ), "2ヶ月", ADDMONTHS( {!pattern1}, -2 ), "3ヶ月", ADDMONTHS( {!pattern1}, -3 ), "6ヶ月(半年)", ADDMONTHS( {!pattern1}, -6 ), "12ヶ月(1年)", ADDMONTHS( {!pattern1}, -12 ), ADDMONTHS( {!pattern1}, 0 )) ・末日を算出:数式名「EndDay_p1」 DAY( IF ( MONTH({!NextTodoCreationDate1}) = 12, DATE( YEAR({!NextTodoCreationDate1}), 12, 31 ) , DATE( YEAR({!NextTodoCreationDate1}), MONTH( {!NextTodoCreationDate1}) + 1, 1 ) - 1)) ④算出した日付けをTodo作成予定日に合わせる:数式名「AddDay1」 IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "1日",1, IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "5日",5, IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "10日",10, IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "15日",15, IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "20日",20, IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "25日",25, IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "末日",{!EndDay_p1} ,0))))))) ・月初に足し算しているため、1日マイナス:数式名「NextTodo1」 {!NextTodoCreationDate1}+({!AddDay1}-1)
「次回ToDo作成日の更新①」箇所で、数式名「NextTodo1」を次回ToDo作成日に設定して、レコードを更新
■パターン2.契約開始(予定)日のmm>Todo作成予定日
例)契約開始(予定)日:2022/12/20、Todo作成予定日:15日、Todo作成タイミング:毎月
フロー内の数式で求める
①契約開始(予定)日の月初算出:2022/12/1
②「契約開始(予定)日の月初+Todo作成タイミング」した日付け算出:2023/1/1
③Todo作成タイミング分マイナスする:2022/12/15←次回ToDo作成
④算出した日付けをTodo作成予定日に合わせる:2023/1/15←ToDoの期限日
〇フロー内の数式詳細
①はパターン1と同様の数式を使用
②契約開始(予定)日の月初+Todo作成タイミング:数式名「pattern2」
{!AddMonth}
③Todo作成タイミング分マイナスする:数式名「NextTodoCreationDate2」
CASE( TEXT( {!$Record.TodoCreationTiming__c} ),
"毎月", ADDMONTHS( {!pattern2}, -1 ),
"2ヶ月", ADDMONTHS( {!pattern2}, -2 ),
"3ヶ月", ADDMONTHS( {!pattern2}, -3 ),
"6ヶ月(半年)", ADDMONTHS( {!pattern2}, -6 ),
"12ヶ月(1年)", ADDMONTHS( {!pattern2}, -12 ),
ADDMONTHS( {!pattern2}, 0 ))
・末日を算出:数式名「EndDay_p2」
DAY(
IF ( MONTH({!NextTodoCreationDate2}) = 12,
DATE( YEAR({!NextTodoCreationDate1}), 12, 31 ) ,
DATE( YEAR({!NextTodoCreationDate2}), MONTH( {!NextTodoCreationDate2}) + 1, 1 ) - 1))
・算出した日付けをTodo作成予定日に合わせる:数式名「AddDay2」
IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "1日",1,
IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "5日",5,
IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "10日",10,
IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "15日",15,
IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "20日",20,
IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "25日",25,
IF(TEXT( {!$Record.TodoCreationScheduledDate__c} ) = "末日",{!EndDay_p2}
,0)))))))
・月初に足し算しているため、1日マイナス:数式名「NextTodo2」
{!NextTodoCreationDate2}+({!AddDay2}-1)
「次回ToDo作成日の更新②」箇所で、数式名「NextTodo2」を次回ToDo作成日に設定して、レコードを更新
フロー②:Todo一括自動作成フロー
フローの実行スケジュール設定で夜中に毎日このフローを実行させます。次回ToDo作成日=フロー実行日であればToDoが作成されます。
①以下の条件を満たす商談を全件取得する
・次回ToDo作成日<=フロー実行日
・契約終了日がnull または 契約終了日<フロー実行日
②対象の商談をループさせ、次回ToDo作成日を更新する
例)Todo作成予定日:末日、Todo作成タイミング:毎月、更新前_次回ToDo作成日:2022/11/30
フロー内の数式で求める
・「更新前_次回ToDo作成日+Todo作成タイミング」した日付けを算出:2022/12/31←次回ToDo作成日
〇フロー内の数式詳細
・更新前_次回ToDo作成日の月初:数式名「Date_1」 DATE( YEAR({!Loop_Update.NextTodoCreationDate__c}), MONTH({!Loop_Update.NextTodoCreationDate__c}),1) ・更新前_次回ToDo作成日の月初+Todo作成タイミングした日付けを算出:数式名「AddMonth」 CASE( TEXT( {!Loop_Update.TodoCreationTiming__c} ), "毎月", ADDMONTHS( {!Date_1}, 1 ), "2ヶ月", ADDMONTHS( {!Date_1}, 2 ), "3ヶ月", ADDMONTHS( {!Date_1}, 3 ), "6ヶ月(半年)", ADDMONTHS( {!Date_1}, 6 ), "12ヶ月(1年)", ADDMONTHS( {!Date_1}, 12 ), ADDMONTHS( {!Date_1}, 0 )) ・末日を算出:数式名「EndDay」 DAY( IF ( MONTH({!AddMonth}) = 12, DATE( YEAR( {!AddMonth}), 12, 31 ) , DATE( YEAR( {!AddMonth}), MONTH( {!AddMonth}) + 1, 1 ) - 1)) ・算出した日付けをTodo作成予定日に合わせる:数式名「AddDay」 IF(TEXT( {!Loop_Update.TodoCreationScheduledDate__c} ) = "1日",1, IF(TEXT( {!Loop_Update.TodoCreationScheduledDate__c} ) = "5日",5, IF(TEXT( {!Loop_Update.TodoCreationScheduledDate__c} ) = "10日",10, IF(TEXT( {!Loop_Update.TodoCreationScheduledDate__c} ) = "15日",15, IF(TEXT( {!Loop_Update.TodoCreationScheduledDate__c} ) = "20日",20, IF(TEXT( {!Loop_Update.TodoCreationScheduledDate__c} ) = "25日",25, IF(TEXT( {!Loop_Update.TodoCreationScheduledDate__c} ) = "末日",{!EndDay} ,0))))))) ・月初に足し算しているため、1日マイナス:数式名「NextDate」 {!AddMonth}+({!AddDay}-1)
「割り当て①日付け更新」箇所で、数式名「NextDate」を現在のループの次回ToDo作成日に設定
③対象の商談を一括更新する
④更新した商談をループさせ、商談に紐づけるToDoを作成する
期日:次回ToDo作成日
割り当て先:商談のTodo担当者
件名:商談のTodo件名
関連先:商談ID
以上がフロー内の詳細となります。数式がかなりごちゃごちゃとなってしまいましたが、ぜひ参考にして作成してみてください。