如何知道Apex中的批处理作业何时完成JavaScript?

时间:2017-03-24 16:31:52

标签: javascript salesforce batch-processing apex

我的apex控制器遇到了一些问题。我在开始日期和结束日期之间循环事件(从一个月开始拉动事件的最大天数),但这可能导致数千个事件。所以我做一个soql循环的事件,所以它将它们分成200个事件,然后我循环遍历200个块中的每个事件来创建自定义事件对象以返回到我的视觉力页面。

然而,在第二个for循环中,我需要更多for循环才能找到被邀请的人和什么不是,所以我的运行时很遗憾O(3n ^ 3)然而,前两个for循环通常充当一个(得到一个200块,循环通过它们,得到下一个等等)所以它更多是O(3n ^ 2),但是当在一个月内有2777个事件的测试组织中时,我遇到了CPU调控器限制。

我想把它扔进一个批处理作业,因为我认为这是处理这些大量事件的唯一方法(我不能再减少我的for循环)。

我希望闪电加载微调器运行直到批处理作业完成。但是......我不确定如何在我的visualforce页面中批处理作业finish()方法和我的javascript之间进行通信。我将通过远程操作调用在控制器中调用一个方法并取消隐藏微调器,然后该方法将启动批处理作业,然后当批处理作业结束时,微调器停止并使用数据刷新页面。

但是,我不知道如何将finish()连接到我的javascript以检测批处理作业何时完成。

2 个答案:

答案 0 :(得分:0)

所以你有一个VF页面,你想对批量作业作出反应,这可能需要花费第n个时间..如果你想要更新那个页面,我建议你查看Streaming API,我不是甚至肯定会解决你的情况...批处理作业显然是异步的,所以我不认为你的要求是现实的。我想更大的问题是你想要解决的问题,如果你的要求是建立一个不真实的异步工作的动态页面

答案 1 :(得分:0)

您可以通过提供作业ID来检查salesforce批次状态。 下面是一个REST示例: 卷曲https://instance.salesforce.com/services/async/39.0/job/jobId/batch/batchId -H "X-SFDC-Session: sessionId"