2017-03-24 29 views
0

我在我的apex控制器中遇到了一些问题。我正在循环开始和结束日期之间的事件(将事件从一个月拉出的最大天数),但这会导致潜在的数千个事件。所以我做了一个soql循环的事件,所以它把它们分成200个事件,然后循环遍历200块中的每个事件来创建自定义事件对象,以返回到我的可视化页面。但是,在这第二个for循环中,我需要MORE for循环才能找到被邀请的人以及不在的工作,所以我的运行时不幸的是O(3n^3),但是前两个for循环一般会作为一个(得到200块,循环遍历它们,得到下一个,等等),所以它是更多的O(3n^2),但是当在一个月内有2777个事件的测试组织中,我碰到了CPU调控器限制。如何知道Apex中的批处理作业何时在JavaScript中完成?

我想把它放到批处理作业中,因为我认为这是处理这些大量事件的唯一方法(我无法再减少我的for循环)。

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

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

回答

0

所以你有一个VF页面,你想对可能需要第n次的批处理作业做出反应..如果你想要更新页面,我会建议看看Streaming API,我是甚至不能确定你的情况......批量工作显然是异步的,所以我认为你的要求是不现实的。我想更大的问题是你想要解决什么问题,并且如果你的要求是建立一个不合实际的异步作业的动态页面

+0

很大程度上是当用户想要查看事件的一个月的价值,有可能只是太多和CPU时间的调控器限制......我不是专家,唯一的问题是在Apex所以想知道这是否可能是一个解决方案,但似乎可能没有一个。我们正在考虑减少事件,如果他们达到极限,并让用户知道他们将不得不缩小观看日期范围以查看一些事件 –

+0

什么是事件?像标准对象Activity一样? – EricSSH

+0

哦,它在Salesforce中工作,因此它将salesforce事件对象并将它们放入调度程序客户端 –

0

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

+0

为什么你不在JavaScript中检索所有事件,然后循环/结合他们的客户端? –

+0

我必须循环遍历它们的所有客户端,因为我必须创建特殊事件对象,但通过它们循环遍历所有服务器端,以便在客户端使用与我需要的相同api名称来设置自定义事件对象。并且通过它们循环服务器端对于所有的关系是非常必要的,什么不需要事件并且将它们设置为受邀者。但是,这是通过静态远程方法调用的,它引发了另一个问题......所以我无法正确获取通过远程静态方法执行的批处理作业的状态,或者需要挂起程序服务器边等待 –