私の答えは本質的に同じです。私が行うことは、すべての関連するID(User/Contact/Lead/etc。)と@Future呼び出しから処理されるカスタムデータを持つカスタムキューオブジェクトを準備することです。これはガバナーの制限に役立ちます。なぜなら、コールアウトと今後の制限により、単一のスレッドで処理できることをキューから引き出すことができるからです。たとえば、Facebookの場合、1回のコールアウトで20件のプロファイル更新を一括して処理できます。各@Futureは10個のコールアウトを許可し、各スレッドは@Futureコールを10個許可します。これは2000個のFacebookプロファイルのアップデートに相当します - バッチを適切に処理している場合、最後に私がチェックしたのは24時間あたり200人の@Future呼び出しです。あなたは私はあなたが最初の場所で@future方法にコールアウトするあなたの必要性に基づいてやろうとしていると仮定するものであるトリガーコールアウトを、実行しているとき
道路が狭くなります。引き金になっていない場合は、DMLを処理する前にコールアウトを処理できる限り、コールアウトを処理できます。つまり、呼び出しが完了するまで、特定のスレッドにデータを保存するのを延期します。あなたはのsObjectsでそれをバッチ処理、トリガーからコールする必要があるように聞こえるので、
は、しかし、実際に移動するための方法です。これはちょっとした作業ですが、既存のヒープデータを本質的にシリアライズすることは、ここを旅する道です。また、キューアプローチでは最終的にすべてのコールアウトを処理できるため、時間ごとにスケジュールされたバッチApexコールからこれを行うことを検討してください。特定のスレッドでガバナの制限に遭遇した場合(またはそれらを叩くのを避ける場合)、1時間後に起動し、キューに残っている作業を終了します。
String jobId = System.schedule('YourScheduleName', '0 0 0-23 * * ?', new ScheduleableClass());
これはあなたのキューオブジェクトから作業を引くとコールアウトの最大量を処理し1時間に1回ScheduleableClassのインスタンスをインスタンス化します。そのプロセスを起動するとこのようになります。
幸運にも、フラストレーションのために申し訳ありません。
これは暴言ですか、質問ですか? – Oded
私はそれが少しだと認めます。これを行うより良い方法があれば、私はそれを感謝するでしょう。私はこの点でベストプラクティスが何であるかを学びたいと思っています。それは私が時々実行するものです。 –
私は、将来のメソッドにヒープオブジェクトを渡すことができないための回避策は何ですか? –