function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Matsuda RisaMatsuda Risa 

日次集計・月次集計について

お世話になっております。
現在社員の工数および稼働率を管理するための仕組みを構築しております。
そこで、以下のような要件を実現させたく、開発を進めているのですが、
日次集計は実現できましたが、月次集計の方法が分かりません。
トリガや数式項目、参照/主従関係等を用いて、日次集計オブジェクトの最新処理日のレコードを
月次集計オブジェクトの当月分のレコードに上書きするような仕組みをご教示いただけないでしょうか。
User-added image
 
Best Answer chosen by Matsuda Risa
Taiki YoshikawaTaiki Yoshikawa
ちょっと考えてみたのですが、Apexのスケジュールバッチを使う方法になると思います。
細かい実装方法は検討できていませんが、バッチ処理なら処理件数が多くなっても基本問題ありません。

全件取得して集計し直すと何らかの制限が発生する可能性があるので、
処理済みフラグのような項目で対象判定するか、その月のレコードのみ対象とするなどの条件指定が必要になると思います。

Apex のスケジュール設定
https://help.salesforce.com/apex/HTViewHelpDoc?id=code_schedule_batch_apex.htm&language=ja (https://help.salesforce.com/apex/HTViewHelpDoc?id=code_schedule_batch_apex.htm&language=ja)
 

All Answers

Taiki YoshikawaTaiki Yoshikawa
ちょっと考えてみたのですが、Apexのスケジュールバッチを使う方法になると思います。
細かい実装方法は検討できていませんが、バッチ処理なら処理件数が多くなっても基本問題ありません。

全件取得して集計し直すと何らかの制限が発生する可能性があるので、
処理済みフラグのような項目で対象判定するか、その月のレコードのみ対象とするなどの条件指定が必要になると思います。

Apex のスケジュール設定
https://help.salesforce.com/apex/HTViewHelpDoc?id=code_schedule_batch_apex.htm&language=ja (https://help.salesforce.com/apex/HTViewHelpDoc?id=code_schedule_batch_apex.htm&language=ja)
 
This was selected as the best answer
Matsuda RisaMatsuda Risa
Taiki Yoshikawa様

ご返信ありがとうございます。
APEXトリガをスケジュール設定することができるのですね。
ご教示いただいた通り、月初に先月分の日次集計データを見に行き、最新のデータを月次集計オブジェクトにコピーするような
トリガを作成してみようと思います。

ありがとうございました。
Taiki YoshikawaTaiki Yoshikawa
だいたいそんな感じなのですが、スケジュール設定できるのはApexトリガではなく、Apexバッチになります。
Apexトリガはレコードの登録や更新、削除、復元のタイミングで実行されるもので、ApexバッチはApexクラスから実行したりスケジュール設定することにより指定したタイミングで実行できます。

実装イメージですがこちらが参考になると思います。
https://github.com/tyoshikawa1106/Salesforce-Hack-Challenge-2014/tree/master/src/classes
  • ApplicantFeedPostScheduleInterface.cls
  • ApplicantFeedPostScheduleConnect.cls
  • ApplicantFeedPostBatch.cls

ApplicantFeedPostScheduleInterfaceがスケジュール設定するApexクラスです。
ApplicantFeedPostScheduleConnectがバッチ処理を呼び出し実行するApexクラスです。
ApplicantFeedPostBatchが実際のバッチ処理になります。

スケジュール設定したApexクラスは編集できないというルールがあるのですが、
上記の構成にすることでスケジュール設定後もApexバッチ自体の編集は可能になりメンテナンスがやりやすくなると思います。
Matsuda RisaMatsuda Risa
実例も含め分かりやすくご教示いただきありがとうございます。

APEXクラスについてはトリガのテストクラスでしか使ったことがなく、
まだまだ理解が不十分ですが、イメージを参考に実装してみます。