【パブリッシャー】SharperlightインスタンスAからSharperlightインスタンスBのスケジュールタスクを実行してみる

今回は、[Sharperlight](https://www.sharperlight.com/)インスタンス Aから[Sharperlight](https://www.sharperlight.com/)インスタンス Bのスケジュールタスクを実行する方法を試してみます。

[Sharperlight](https://www.sharperlight.com/)パブリッシャーを利用してカスタムレポートを作成し、ボタンをクリックすることであらかじめ定義済みの[Sharperlight](https://www.sharperlight.com/)スケジュールタスクを実行します。
よって今回使用するトークンは、実行対象タスクのあるSharperlightインスタンス BのAdminユーザーのものをあらかじめ準備します。

## カスタムレポート用のHTMLコードを準備する ##
ここではカスタムレポートを作成します。お手持ちのエディタを起動します。少しのスクリプトとボタンを作成します。
では実際にHTMLコードを書いていきます。
ヘッダー部です。ここでは下記のスクリプト部でJQueryコマンドを使用するため、JQueryライブラリを参照しています。SharperlightにはいくつかのJavaScriptライブラリが梱包されており、このような記述で参照することが可能です。
あとはボタンを飾りつけるためのCSS定義です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/74862600-22e9-5352-0c28-9f85371899e5.png)
Body部をスクリプト部とHTMLタグ部に分けて紹介します。
先ずスクリプト部からです。
ここではJQueryのajaxコマンドを利用してタスクの実行命令をポストしています。
三つのグローバル変数が見えると思います。ひとつはあらかじめSharperlightシステムプロパティに保存しておいたトークンの値を、`{*Global.Value.AdminToken}`というコントロールタグを利用して取り出しています。`AdminToken`とはトークンを保存しているシステムプロパティのコード名です。
実行するタスクの名称は、このHTMLコードのコンテナとなるレポートのクエリの出力アイテムとして定義し、`{*Row.実行タスク名称.text}`というコントロールタグで取得しています。
実行するタスクの定義されているSharperlightインスタンスBのサービスURLもシステムプロパティに定義し、`{*Global.Value.TargetService}`というコントロールタグで取り出しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9a973d08-d5d4-ac6d-3d8e-922ec9f90ae1.png)
Body内のHTMLタグのところは、このように簡単なボタンの配置としています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5c2eafed-5c82-fb00-345c-86169264db56.png)
## カスタムレポートの母体を準備する ##
先に作成したHTMLコードを保持するためのコンテナとなる公開レポートを作成します。
公開レポートには必ずクエリを定義する必要があります。
今回は、データを表示するようなクエリを定義する必要はないのですが、必ずクエリを定義する必要があるということで、そのクエリを利用して、実行するタスクの名称（グループ+コード）をHTMLコードに渡すようにします。そうすることで実行したいタスクが変更になった場合でも、HTMLコードの編集を行うのではなく、クエリを変更するだけで対応可能となります。
### 公開レポートの新規作成 ###
Sharperlightパブリッシャーを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/680fb277-4db8-2bba-db1c-2a9b8bdfae2c.png)
パブリッシャーウインドウが開いたら、`新規`ボタンで新しい公開レポートの作成を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e92058e6-bb40-7205-7966-9bb39369b7a9.png)
公開レポートのダイアログでは、**コード**、**グループ**および**タイトル**を記入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/625c05b8-714a-4922-2e6b-34ef1625bb4d.png)
### クエリの作成 ###
`クエリーを編集`ボタンでクエリの編集を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/883c2288-420b-cfde-0767-fa9c26e06402.png)
クエリビルダが起動したら下図のように`製品`には**システム**、`テーブル`には**ユーザーアカウント**、そして`モード`は**CU**に設定します。この設定で1レコードのみを返すクエリとなります。
今回は、実行したいタスクの名称をHTMLコードに渡したいだけなので1レコートで充分ということです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e9e1b005-1980-344e-7c0d-eec024c57619.png)
早速、拡張表現を利用して、実行したいタスクの名称を出力アイテムとして定義します。
出力領域で右クリックメニューから**拡張表現を追加**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ff96fb57-5b18-fd21-b4c4-e44947e1946b.png)
エディタが起動するので下図のように定義します。`OK`ボタンで保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c5265f1e-852b-6874-e8d1-02b8262b8d94.png)
保存したら下図のように理解しやすい名称に変更します。赤枠で囲んだ`名前`が、参照用のコードとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/022659f6-0d14-1444-3fda-544bc217b5a8.png)
プレビュー機能でクエリを検証します。このような結果となれば完了。`OK`ボタンでクエリを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/364d8ea2-073c-844f-fed0-eb9baedca010.png)
### HTMLコードの梱包 ###
クエリを保存して、公開レポートのダイアログに戻ったら、今度は先に準備したHTMLコードを梱包します。
`オプション`タブに移動。このタブ上の**カスタム HTML**オプションを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/2bd9e217-10d0-d053-a8fe-9a5294a0fd60.png)
チェックボックスにチェックを入れて、`編集`ボタンでエディタを起動します。
エディタのテキストフィールドに、先に準備したHTMLコードを貼り付けます。`OK`ボタンで保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/6ab709b0-56cb-1fac-5e45-271766155177.png)

以上で、公開レポートの作成は完了です。`OK`ボタンで保存します。

## 検証 ##
Sharperlightサービスを起動して、作成した公開レポートをブラウザで開いてみます。
作成した公開レポートのリンクアドレスをブラウザのアドレスバーに貼り付けます。
`QA1Rest`は、この公開レポートが存在するSharperlightインスタンスのサービスコードです。
```
http://localhost/QA1Rest/Report/?query=QiitaSample.TriggerTaskJavaScriptJP
```
このようなボタンひとつだけの単純なページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9b49d72a-2820-790c-08d0-f25fdeb862a9.png)
ボタンをクリックします。背景では指定したSharperlightサービス上のタスクが実行されたはずです。確認します。
指定したタスクが定義してあるSharperlightインスタンスのスケジューラを起動して、目的のタスクを開きます。
履歴タブに移動して、削除アイコンをクリックして、履歴を全て消去します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/2463a164-a67b-ded9-8595-64228eb92a77.png)
ブラウザに戻りボタンをクリックします。直後にタスクの履歴タブに戻り、更新アイコンをクリックします。
たった今実行された履歴が確認できます。上手く動きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5962a28a-47ae-c463-55dd-0a51026f39d6.png)
しかしながら、ここにはひとつセキュリティ上の問題があります。
ブラウザのデバッグツールでソースコードを表示すると、なんとトークンが丸見えなのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/2f6d6276-614a-dc89-fe55-1c1aac46cb3c.png)
この対処方法は、また別の記事で紹介するということで、今回はここまで。

では、失礼します。