Triggers 使用从触发器创建的记录填充查找字段
我正在尝试创建一个触发器,该触发器执行以下操作:Triggers 使用从触发器创建的记录填充查找字段,triggers,salesforce,apex,apex-code,Triggers,Salesforce,Apex,Apex Code,我正在尝试创建一个触发器,该触发器执行以下操作: 创建帐户后,使用默认RecordTypeId创建一个同名的不相关记录(称为“门户内容”记录) 获取新创建的“门户内容”记录的ID,并将其插入最初创建的帐户的查找字段中 我的当前代码成功地完成了项目1,但当我添加新代码以完成项目2时,我收到以下错误: Line: 6, Column: 1 System.DmlException: Insert failed. First exception on row 0; first error: CANNO
Line: 6, Column: 1
System.DmlException: Insert failed. First exception on row 0; first error:
CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, newAccountCreated: execution of
AfterInsert caused by: System.FinalException: Record is read-only
Trigger.newAccountCreated: line 12, column 1: []
我当前的触发器如下所示:
trigger newAccountCreated on Account (after insert) {
List<Account> alist = Trigger.New;
for(Account a : alist) {
if (a.RecordTypeId == '012i0000001Iy1H') {
// system.debug(a.Name);
Portal_Content__c p = new Portal_Content__c(Name=a.Name,School_SFDC_ID__c=a.Id);
insert p;
a.Portal_Content_Record__c = p.Id;
update a;
}
}
}
触发在帐户上创建的新帐户(插入后){
列表列表=触发器。新建;
(账户a:alist){
如果(a.RecordTypeId==“012i0000001Iy1H”){
//system.debug(a.Name);
门户内容p=新门户内容c(名称=a.Name,学校名称=a.ID);
插入p;
a、 门户内容记录=p.Id;
更新a;
}
}
}
我不明白为什么错误消息会说“记录是只读的”,或者如何修改此错误。不能在“后”触发器上更新同一记录,必须在“前”触发器上更新;改为:
trigger newAccountCreated on Account (before insert) {
我进行了此更改,并收到以下错误
System.SObjectException:DML语句无法对trigger.new或trigger.old操作。同时删除“update a;”行。由于您现在正在更改“before”触发器中的值,因此当触发器结束时,它将为您修改该值。如果您感兴趣,我创建了一个后续问题