0

所以这是问题我们正在使用 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 条记录完全插入后触发

4

1 回答 1

0

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

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

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

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

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

于 2020-09-16T17:12:14.757 回答