【问题标题】:Apex DML operation Delete not allowed on ListApex DML 操作 列表中不允许删除
【发布时间】:2018-05-11 14:24:38
【问题描述】:

我正在编写 Apex 测试。

我收到一个编译错误,提示 DML operation Delete not allowed on List

AsyncApexJob[] currentAsyncJobs = [SELECT Id FROM AsyncApexJob];
delete currentAsyncJobs;

我正在尝试删除所有 AsyncApexJobs,以便稍后在执行我正在测试的类后检查是否已将正确数量的作业排入队列。 IE。

List<AsyncApexJob> asyncJobList = [SELECT Id FROM AsyncApexJob];
System.assertEquals(2, asyncJobList.size(), 'Two jobs should have been enqueued');

我不知道我做错了什么。这是documentation

我正在使用带有 maven mate 的 atom 编辑器。

【问题讨论】:

    标签: salesforce apex


    【解决方案1】:

    要删除作业,您必须调用 system.abortJob(jobId),我不相信您可以通过 DML 删除作业。 jobId 必须是

    jobId 是与 AsyncApexJob 或 CronTrigger 关联的 ID

    对于您的测试,您始终可以获得初始数字,然后检查它是否增加了您期望的数量,如果由于某种原因您无法停止作业,但如果您使用 Schedulable 安排作业,您应该只测试预定的cron 根据https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_scheduler.htm

    【讨论】:

    • 谢谢。我确实有它来检查它增加的数量,但我想看看我是否可以让它更优雅。我正在使用 System.enqueueJob() 将作业排入队列,我不确定是否建议使用您发布的链接或仅检查增加的数量?
    • developer.salesforce.com/docs/atlas.en-us.apexcode.meta/… 有可排队顶点的示例,但在测试中未返回作业 ID,因此您只需测试作业完成后应该发生的事情的影响.stopTest()
    • 谢谢。这项工作会发出标注,因此没有可用于测试的变异数据。我将只使用最初的工作数量减去新的工作数量。我不认为这样做有太大的问题。
    猜你喜欢
    • 2016-07-28
    • 2015-04-30
    • 1970-01-01
    • 2014-12-29
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多