我正在编写一个任务的触发器并在salesforce中出现错误来自多态域的非法多态分配[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(ⅰ).Owner;
当我写history.User__c = updated_tasks.get(i).owner.id然后没有错误 但是,当我尝试从此ID获取用户的电子邮件地址时,它显示没有与此ID对应的用户。如何从Task SObject的所有者字段获取所有者的用户ID。我认为错误是由于所有者是对[SObject.User,SObject.Calender]的查找。所有者的id应该与User'id不同。但是如何从Task对象的Owner字段中获取用户的id?
答案 0 :(得分: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;
}
}