【问题标题】:Salesforce -Fire apex trigger only after complete data loadSalesforce - 仅在完成数据加载后触发顶点触发器
【发布时间】:2020-09-16 12:33:46
【问题描述】:

所以问题来了 我们正在使用 DataLoader 将数据加载到 CustomObject__c 中。 通常通过的记录数为 3。 此外,如果传递的数据有任何问题,他们会再次运行数据加载器并传递更正的数据。现在,必须删除旧数据。 所以,我在插入代码之前处理它,并在插入代码之后调用一个批处理。

这是我的触发器的代码:

trigger TriggerCustom on CustomObject__c (before insert, after insert) {
  List<CustomObject__c> customobjectlist = [Select Id from CustomObject__c WHERE CreatedDate = TODAY ];
    if (Trigger.isBefore) {
        delete exchlisttoday;
        
    }
    if(Trigger.isAfter)
    {
         BatchApex b = BatchApex();    
            Database.executebatch(b);
    }
}

在设计时要牢记它们一次只能通过 3 条记录。 但是,现在他们想使用数据加载器传递超过 200 条记录。 如何修改我的触发器,使其仅在一个数据加载完成后触发(例如,如果它们一次传递 1000 条记录,则触发器必须在 1000 条记录完全插入后触发

【问题讨论】:

  • 当您使用数据加载器时,如何使用一个标志来关闭 CustomObject__c 的触发器?然后在数据上传完成后更新记录以运行触发器。
  • 数据加载器目前也是自动化的。它不是手动运行的

标签: salesforce apex dataloader apex-trigger


【解决方案1】:

触发器将不知道您何时完成,在 3、203 或 10000 条记录之后(您可以使用批量 api 加载大量数据,它们将被分块为 10K 数据包,但仍然 - 触发器一次可以工作 200 个)。

如果您有脚本数据加载 - 也许您可以在下一步更新其他内容。另一个对象(只有 1 条记录的虚拟对象)并对此有触发?

如果您有脚本数据加载 - 也许您可以查询 Id,然后将它们传递给删除操作,该操作将在上传任务之前运行。这对于可怜的小数据加载器来说有点太多了,但是 Talend、Informatica、Azure Data Factory、Jitterbit 等适当的 ETL 工具可以做到这一点。 (虽然之前删除有点勇敢……万一加载失败了怎么办?你完蛋了……可能更新成功后才应该删除)

也许您可以保证您的每日负载中的最后一条记录将设置一些标志并在触发器中 - 查找该标志?

也许您可以安排批处理每小时运行一次。您无法从 UI 轻松做到这一点,但您可以编写 cron 表达式并在开发控制台中将其安排为 1-liner。在 Schedulable 的 execute() 中检查今天是否加载了任何内容以及是否有单个记录 - 触发批处理?

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多