私が使用したアプローチについて説明します。我々は、スケジュール情報を更新するために使用されるものと、Excelにエクスポートするものとを有するウェブUI、データベース、および2つのWindowsサービス を有する。
データベース
の表は、彼のスケジュール情報と一緒に私たちのクエリを保存します。 すべてのエクスポートを保存するテーブルで、履歴を保存できます。
ウェブインターフェースを介してWeb UI
我々はいくつかの毎日、いくつかの毎週、いくつかの毎月、毎時間スケジュールに従って、 一部の上で自動的に実行する必要があるクエリを保存することができます。 インターフェイス上で、ユーザはスケジュールのために邪魔されない設定を行うことができます。
クエリが保存されると、すぐにこのクエリのnextruntimeが自己書き出しの SQL関数を介して計算され、この値がデータベースに格納されます。レコードの更新、クエリの変更または スケジュール情報の変更が発生するたびに、lastmodifiedフィールドを更新します。
サービス
私たちの最初のサービスは、フィールドnextruntimeがnullでないすべての情報を読み取ります。この情報は、オブジェクトリストに記憶されています。 5分ごとに、クエリを変更するか、スケジュール情報 が更新されるため、そのエクスポートに変更が加えられたかどうかが確認されます。更新されたレコードが見つかると、この情報がオブジェクトリストに更新されます。 同じサービスで、30秒ごとにオブジェクトリストをループし、nextruntimeが実際のシステムのdatetimeと等しいかどうかを確認します。その場合、 レコードを特定のステータスで2番目のテーブルに追加するので、2番目のサービスは処理が必要なレコードを認識し、インクリメンタルな シーケンス番号を保持して順番にエクスポートします。
2番目のテーブルをポーリングしてクエリを実行し、結果をExcelにエクスポートし、スケジュール情報に基づいて最初のテーブルの nextruntimeフィールドを更新します。 Excelファイルを作成するために、OpenXmlライブラリを使用しました。
私はそれがあなたには少しはっきりしていることを願っています。
あなたの治療を行う単純なコンソールアプリケーションを作成し、それをWindow自身のスケジューラで実行できますか? – Gimly
私はGimlyに同意します。バッチプロセスや日常的なタスクは、これらのテストやレポートをコンソールアプリケーションとは別の実行可能プログラムとして実行する必要があります。 Windowsタスクスケジューラ –
Windowsでスケジュールされたタスクでは実行できない[Quartz Scheduler](https://www.quartz-scheduler.net/)を使用しています。 –