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

时间:2016-01-20 09:02:10

标签: triggers

您好我已尝试过以下代码

MATCH

但上面的代码创建了以下错误: 查看下面的所有错误消息以更正您的数据。 Apex触发器CreateRecord导致意外异常,请联系您的管理员:CreateRecord:执行BeforeInsert导致:System.SObjectException:DML语句无法对trigger.new或trigger.old进行操作:Trigger.CreateRecord:第9行,第1列{{1} }

请帮助我完成代码,因为我错了。

2 个答案:

答案 0 :(得分:0)

为什么不尝试从控制器调用方法或函数而不是将你的东西放在触发器中?

在我结束时,我会这样做..

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

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 Developers Guide

答案 1 :(得分:0)

最后删除更新的DML语句。通过使用“之前”触发器来修改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.
 }