0

タスクのトリガーを書いているのですが、salesforce でエラーが発生しました Illegal polymorphic assignment from polymorphic domain [SOBJECT:User, SOBJECT:Calendar]

trigger Status_Change on Task (after update) {

    List<Task>updated_tasks=trigger.new;
    List<Task> tt=trigger.old;
    Task_History__c history=new Task_History__c();
    Integer i=0;
    for(i=0;i<updated_tasks.size();i++)
    {
    history.Name=tt.get(i).Subject;
    history=new Task_History__c();
    history.OldValue__c=tt.get(i).Status;
    history.NewValue__c=updated_tasks.get(i).Status;
    history.User__c=updated_tasks.get(i).Owner;
    insert history;


    }
}

エラーは行 history.User__c=updated_tasks.get(i).Owner; にあります。

history.User__c=updated_tasks.get(i).owner.id を書き込むとエラーは発生しませんが、この ID からユーザーのメール アドレスを取得しようとすると、この ID に対応するユーザーが表示されません。タスク SObject の所有者項目から所有者のユーザー ID を取得するにはどうすればよいですか? エラーは Owner is a lookup to [SObject.User,SObject.Calender] によるものだと思います。そのため、所有者の ID は User'id とは異なる必要があります。しかし、Task オブジェクトの所有者のフィールドから User の ID のみを取得する方法は?

4

1 に答える 1

3

あなたはとても近いです。構文は次のとおりです。

history.User__c=updated_tasks.get(i).OwnerId;

あなたは正しかった。task.Owner 項目は SObject で、task.Owner.Id は有効ですが、参照されている値がトリガーコンテキストに入力されていません。

トリガーはあまりよく書かれておらず、ループ内に dml ステートメントがあり、タスク履歴からタスクへのルックアップがないようです。以下の更新された例で 1 つを参照しました。

trigger Status_Change on Task (after update) {
    List<Task_History__c> histories = new List<Task_History__c>();
    Task oldValue;
    for(Task task : Trigger.new) {
        oldValue = Trigger.oldMap.get(task.Id);
        histories.add(new Task_History__c(
            Name=task.Subject,
            OldValue__c=oldValue.Status,
            NewValue__c=task.Status,
            User__c=task.OwnerId,
            //This should be created as well
            Task__c=task.Id
        ));
    }
    if(histories.size() > 0) {
        insert histories;
    }
}
于 2012-06-19T11:55:43.073 に答える