2017-04-27 14 views
0

私はVB.NETで開発されたWindowsアプリケーションを開発中です。このアプリケーションには、複数の分析テストが含まれています。ユーザーが特定のテストをクリックすると、暗号化されたSQLクエリが実行され、対応する出力がExcelに貼り付けられます。VB.NetでWindowsフォームアプリケーションでスケジューラを実装する方法

ここでは、ユーザーが日付と時刻を指定し、テストが実行される特定の時間にこのタスクを自動スケジュールする必要があります。また、セキュリティ目的のためにSQLクエリは暗号化された形式で保存されるため、SSISパッケージやSQLジョブエージェントを使用してタスクをスケジュールすることはできません。

.NET Windowsアプリケーション用のスケジューラを実装するためのこの特定のシナリオでは、可能なアプローチ/回避策はありますか?

+0

あなたの治療を行う単純なコンソールアプリケーションを作成し、それをWindow自身のスケジューラで実行できますか? – Gimly

+0

私はGimlyに同意します。バッチプロセスや日常的なタスクは、これらのテストやレポートをコンソールアプリケーションとは別の実行可能プログラムとして実行する必要があります。 Windowsタスクスケジューラ –

+0

Windowsでスケジュールされたタスクでは実行できない[Quartz Scheduler](https://www.quartz-scheduler.net/)を使用しています。 –

答えて

0

私が使用したアプローチについて説明します。我々は、スケジュール情報を更新するために使用されるものと、Excelにエクスポートするものとを有するウェブUI、データベース、および2つのWindowsサービス を有する。

データベース

の表は、彼のスケジュール情報と一緒に私たちのクエリを保存します。 すべてのエクスポートを保存するテーブルで、履歴を保存できます。

ウェブインターフェースを介してWeb UI

我々はいくつかの毎日、いくつかの毎週、いくつかの毎月、毎時間スケジュールに従って、 一部の上で自動的に実行する必要があるクエリを保存することができます。 インターフェイス上で、ユーザはスケジュールのために邪魔されない設定を行うことができます。

クエリが保存されると、すぐにこのクエリのnextruntimeが自己書き出しの SQL関数を介して計算され、この値がデータベースに格納されます。レコードの更新、クエリの変更または スケジュール情報の変更が発生するたびに、lastmodifiedフィールドを更新します。

サービス

私たちの最初のサービスは、フィールドnextruntimeがnullでないすべての情報を読み取ります。この情報は、オブジェクトリストに記憶されています。 5分ごとに、クエリを変更するか、スケジュール情報 が更新されるため、そのエクスポートに変更が加えられたかどうかが確認されます。更新されたレコードが見つかると、この情報がオブジェクトリストに更新されます。 同じサービスで、30秒ごとにオブジェクトリストをループし、nextruntimeが実際のシステムのdatetimeと等しいかどうかを確認します。その場合、 レコードを特定のステータスで2番目のテーブルに追加するので、2番目のサービスは処理が必要なレコードを認識し、インクリメンタルな シーケンス番号を保持して順番にエクスポートします。

2番目のテーブルをポーリングしてクエリを実行し、結果をExcelにエクスポートし、スケジュール情報に基づいて最初のテーブルの nextruntimeフィールドを更新します。 Excelファイルを作成するために、OpenXmlライブラリを使用しました。

私はそれがあなたには少しはっきりしていることを願っています。

関連する問題