はじめに
Sharperlightアプリケーション群には、タスクを自動化するためのスケジューラが含まれています。
スケジューラの全機能を使用するためには、少なくとも5フルユーザーライセンス、または使用ライセンスにスケジューラ機能キーが含まれている必要があります。
スケジューラが完全に有効化されていない場合は、スケジューラリストビューの右下隅に赤いメッセージボックスが表示され、「プロダクトライセンスの詳細 - 制限有り」というテキストが表示されます。
一部のデータモデル(例:Dynamics 365 Business Centralデータモデル)では、スケジューラを使用してデータ処理を自動化しており、これらのデータモデルからインポートされるスケジューラのタスクは、スケジューラライセンスによる制約を受けません。
ライセンスのないスケジューラでは、スケジュールされたタスクを作成できますが、実行されません。
この投稿では、スケジューラを実行してクエリを更新し、クエリ結果をExcelファイルとPDFファイルに保存し、そのExcelドキュメントをメールに添付するというシナリオを取り上げます。単一の出力ファイルを生成して1通のメールを送信するだけでなく、クエリの組み合わせを使用して、複数の受信者を識別し、それぞれにフィルタリングされたクエリ結果を持つ受信者を反復処理します。このシナリオでは、スケジュールタスク、パブリッシュドクエリ、およびExcelワークブックに設定されたクエリを使った3つの異なるアクションを示します。
スケジューラ
ソフトウェアのインストール時に「完全」セットアップタイプを選択した場合、スケジューラはWindowsのスタートメニューのSharperlightフォルダに追加されます。「クライアントのみ」のインストールでも、Sharperlightアプリケーションメニューを開き、スケジューラボタンを使用することでスケジューラにアクセスできます。「デスクトップショートカットの作成」ボタンを使用すると、スケジューラへのデスクトップショートカットを作成できます。

スケジューラのタスクは、クライアント側とサーバー側の両方で作成・管理することができ、タスクの実行もクライアント側またはアプリケーションサーバー側で行えます。
通常、タスクはアプリケーションサーバー側で実行されます。これは、アプリケーションサーバーが常に稼働しており、必要なタイミングと頻度で確実にタスクを実行することが可能なためです。
ただし、スケジュールに依存せずタスクを作成・手動実行することも可能で、月末や週次など繰り返し行うが固定時刻のない作業に便利です。
各スケジュールタスクは複数のアクションを含み、前のアクションの結果に応じて条件付きで実行できます。
説明、デフォルトディレクトリ、パラメーター、アクション、トリガー、セキュリティ、履歴保存はすべて1つのスケジュールタスクに統合されています。
一般
スケジュールタスクの「一般」タブには、タスクのコード、グループ、説明が記載されています。より重要なのは、タスクを実行する場所(Location)を指定する項目です。
[Server] を選択するとアプリケーションサーバーで実行され、サーバー上で実行する必要があるタスクはここに設定します。クライアント固有のタスクの場合は、対象のクライアントコンピューターの名前を選択します。
既定のフォルダーの場所は、アクションがファイルとやり取りする場合に必要です。

スケジューラーには多数のアクションがありますが、この記事では特に以下のアクションに焦点を当てます:
- ファイルの削除
- クエリの組み合わせ
- クエリー
- 電子メール
アクション
ファイルの削除 アクション
ファイルの削除アクションは、生成された一時ファイルをクリーンアップするために使用します。
この後のクエリーアクションの定義の章で説明しますが、出力ファイルのファイル名末尾にはすべて {_Date} というタグが付与されており、これは実行時に「yyyy-mm-dd」形式の日付に置き換わります。
よってワイルドカード検索を使用して、「一般」タブで指定した 既定のフォルダーの場所内のファイルを対象に、以下のワイルドカードパターンに一致するファイルを検索します。
¥売上分析%[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].%

また、フィルターを設定し、このパターンに一致するファイルのうち、7日以上古いファイルのみ が削除されるようにします。これにより、古い分析レポートなどの不要ファイルを自動的に整理できます。

_Expression( DateAddDays( Now(), -7) )
- DateAddDays(): 日付の足し算引き算をするSharperlight関数
- Now(): 現在の日付を返すSharperlight関数
クエリの組み合わせ アクション
クエリの組み合わせアクションは繰り返し処理として機能し、定義したクエリから返された各行毎に、後続のアクションを繰り返し実行します。
これにより、クエリの結果行ごとに処理(例: レポート生成、メール送信、ファイル操作など)を自動的にループ実行できます。

