Salesforce在记录删除时触发工作流程

时间:2011-12-09 13:48:05

标签: salesforce

每当SF对象发生任何更改(添加/更新/删除)时,我都希望在遗留系统中监听更改。所以我创建了出站消息和工作流程。但是在工作流程中,如果删除对象,我看不到任何触发方式。

无论如何我可以在记录删除时触发出站消息吗?我知道听说过它可以通过触发来完成。但我不想为此编写顶级代码。

4 个答案:

答案 0 :(得分:5)

据我所知,它无法完成,工作流操作与工作流规则分离(您甚至可以重用它们),因此它们可能不会收到事务范围,并且当它们执行记录时已经消失了引用内部操作将指向不存在的数据。因此,我知道如何做的唯一方法是通过触发器。

答案 1 :(得分:2)

这是一种解决方法。但是,这只能捕获通过std进行的删除。 Salesforce UI。

1.创建自定义复选框字段“已删除”
2.使用自定义VF页面取消Del链接,首先将记录状态更新为“Is Deleted”,然后删除记录。
3.使用“已删除”字段编写工作流程规则。

答案 2 :(得分:1)

也许折衷的架构是编写一个极小且简单的删除后触发器,它只是将有问题的已删除记录复制到一些新的自定义对象。新的自定义对象会触发您的工作流规则,从而发送您正在寻找的出站消息。唯一的问题是定期清理自定义对象数据,当您从其他对象中删除记录时,这些数据会变大。换句话说,您的“划痕”对象只需要定期清理 - 这可以在批量Apex的夜间计划中完成。

这是一个删除触发器,可以使用Opportunity作为示例:

trigger AfterDelete on Opportunity (after delete) 
{
    List<CustObj__c> co = new List<CustObj__c>();
    for(Opportunity o : Trigger.old)
    {
        CustObj__c c = new CustObj__c();
        c.Name = o.Name;
        c.Amount__c = o.Amount;
        c.CloseDate__c = o.CloseDate;
        c.Description__c = o.Description;
        // etc.

        co.add(c);
    }

    insert co;
}

这并不理想,但至少可以避免您编写自己的基于触发器的出站邮件。这些只能使用@Future注释,顺便说一下,因为禁止直接来自触发器的标注。希望有所帮助。

答案 3 :(得分:1)

在触发器删除事件中编写单个电子邮件发送。你可以在不到1小时内完成它。