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

我正在尝试创建一个触发器,该触发器执行以下操作:

  • 创建帐户后,使用默认RecordTypeId创建一个同名的不相关记录(称为“门户内容”记录)
  • 获取新创建的“门户内容”记录的ID,并将其插入最初创建的帐户的查找字段中
  • 我的当前代码成功地完成了项目1,但当我添加新代码以完成项目2时,我收到以下错误:

    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”触发器中的值,因此当触发器结束时,它将为您修改该值。如果您感兴趣,我创建了一个后续问题