Triggers 如何在salesforce的自定义对象中通过触发器插入和更新记录

Triggers 如何在salesforce的自定义对象中通过触发器插入和更新记录,triggers,Triggers,嗨,我试过下面的代码 trigger CreateRecord on Account (before insert,before update) { List<Account> CreateAcc = new List<Account>(); For(Account acc:trigger.new) { acc.Name='abc'; CreateAcc.add(acc); } insert Creat

嗨,我试过下面的代码

trigger CreateRecord on Account (before insert,before update) {
 List<Account> CreateAcc = new List<Account>();
    For(Account acc:trigger.new)
      {
       acc.Name='abc';
       CreateAcc.add(acc);
      }
    insert CreateAcc;  
 }
触发帐户上的CreateRecord(插入前、更新前){
List CreateAcc=new List();
对于(科目科目:触发器新)
{
acc.Name='abc';
CreateAcc.add(acc);
}
插入CreateAcc;
}
但是上面的代码正在创建以下错误: 查看下面的所有错误消息以更正数据。 Apex trigger CreateRecord导致意外异常,请与管理员联系:CreateRecord:执行BeforeInsert导致:System.SObjectException:DML语句无法对trigger.new或trigger.old:trigger.CreateRecord:第9行第1列
在此处输入代码


请帮我解释一下我的错误所在。

为什么不尝试从控制器调用方法或函数,而不是将您的内容放入触发器

就我而言,我会这样做

使用将插入记录的方法创建实用程序控制器

public class UtilityController
{
    @future (callout = true)
    public static void CreateRecord()
    {
       //Put your stuffs here...
    }
}
然后在触发器中,调用该方法

trigger Account_CreateNewRecord on Account (before insert,before update) {
    Utility.CreateRecord();
}
请注意,您只能从另一个类调用一个方法/函数,如果它有一个未来的anotation

我经常使用这样的触发器在语句上或之前/之后调用方法。 这样,触发器只需在被触发时专注于执行方法/函数。
有关apex触发器的更多信息,请参阅。

删除末尾的update DML语句。通过使用“before”触发器修改trigger.new对象,您无需显式执行更新,只需插入DML语句。当触发器结束时,它将在您修改值时隐式更新或插入数据

trigger CreateRecord on Account (before insert,before update) {
 List<Account> CreateAcc = new List<Account>();
    For(Account acc:trigger.new)
      {
       acc.Name='abc';
       CreateAcc.add(acc);
      }
    //insert CreateAcc;  removed this line.
 }
触发帐户上的CreateRecord(插入前、更新前){
List CreateAcc=new List();
对于(科目科目:触发器新)
{
acc.Name='abc';
CreateAcc.add(acc);
}
//插入CreateAcc;删除此行。
}
因此使用了一个。请编辑问题中的代码。