2017-03-24 32 views
0

私は頂点コントローラで少し問題に遭遇しました。私は、開始日と終了日の間でイベントをループしています(イベントを取得する最大日数は1ヶ月です)が、これにより数千のイベントが発生する可能性があります。だから私はイベントのsoqlループを行うので、200個のイベントにチャンクしてから、200個のチャンクの各イベントをループして、カスタムイベントオブジェクトを作成して視覚的なページに戻します。ApexのバッチジョブがJavaScriptで終了したことを知る方法?

しかし、この2番目のforループの中には、招待された人を見つけるためにループを追加する必要があります。何もないので、私のランタイムは残念ながらO(3n^3)ですが、 1つの塊(200個の塊を1つ取得し、すべてをループして次のものを取得するなど)が多いのでO(3n^2)ですが、1ヶ月で2777個のイベントを持つテスト組織でCPUガバナの制限。

私はこれを大量のイベントを処理する唯一の方法だと思うので(これは私のforループをもう少し減らすことはできません)、これをバッチジョブに投げたいと思っています。

バッチジョブが終了するまで雷ローディングスピナーを実行したいと考えています。しかし、私はどのようにバッチジョブの仕上がり()メソッドと私のVisualforceページ内の私のjavascriptの間で通信するか分からない。リモートアクションコールを使用してコントローラ内のメソッドを呼び出し、スピンナを非表示にすると、そのメソッドはバッチジョブを開始し、バッチジョブが終了すると、スピナが停止し、データでページがリフレッシュされます。

しかし、ええ、私はバッチジョブが完了したことを検出するためにjavascriptにfinish()をどのように接続できるかわかりません。

答えて

0

バッチジョブに反応するVFページがn番目の時間がかかる可能性があります。そのページを更新するには、Streaming APIを調べることをおすすめしますあなたの状況を解決することすら確かではありません...バッチジョブは明らかに非同期ですので、あなたの要件は現実的ではないと思います。より大きな問題は何を解決しようとしているのか、現実的ではない非同期ジョブから動的ページを作成することが要件であると思われます。

+0

大部分は唯一の問題は、ユーザがイベントの月の価値を表示したい場合、あまりにも多くのCPU時間のガバナ制限が可能です...私は専門家ではありませんよApexではこれが解決策になるかどうか疑問に思っていましたが、そうでないかもしれないようです。イベントが制限に達するとイベントを減らし、イベントを見るために視聴期間を絞り込む必要があることをユーザーに知らせることを考えていました –

+0

イベントとは何ですか?標準的なオブジェクトアクティビティと同様? – 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名でカスタムイベントオブジェクトを設定するために、そして、それらのサーバー側をルーピングすることは、すべての関係に必要であり、イベントには関係ないものを招待者として設定する必要があります。しかし、これは物事に別のレンチを投げる静的なリモートメソッドを介して呼び出されます...私は適切にリモート静的メソッドを介して実行されたバッチジョブのステータスを取得することができない、またはプログラムサーバーをハングする必要があります側が待っている –

関連する問題