Triggers 更新后的Salesforce触发器

Triggers 更新后的Salesforce触发器,triggers,salesforce,apex,soql,Triggers,Salesforce,Apex,Soql,我已经创建了以下更新后触发器,但我无法保存它,我不太明白为什么它不起作用 trigger Adhoc_Approval_process_trigger on Ad_Hoc_Approval__c (after update) { list<Ad_Hoc_Approval__c> ladh= new list<Ad_Hoc_Approval__c>(); list<Ad_Hoc_Approval__c> query=[select Statu

我已经创建了以下更新后触发器,但我无法保存它,我不太明白为什么它不起作用

trigger Adhoc_Approval_process_trigger on Ad_Hoc_Approval__c (after update) {

    list<Ad_Hoc_Approval__c> ladh= new list<Ad_Hoc_Approval__c>(); 
    list<Ad_Hoc_Approval__c> query=[select Status__c,Submitted_for_Approval_Date__c from Ad_Hoc_Approval__c];
    for(Ad_Hoc_Approval__c adh : query)
    {
        if(adh.Status__c =='Submitted for Approval')
        {
            adh.Submitted_for_Approval_Date__c=Date.today();
            ladh.add(adh);
        }

    }

    update ladh;

}

非常感谢

您的意思是无法保存,因为它无法编译?嗯,看起来不错,有错误吗

您的第一个版本将成为一个永不中断的循环:)更新->更新->更新。。。更不用说查询没有任何WHERE子句,所以当您达到100001条记录时,它最终会爆炸


第二个版本更好:)仅适用于当前触发器的作用域,并且“更新前”您可以免费保存到数据库。

感谢您的回复,如果我错了,请更正我您不能在同一对象的后触发器中使用更新DML,但是如果DML更新其他对象,我们应该很好,正确吗?通常情况下,您无法锁定行,否则会出现“无法锁定行”错误。如果您真的需要它,有一个技巧,但您的工作是确保它不会进入无限循环&最终由于违反调控器限制而终止。但您可以自由插入、更新、删除不在
trigger.new
范围内的任何其他对象。
trigger Adhoc_Approval_process_trigger on Ad_Hoc_Approval__c (before update) {

        for(Ad_Hoc_Approval__c adh : trigger.new)
        {
            if(adh.Status__c =='Submitted for Approval')
            {
                adh.Submitted_for_Approval_Date__c=Date.today();

            }

        }



    }