フローを用いたToDo自動作成方法について_詳細編【Salesforce】

今回のブログでは、前回の「フローを用いたToDo自動作成方法について_概要編【Salesforce】」では説明できなかったフロー内の詳細について説明します。

各フローの詳細

フロー①:次回ToDo作成日更新フロー

契約開始(予定)日とTodo作成予定日に応じて分岐が生じます。

Todoflow7

〇分岐用の数式を準備

・契約開始(予定)日の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が作成されます。

Todoflow8

 

 

 

 

 

Todoflow9

①以下の条件を満たす商談を全件取得する
 ・次回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

 

以上がフロー内の詳細となります。数式がかなりごちゃごちゃとなってしまいましたが、ぜひ参考にして作成してみてください。