Triggers 检测何时在触发器中克隆记录

Triggers 检测何时在触发器中克隆记录,triggers,salesforce,apex-code,Triggers,Salesforce,Apex Code,是否有方法检测插入的记录是触发器中克隆操作的结果 作为托管包的一部分,我希望在克隆Opportunity和OpportunityLineItem记录时清除一些自定义字段 或者触发器不是防止克隆某些字段的正确位置 我曾考虑过创建专用代码来调用sObject.Clone(),并排除不需要的字段。这似乎不是托管包的理想解决方案,因为它还将排除Opportunity上的任何其他自定义字段。您无法检测触发器内的克隆操作。它被视为“插入”操作 您仍然可以使用专用代码调用sObject.Clone(),并排除

是否有方法检测插入的记录是触发器中克隆操作的结果

作为托管包的一部分,我希望在克隆Opportunity和OpportunityLineItem记录时清除一些自定义字段

或者触发器不是防止克隆某些字段的正确位置


我曾考虑过创建专用代码来调用sObject.Clone(),并排除不需要的字段。这似乎不是托管包的理想解决方案,因为它还将排除Opportunity上的任何其他自定义字段。

您无法检测触发器内的克隆操作。它被视为“插入”操作

您仍然可以使用专用代码调用sObject.Clone(),并排除不需要的字段。通过使用sObject描述信息获取该对象的所有字段,然后排除不需要的字段,可以确保包含所有字段

希望这有意义


Anup

一种方法,尽管有点笨拙,但可以创建一个新字段,比如原始id,当记录的salesforce id为空时,该字段由工作流(或触发器,取决于您对的偏好)填充。对于新记录,此字段将与标准salesforce id匹配,而对于克隆记录,则不匹配。填充字段的时间、方式和内容有很多不同,但关键是给自己一个钩子来区分新记录和克隆记录

如果您只希望控制最终用户的体验(而不是开发人员扩展托管包),则可以使用自定义页面覆盖标准克隆按钮,该页面使用清除字段子集的值。有一些警告,即对于单击“克隆”按钮的用户,该字段是可编辑的,并且在页面布局上可见。在撰写本文时,我不相信您可以打包标准按钮覆盖,但随着版本的不断发布,可能会发生哪些变化。

在中,Apex有两种新方法,可以让您检测记录是否正在被克隆以及来自哪个源记录id。您可以在触发器中使用此方法

  • isClone()
    -如果实体是从某个对象克隆的,则返回true,即使该实体尚未保存
  • getCloneSourceId()
    -返回从中克隆对象的实体的ID


想法:这需要更多的爱