今回は、Sharperlight スケジューラを利用してファイルのコピーやファイルの一覧をファイルに書き出したりしてみようと思います。
下図のようなフォルダ構成を利用します。
また、それぞれのフォルダにはこのようなファイルが入っています。
このフォルダおよびファイルにスケジューラのタスクからアクセスしてみようと思います。
フォルダのセキュリティ
Sharperlightは通常、アップリケーションサーバーにインストールされ運用されます。そこでアプリケーションサーバーのフォルダになんら制限もなくアクセスを許すのはセキュリティ上問題があります。
よって、Sharperlightではサイトセットアップを利用し、アクセスを許可するフォルダを登録できるようになっています。早速設定しましょう。
Sharperlightアプリケーションメニューからサイトセットアップを起動します。
ツリービューからプロダクトの設定
、システム
を選択します。
プロダクトの設定オプションが右側に表示されます。一番下のオプションセキュリティで保護されたフォルダー
に今回アクセスしたいフォルダーのパスを指定します。複数ある場合は、|パイプ記号で連結します。
サイトセットアップダイアログを閉じる
ボタンで閉じます。
Sharperlightサービスを再起動し、変更を適用します。
スケジューラタスクの作成
Sharperlightアプリケーションメニューからスケジューラを起動します。
新規
ボタンでタスクの作成を開始します。
一般タブでは、コード
、グループ
および説明
を入力します。
アクションタブに移動し、実行したい処理をここに定義します。
ファイル一覧のCSVへの書き出し
今回は、C:\QiitaSampleTemp\以下の全ての子フォルダをチェックし、全てのファイルの一覧表をCSVファイルとして作成してみます。同時に全てのファイルをC:\QiitaSample\フォルダにコピーしてみます。
新規
アイコンでアクションを追加します。
使用可能なアクションの一覧が表示されるので、ここではクエリの組み合わせを選択します。
クエリの組み合わせの設定を行います。クエリの組み合わせは、forループのような働きをします。
ここで定義するクエリによって返されたデータセットから一行ずつ次のアクションへ値を渡すことができます。
では、早速クエリを編集
ボタンでクエリの作成を開始します。
お馴染みのクエリービルダが起動します。モード
は概要レポート、製品
はシステムを選択します。
テーブル
には、ファイルの一覧を選択します。
フォルダ
が必須フィルターとして表示されます。フォルダにはアクセスしたいフォルダを選択します。
サブフォルダへのアクセスを確実にするため、もう一つの必須フィルターであるサブフォルダー
がYになっていることを確認します。
次に、選択リストから以下のものを出力領域に指定します。
プレビュー
ボタンでクエリを試行してみます。
ファイル情報が返ってきます。一番最初の行は不必要なのでクエリから除外します。クエリに戻る
ボタンでクエリ定義に戻ります。
選択リストよりサイズをフィルター領域にドラッグ&ドロップで設定します。
条件には0より大きいを指定します。
もう一度プレビュー
ボタンでクエリを試行してみます。一番最初の不要な行は除外されました。
更に、このクエリでは下記の出力アイテムのみ残し、その他のアイテムは削除します。
クエリを試行するとこのようなデータセットが返されるようになります。
これでクエリは完成、このデータセットから一行ずつ次のアクションにパラメータとして値を渡すことになります。
OK
ボタンでクエリを保存すると、アクションタブに戻ります。
新規
アイコンで新しいアクションを追加します。
先に定義したクエリの組み合わせアクションには、ループを終了させるための対となるクエリの組み合わせ終了アクションが必須となります。先に追加しておきます。
では、クエリの組み合わせアクションで取得したデータセットを一行ずつ処理する核となるアクションを定義します。新規
アイコンで新しいアクションを追加します。クエリの組み合わせアクションとクエリの組み合わせ終了アクションの間に定義することとなります。
今度はクエリアクション使用します。
クエリの編集
ボタンでクエリを定義します。
クエリのフィルターは前回と同じになります。
ただし、今回はフォルダー
フィルターに先のクエリの組み合わせアクションで得たフォルダー名を渡すようにします。フォルダー
フィルターの右端に表示されている一意の参照名@フォルダー
を利用します。
その前に選択リストから以下のアイテムを出力領域に設定します。
OK
ボタンでクエリを保存します。
クエリのパラメーター
に フォルダー=と記入します。これは先ほどのクエリのフォルダー
フィルターの参照名を表しています。フォルダー
フィルターに値を渡すという意味です。
渡す値は、先のクエリの組み合わせアクションで得たフォルダー名なので、右端の参照ボタンで検索し設定します。
OK
ボタンで設定を完了します。
次に、このクエリの結果をCSVファイルに書込みます。その設定は右側にあります。
このような設定になります。追加チェックボックスは、データを同じファイルに追加するという意味になります。
ファイルのコピー
ファイルのコピーアクションを追加します。
そしてファイルおよびコピー先を以下のように設定します。先のクエリの組み合わせアクションの戻り値を利用します。
OK
ボタンでアクションを保存。
これで核となるアクションの定義も完了しました。
OK
ボタンでタスクを保存します。
尚、サイトセットアップのセキュリティで保護されたフォルダー
オプションに、C:\QiitaSampleCopyフォルダも追加します。
スケジューラタスクの検証
右クリックメニューから実行を選択します。
エラー等が表示されなければ正常です。
早速、作成されているはずのファイル一覧 FileList.csvを探してみましょう。
確認できますね。
下図のような日本語の列見出しがそのままCSVファイルに出力されますが、テキストエディタ等で開いた場合に列見出しが文字化けしている場合があります。
その場合はこのエンコーディングオプションで対応可能です。
更にC:QiitaSampleCopyフォルダを見てみます。ファイルがコピーされているのがわかりますね。
あとがき
今回はSharperlightのスケジューラを利用してファイル一覧を作成したり、ファイルをコピーしてみました。
スケジューリングを利用して行うような作業ではありませんが、数多くある機能のうち、このような使い方もできるのだなということがお伝えできればと思いました。
では失礼します。