2017-03-24 27 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名稱來設置自定義事件對象。並且通過它們循環服務器端對於所有的關係是非常必要的,什麼不需要事件並且將它們設置爲受邀者。但是,這是通過靜態遠程方法調用的,它引發了另一個問題......所以我無法正確獲取通過遠程靜態方法執行的批處理作業的狀態,或者需要掛起程序服務器邊等待 –