+ Start a Discussion
SWATANABE0930SWATANABE0930 

カレンダーでドラッグ&ドロップした「行動」の「開始」が、EventのBefore Updateトリガーで取得できません

はじめまして。渡邉と申します。

以下のように、「行動(Event)」に対して、Before Update時に「開始(StartDateTime)」を参照するトリガーを作成しています。

// サンプル : 「開始(StartDateTime)」を取得して、「説明(Description)」に設定するトリガー
trigger EventTrigger on Event (before update) {
    if (Trigger.isBefore && Trigger.isUpdate) {
        for (Event ev : Trigger.new) {
            ev.Description = '' + ev.StartDateTime; 
        }
    }
}

Trigger.new から取得した「行動」レコードのStartDateについてですが、
「行動」の編集画面で「保存」した場合には、更新後の値が取得できます。
しかし、カレンダービューで「行動」をドラッグ&ドロップした場合は、
更新後の値ではなく、更新前の値になってしまいます。

Salesforce側のバグではないかと思うのですが、何かご存知の方がいらっしゃいましたら、共有いただけないでしょうか。
また、回避方法としては、Before Update からAfter Update に変更することが思いつくのですが、他に方法がありましたらご教授いただけないでしょうか。

以上、よろしくお願い申し上げます。
Marty C.Marty C.

 渡邉さん、こんにちは。常ともうします。

渡邉さんが述べたバグに困ってしまったことがあります。一番イライラさせるのはApex テスト[1]実行でバグを曝せない事だと思います。はっきりバグを見える[2]のに…

渡邉さんはもうセールスフォースサポートにケースを作成しましたか。以下は私のバグ再発現過程です。

  1. 行動オブジェクトにActivity Date Proxy (ActivityDateProxy__c) 日付/時間項目を作成して、
  2. 下記のEventActivityDateProxy トリガを作成して、
  3. ドラッグアンドドロップによるスケジュールで新規行動を作成して、
  4. その行動を更新して、開始日時を変更します。後でその行動を開けて、違うActivity Date Proxyを見える。
     
trigger EventActivityDateProxy on Event (before insert, before update) {
    for (Event eachEvent : Trigger.new)
        eachEvent.ActivityDateProxy__c = eachEvent.StartDateTime;
}

回避方法はafter updateトリガでfutureメソッドを呼ぶことしかないと思います。本当に私が間違ったらいいですけど…

[1]: Apex テスト (http://pastebin.com/e6Ztg7zE)
[2]: バグを見える (http://www.youtube.com/watch?v=jxyyTwpEfQM)

SWATANABE0930SWATANABE0930
常さん。ご回答ありがとうございます。
同じ悩みを持っている方の意見がいただけて、心強くなりました。

こちらに投稿させていただいてから、セールスフォースに問合せてみたところ、先ほど回答がありました。
”仕様”とのことだそうで、言いたいことはあるのですが、そのような回答があったことを共有させていただきます。

回避方法も回答いただきましてありがとうございます。
いろいろ試したところ、EventオブジェクトのActivityDateTimeは、カレンダービューで行動をドラッグ&ドロップした場合でも、Before Updateで更新後の値になるようです。(だたし、「終日」チェックの場合の考慮が必要になりますが。)

今回の要件に合わせて、ActivityDateTimeで大丈夫なのか、After Updateトリガーで対応するかを検討したいと思います。