更新子对象时Salesforce更新主记录

时间:2012-05-21 12:49:41

标签: java salesforce

我有一个程序可以提取Salesforce Case个对象及其CaseCommentSolution个对象。此外,我有一组过滤器,可以让我减少结果(关键字,fromDate,toDate等)。我遇到的问题是,当我编辑或创建该案例的新评论时,Salesforce功能既不会更新案例LastModifiedDate也不会更新SystemModstamp字段。

单独提取案例,评论和解决方案的最直接的解决方案然后从评论和解决方案中提取ParentId(CaseId),使用案例或解决方案的max lastModifiedDate手动修改这些CaseID,然后合并所有案例。但是这个过程有点常规,所以我在寻找另一个解决方案,包括Salesforce和客户端。

2 个答案:

答案 0 :(得分:4)

如果您想避免使用触发器,可以使用Workflow进行“触摸”。截至salesforce.com的Spring '12 release,支持跨对象工作流。因此,您可以在案例注释上创建工作流规则,以更新父案例中的字段。您可以专门为此触摸过程创建自定义字段,也可以重复使用任何其他字段。

例如,要将“案例描述”字段用作触摸的字段,您可以执行以下操作。

  1. 在Case Comment对象上创建一个新的工作流规则,以便在创建或编辑记录时触发。
  2. 指定工作流规则的条件,即创建日期不等于null。
  3. 为字段更新创建新的工作流操作。
  4. 指定对象应为Case和字段描述
  5. 在公式中输入Parent.Description作为值。这会将Case Description设置为自己的值。有效地不改变记录。
  6. 关于通过API更改LastModifiedDateSysetemModstamp我不确定这是否可以作为正在进行的界面的一部分。 Salesforce将允许您通过API更新这些审核字段,但您必须与它们联系以启用该功能。

    salesforce在线文档涵盖the audit fields in more detail。它说:

      

    如果您将数据导入Salesforce并需要设置审核字段的值,请与salesforce.com联系。一旦salesforce.com为您的组织启用此功能,您就可以为以下对象设置审核字段值:Account,CampaignMember,Case,CaseComment,Contact,FeedComment,FeedItem,Idea,IdeaComment,Lead,Opportunity和Vote。您无法设置值的唯一审计字段是systemModstamp。

答案 1 :(得分:3)

我能想到的最简单的方法是只要在创建或编辑CaseComment时“触摸”(更新而不对数据进行任何修改)Case记录。这可以通过CaseComment上的触发器完成:

trigger CaseCommentAIAU on CaseComment (after insert, after update) {
    Set<Id> caseIds = new Set<Id>();
    for ( CaseComment cc : Trigger.new ) {
        caseIds.add(cc.ParentId);
    }
    Case[] caseUpdates = [select id from Case where Id in :caseIds];
    update caseUpdates;
}