私は頂点コントローラで少し問題に遭遇しました。私は、開始日と終了日の間でイベントをループしています(イベントを取得する最大日数は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()をどのように接続できるかわかりません。
大部分は唯一の問題は、ユーザがイベントの月の価値を表示したい場合、あまりにも多くのCPU時間のガバナ制限が可能です...私は専門家ではありませんよApexではこれが解決策になるかどうか疑問に思っていましたが、そうでないかもしれないようです。イベントが制限に達するとイベントを減らし、イベントを見るために視聴期間を絞り込む必要があることをユーザーに知らせることを考えていました –
イベントとは何ですか?標準的なオブジェクトアクティビティと同様? – EricSSH
ああ、Salesforceで働いているので、Salesforceイベントオブジェクトを取得してスケジューラクライアント側に入れています –