行動の日付に入力規則をつけるときは、「終日行動」に注意
標準項目の仕様により、数式を作るときに以外なところで苦労をしたりします。今回は行動の「終日行動」のチェックの有無まで考慮する必要がありました。
Admin
2020/08/20 15:47:10
やりたいこと
新規行動を作成時、打ち合わせなどの活動を行った日付から10日以上超過している場合、レコードを登録できないようにしたい。=行動の「開始」日が10日以上前の場合、レコードを保存できないようにしたい。
ActivityDate では入力規則が働かない?
日付 = ActivityDateと、数式作成時の項目の挿入では表示されますが、これで「開始」の時間を指定します。レコード作成日が「開始」項目の日時より10日を超えていたら登録できないよう、次のような数式を作成してみました。ActivityDate + 10 <= TODAY()
動作を確認すると、レコードは「開始」項目+10日を超えていても登録できてしまいました……
入力規則は動かなかったのです!
しかしながら、終日行動項目をTrueにする(チェックを入れる)と、入力規則が働きました。
ActivityDate をさらに調べてみたら
ヘルプを見直してみました。◇Salesforce >ヘルプ >活動の日付項目と作成日項目の違いは何ですか?
日付 (ActivityDate) - 次のいずれかを示します。さらに、
・ToDo の場合は、ToDo の期日を示します。
・行動の場合は、終日行動 が True に設定されている場合のみ、行動の開始日を示します。
加えて:
時刻 (ActivityDateTime) は行動のみの項目で、終日行動 が False に設定されている場合に時間が表示されます。
とも。
つまり、こういうことですか?
終日行動にチェックを入れる → ActivityDate に開始時刻が保存される
終日行動にチェックを入れない → ActivityDateTime に開始時刻が保存される
入力規則もこのルールのとおりに動いている(入力規則の計算時、参照する項目が異なる)のかもしれません。
解決方法:ActivityDateTimeとActivityDateTimeを併用する
というわけで、数式を次のように修正しました。
ActivityDate + 10 <= TODAY() || ActivityDateTime + 10 <= now()
※ActivityDateTimeは、項目の挿入で「時間」を選択します。
設定後、動作確認をすると、
「終日行動」にチェックを入れていなくても
「終日行動」にチェックを入れていても
入力規則が想定どおり動きました!
感想
普段は何気なく使っていた「終日行動」ですが、まさか入力規則を作るときに考慮しなければならない項目とは、思いもよりませんでした。時間の項目に対して設定をする際は、日付か時間か、その違いも意識したほうが良さそうですね。
コメント
2020-08-20 Thursday
興味を持ったのでデバッグログで調べてみました。
最終的に保存されるレコードでは以下の動作でした。
・終日行動にチェックを入れる→ ActivityDate に開始日時が保存され、ActivityDateTime は空白
・終日行動にチェックを入れない → ActivityDate に開始日時が保存され、ActivityDateTime に開始時刻が保存される
一方、入力規則判定時点では
・終日行動にチェックを入れる→ ActivityDate に開始日時が保存され、ActivityDateTime はnull
・終日行動にチェックを入れない → ActivityDate はnull、ActivityDateTime に開始時刻が保存される
となっているため、ActivityDateTime も考慮しないとすり抜けてしまうようです。