繁体   English   中英

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

[英]how to insert and update record through trigger in a custom object in salesforce

您好我试过下面的代码

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;  
 }

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

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

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

在我这边,我会这样做..

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

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();
}

请注意,您只能从另一个类调用一个方法/函数,如果它有一个未来的注解。

我经常使用这样的触发器在语句之前或之前/之后调用方法。 这样你触发的只是专注于在触发时执行方法/函数。 有关 apex 触发器的更多信息,请参阅Apex 开发人员指南

删除末尾的更新 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.
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM