0

我正在编写任务的触发器并在销售人员中收到错误来自多态域的非法多态分配 [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 是对 [SObject.User,SObject.Calender] 的查找。所以所有者的 id 应该与 User'id 不同。但是如何从 Task 对象的 Owner 字段中仅获取用户的 id?

4

1 回答 1

3

你是如此接近。语法是:

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

你是对的。task.Owner 字段是一个 SObject,task.Owner.Id 是有效的,但是被引用的值没有填充到触发器上下文中。

您的触发器写得不是很好,它在循环中有一个 dml 语句,并且似乎没有从任务历史到任务的查找,我在下面的更新示例中引用了一个。

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 回答