【クエリビルダ：拡張表現】Webレポートにアイコンを表示する（HTML + CSS）

# はじめに #
過去の[投稿](https://qiita.com/Miki_Yokohata/items/a4a2a80cd3dc4541bd7c)では、WEBレポートにアイコンを表示することについて話しました。
アイコンは、独立した列としてこのように表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e66bcb94-e797-0715-d21a-dbbe38bee0fc.png)

今回は、HTMLコードとCSSを利用して、在庫数とアイコンをひとつの列に表示する方法を紹介したいと思います。

# クエリ #
## 基になるクエリ ##
今回は、Sharperlight独自のオプションである**カスタム定義のデータセット**を利用して、データを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/6c73f3ff-a765-92c4-6eb6-b75123a008b8.png)
データの定義はこのようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/bb2c17bc-28f8-3455-eb8c-fe370a7bbda5.png)
```
"製品::String","在庫数::Number"
"パイン材用ネジ 8G x 25",55
"パイン材用ネジ 8G x 28",120
"パイン材用ネジ 8G x 30",80
"パイン材用ネジ 8G x 35",10
"パイン材用ネジ 8G x 40",32
"パイン材用ネジ 8G x 45",500
"パイン材用ネジ 8G x 60",75
```
データを定義し終わると、選択リストが準備されます。そして選択リストから製品列と在庫数列を出力アイテムとして指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/7a6ef903-765d-5366-af45-a6a66591817b.png)

プレビュー機能でクエリを実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a5d08b69-3464-927d-ac7e-aa734cd33352.png)

## 在庫数とアイコンの表示 ##
拡張表現を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a2699375-29f1-2add-b0b4-4e6441032747.png)
データ型をHTMLとし、構文には以下のようにHTMLテーブルを作成する記述を行います。
これにより、この拡張表現で作成される列の各行（セル）には、数値とアイコンのセルをもつHTMLテーブルが作成されます。
Switch構文を利用して、在庫数に応じで表示するアイコンの色を変えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ea6ccaa0-0176-804f-41d7-e03d04494892.png)
```
"<table class='StatusIconStyle'><tr>" +
Switch( True
    ,{%在庫数} >= 100,					"<td>"+Format( "#,##0" , {%在庫数} )+"</td><td><img class='StatusIconStyleImg' src='{_System.Rest.URL}Image/?icode=StatusGreen'></img></td>"
    ,{%在庫数} < 100 AND {%在庫数} >= 30,"<td>"+Format( "#,##0" , {%在庫数} )+"</td><td><img class='StatusIconStyleImg' src='{_System.Rest.URL}Image/?icode=StatusYellow'></img></td>"
            ,							"<td>"+Format( "#,##0" , {%在庫数} )+"</td><td><img class='StatusIconStyleImg' src='{_System.Rest.URL}Image/?icode=StatusRed'></img></td>"
)
+ "</tr></table>"
```
`OK`ボタンで拡張表現を保存します。
拡張表現の説明を、**在庫数の状況**と編集します。
出力アイテムとして指定されている在庫数列は、作成した拡張表現によって参照され、値が表示されるので非表示にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/e63e0c74-9e89-d226-e1cb-53762000be89.png)

では、プレビューしてみます。
HTMLコードが見えますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/1610c4ee-fb9b-dc45-2818-1c5976f995e4.png)
ではWEBブラウザで見てみましょう。
`OK`ボタンでクエリを保存、さらにレポート定義を`適用`ボタンで保存します。

## CSS ##
WEBブラウザで拝見する前に、上記のHTMLコードでは、クラスが使用されていましたね。
クラスは、レポートの`オプション`タブにある`CSSオプション`で記述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/6f5dd19c-2565-6c19-ffa0-47f5abca46c8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/bc1f7edc-daf9-39b9-0f5d-a806e6f6076b.png)
```
<style type="text/css">
.StatusIconStyle td {
	border:hidden !important;
	width: 30px !important;
	text-align: right !important;
}
.StatusIconStyleImg
{
	border:0px;
	display:inline;
	margin-top: 4px;
	margin-left: 10px;
    	width: 16px;
    	height: 16px;
}
</style>
```


## WEBブラウザでの表示 ##
Sharperlightサービスが起動している事を確認し、`ビュー`ボタンを利用してWEBブラウザでレポートを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/d4c458c5-02a1-ce38-018d-84bedb524427.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/1c14d489-8d2b-bf96-6ff8-61ef480cbeda.png)

# あとがき #
SharperlightのWEBレポートのクエリには、HTMLやCSSを組み込むことができるので、ビジネスの中の多様な要求に対応しやすいのではないでしょうか。