クエリの組み合わせアクションのクエリーを編集ボタンは、繰り返し処理として使用するクエリを作成・編集するためのものです。
以下の例では、Dynamics 365 Business Central のクエリを使用しており、Sales Invoice テーブルから以下のフィールドを取得しています:
Sell-to Customer No.(顧客先番号)
Customer Name(顧客名)
Customer Contact Email Address(顧客連絡先メールアドレス)
このクエリの結果:
顧客先番号(%SelltoCustomerNo)をキーとして、各繰り返し処理を特定の顧客に絞り込みます。
Eメールアドレス(EmailAddress) と 顧客先名(%CustomerName) は、後続の Email アクションで使用されます(例:宛先メールアドレスや挨拶文に挿入)。
デモンストレーションのため、販売日には固定の日付範囲を設定していますが、実際の運用では相対日付(例:今日から過去30日間、月末締めなど)を使用するのが一般的です。日付オフセットやオプションを活用することで、毎回自動的に適切な期間のデータを処理できます。
これにより、顧客ごとに個別の請求書データを抽出し、自動でメール送信するような高度な自動化を実現できます。

クエリー アクション
この記事の例では、クエリーアクションは、先のクエリの組み合わせで返ってきたデータセットの行単位で実行されます。

クエリーアクションのクエリは、販売品目情報を数量、単価、金額で集計した結果を出力します。
このクエリ内の SelltoCustomerNoFilter フィルターは、実行時にクエリの組み合わせアクションから渡される {%SelltoCustomerNo} の値で動的に更新されます。これを実現するのが、クエリーのパラメーターに設定する以下のコマンドです。
SelltoCustomerNoFilter={%SelltoCustomerNo}
クエリの結果は、指定したファイル名で Excel と PDF として保存されます。
ファイル名には、クエリの組み合わせアクションから取得した {%SelltoCustomerNo} と日付プレースホルダー {_Date} が自動的に挿入されます。
\売上分析 {%SelltoCustomerNo} {_Date}
実際の出力例:
売上分析 C001 2025-12-15.xlsx
売上分析 C001 2025-12-15.pdf
これにより、顧客ごとに個別の集計レポートが自動生成され、ファイル名も顧客番号と日付で明確に管理されます。
電子メール アクション
電子メールアクションでは、左下に SMTP メールサーバーの設定(サーバーアドレス、ポート、認証情報など)を入力し、右下にメール本文を設定します。
送信元は固定値でハードコードすることも可能ですが、この例ではクエリの組み合わせアクションから取得した {%EmailAddress} の値を動的にマッピングしています。
件名には、クエリの組み合わせアクションから取得した {%CustomerName} を挿入しています。これにより、顧客ごとにパーソナライズされた件名(例:「売上分析レポート - {%CustomerName}様」)が自動生成されます。
添付ファイルには、クエリーアクションで出力されたファイル名と同じ参照(例:{%SelltoCustomerNo} と {_Date} を含むファイル名)を使用しています。
これにより、顧客ごとに個別の集計レポートが自動で添付され、メールが送信されます。

Email サーバー設定のユーザー名とパスワードは、アクション内で直接ハードコード(上記の例のように固定値で入力)することも可能ですが、**認証参照(Authentication Reference)**を使用する方が推奨されます。
認証ボタンをクリックすると認証ウィンドウが開き、そこでユーザー名とパスワードを安全に保存できます。これにより、複数のスケジュールタスク間で同じ認証情報を再利用でき、管理が簡単になります。

トリガー
トリガータブでは、スケジュールタスクを実行するためのすべての実行計画(トリガー)を管理します。
既定のトリガーは サービス タイマー です。これは Sharperlight サービス が稼働しているコンピューター専用で使用され、この場合、タスクの 場所 は [Server] に設定する必要があります。
代替として、Windows Task Scheduler を利用したトリガーも選択できます。以下のスケジュールタイプが利用可能です:
Daily(毎日)
Weekly(毎週)
Monthly(毎月)
On Time(指定時刻)
これにより、サーバー環境以外(クライアントPCなど)でも柔軟にスケジュール実行を設定できます。
セキュリティ
セキュリティタブの既定では、スケジュールタスクを作成または最後に変更した現在のユーザーが使用されます。
この場合、他のすべてのセキュリティ関連設定は無効(グレーアウト)となり、変更できません。
つまり、タスクは作成・編集したユーザーの権限で実行されるようになり、特別なセキュリティ設定を追加する必要のないシンプルな運用が可能です。

履歴
スケジュールタスクを詳細に監視するには、履歴 タブの ログ を すべて に設定してください。これにより、すべての実行履歴が完全に記録されます。



