2011-12-09 46 views
4

每当SF对象发生任何更改(添加/更新/删除)时,我都想要监听旧系统中的更改。所以我创建了出站消息和工作流程。但在工作流程中,如果删除对象,我不会看到任何方法触发。Salesforce触发记录删除工作流程

无论如何,我可以触发记录删除出站邮件?我知道听说可以通过触发完成。但我不想为此编写顶点代码。

回答

5

据我所知,无法完成工作流操作与工作流规则分离(您甚至可以重复使用它们),因此他们可能不会收到事务范围,并且他们执行记录时已经过去了,行动中的任何引用都会指向一个不存在的数据。因此,我知道如何去做的唯一途径就是触发。

+0

很好的解释!我同意,你必须写一个删除触发器。这里有一个[链接](http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_triggers_defining.htm)给参考。 –

1

也许一种折中的体系结构会写一个非常小且简单的删除触发器,该删除触发器只是将删除的记录复制到某个新的自定义对象中。新的自定义对象触发您的工作流程规则,从而发送您要查找的出站邮件。与此唯一的问题将定期清理您的自定义对象数据,随着您从其他对象中删除记录,这些数据将会增大。换句话说,您的“划痕”对象只需要定期清洁 - 这可以通过批量Apex每晚进行。

这里有一个删除触发器,会做使用机会的伎俩为例:

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注释来完成,因为直接来自触发器的标注是被禁止的。希望有所帮助。

1

在触发器删除事件中写入一封邮件发送。你有不到1个小时。

+0

你能否提供一个关于如何创建一个触发删除事件的例子或者一些附加信息?,你的回答重申了“我知道已经听到它可以通过触发完成”的部分问题。 – jeremy

2

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

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