Salesforce 在特定条件下查找与其他相关记录相关的记录

Salesforce 在特定条件下查找与其他相关记录相关的记录,salesforce,apex,Salesforce,Apex,我正试图根据一些标准创建一组记录,我需要找出最好的方法 我想为每个具有特定Account对象的对象a和对象B创建一个记录。对象A的状态必须为“完成”,而B的状态必须为“准备就绪”,以便创建记录,该记录将是具有活动状态的对象A。新对象A上的字段将从一些对象A和B字段复制 这是一个进程,我不是从用户操作触发的,而是我需要在数据库中转储的一组记录。我确实有一个沙箱开始工作和测试,然后推出 请让我知道最简单的方法 我感谢你的帮助 您没有提供足够的信息,我们不知道双方的关系如何。A和B相关的清单是否在考虑

我正试图根据一些标准创建一组记录,我需要找出最好的方法

我想为每个具有特定Account对象的对象a和对象B创建一个记录。对象A的状态必须为“完成”,而B的状态必须为“准备就绪”,以便创建记录,该记录将是具有活动状态的对象A。新对象A上的字段将从一些对象A和B字段复制

这是一个进程,我不是从用户操作触发的,而是我需要在数据库中转储的一组记录。我确实有一个沙箱开始工作和测试,然后推出

请让我知道最简单的方法


我感谢你的帮助

您没有提供足够的信息,我们不知道双方的关系如何。A和B相关的清单是否在考虑范围内?它们是独立的还是相互之间有某种联系

如果需要的话,我会写我会做的脚本。你可以用它来做一个批处理工作,或者也许你会更熟悉数据加载程序、带交叉过滤器的报告、MS Excel和VLOOKUPs的狂欢

要识别所有候选帐户,可以尝试使用此查询框架

选择Id、名称 从帐户 其中Id在从状态为“完成”的帐户中选择帐户 和从B_uuuC中选择帐户c中的Id,其中状态c='Ready' 限制10000 现在,关于数据量的问题。它是否会返回10K,这是您可以在单个事务中插入/更新/修改的记录的限制,如果更多-您可能需要以某种方式将其分块。。。可能按Id订购,记录上次处理的帐户的Id,并在下一次迭代中添加和Id>'001….'

不管怎样,我们有一个候选人,嗯,也许他已经有一个活跃的a记录,我们不想复制。除此之外,我们需要从B中提取一些字段,以便它们被复制。因此,让我们稍微修改一下查询,添加子查询,如果有帮助,可以将它们视为相关列表或左内部联接

选择Id、名称、, 从As___r中选择Id,其中状态__c=‘活动’限制1, 从状态为“准备就绪”的限制1中选择SomeField\uuuuuuuu c和SomeOtherField\uuuuuuuu c 从帐户 其中Id在从状态为“完成”的帐户中选择帐户 和从B_uuuC中选择帐户c中的Id,其中状态c='Ready' 限制10000 很好。因此,现在您需要遍历帐户,查看它们是否包含至少1条活动记录,以及是否包含-跳过。如果他们没有-创建一个新的

List toInsert=新列表; 对于帐户a:[选择…]{ 如果a.As\u r.isEmpty&!a.Bs\u r.isEmpty{ toInsert.addnew A\uu c 账户c=a.Id, 状态_u_c=‘活动’, Foo\uuuu c=a.Bs\uuuu r[0]。SomeField\uuuuu c, Bar\uuuu c=a.Bs\uuu r[0]。其他一些字段\uuuu c+7 ; } } 插入到插入;
对象A和对象B不相关,但它们都有帐户对象所需的查找字段。在更好的示例中:对象A是策略,对象B是机会。在我们的商业模式中,政策是赢得机会后的最终产品。我需要为新阶段的机遇制定一系列政策。只有在2017年内存在状态为过期的健康记录类型的策略时,才会创建该策略。每个符合以前条件的帐户只能创建一个策略。要创建的新策略将从过期策略的字段和续订Opportunity的子记录中复制一些信息。在某些情况下,同一帐户中可能存在多个策略匹配的情况,因为一年中有多个过期的策略,在这种情况下,我只想使用最新过期的策略。尝试一下,如果遇到问题,请发布一些代码/屏幕截图:选择Id、名称、选择Id、,来自策略的名称,其中RecordType.DeveloperName='Health'和Status='Expired'和Status\'Date\'c=上一年按状态排序的订单\日期\说明限制1,选择Id,Opportunity中的名称,其中StageName='Renewad'来自Account,其中Id在Policy中选择Account,其中RecordType.DeveloperName='Health'和Status中选择c,其中RecordType.DeveloperName='Expired'和Status中选择c,其中Status中选择c,其中Status中选择c='Renewal'