行動の日付に入力規則をつけるときは、「終日行動」に注意

行動の日付に入力規則をつけるときは、「終日行動」に注意

標準項目の仕様により、数式を作るときに以外なところで苦労をしたりします。今回は行動の「終日行動」のチェックの有無まで考慮する必要がありました。
行動の日付に入力規則をつけるときは、「終日行動」に注意
4
行動の日付に入力規則をつけるときは、「終日行動」に注意
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は、項目の挿入で「時間」を選択します。




設定後、動作確認をすると、

「終日行動」にチェックを入れていなくても


「終日行動」にチェックを入れていても

入力規則が想定どおり動きました!


感想

普段は何気なく使っていた「終日行動」ですが、まさか入力規則を作るときに考慮しなければならない項目とは、思いもよりませんでした。
時間の項目に対して設定をする際は、日付か時間か、その違いも意識したほうが良さそうですね。

gilde tech(for Salesforce)」に入会しませんか?
登録すると、「gilde tech」に掲載されているSalesforceのノウハウを全部閲覧できるだけでなく、自分が知っている知識を発信し、他の会員と交流することもできます。
またSalesforceの知識習得に役立つイベント情報も得ることができます。
是非ここで得た知識を業務に活かしてください!
4
コメント
2020-08-20 Thursday
2
興味を持ったのでデバッグログで調べてみました。
最終的に保存されるレコードでは以下の動作でした。
・終日行動にチェックを入れる→ ActivityDate に開始日時が保存され、ActivityDateTime は空白
・終日行動にチェックを入れない → ActivityDate に開始日時が保存され、ActivityDateTime に開始時刻が保存される
一方、入力規則判定時点では
・終日行動にチェックを入れる→ ActivityDate に開始日時が保存され、ActivityDateTime はnull
・終日行動にチェックを入れない → ActivityDate はnull、ActivityDateTime に開始時刻が保存される
となっているため、ActivityDateTime も考慮しないとすり抜けてしまうようです。
2
ちなみに最終的に作成された入力規則の数式ですが、私であれば 
ActivityDate + 10 <= TODAY() || DATEVALUE(ActivityDateTime) + 10 <= TODAY()
とします。
理由は、"ActivityDateTime + 10 <= now()" だと「朝なら10日前の夜の行動が登録できてしまう」からです。
この辺りは要件や好みもあると思います。
2020-08-21 Friday
1
Mark Hammerさん コメントありがとうございます!勉強になります。
デバッグログでの確認まで至っていなかったので、再度検証しようと思います。