Cognos Analytics にファイルダウンロード用のページを作成する

#Cognosでファイルダウンロード用のページを作成する意義
Cognos AnalyticsでExcelやPDF形式でレポートをスケジュール実行すると、結果ファイルはコンテントストアに保存されます。
実はCognosは大量データのファイルの生成に向いておらず、もの凄い時間と負荷がかかるし、コンテントストアが重くなるし、良い事ないので、単に決まったデータを定期的にダウンロードしたいだけであれば、SQLかJavaプログラムを自分で書いてファイルに出力してよ、というガイドをする事があります。
そういう時に、ファイル出力は自前のプログラムでやる方が良いと理解したが、ダウンロード用のページはCognos画面上に作りたい、という要件になる事が良くあります。

こんなイメージであればできますので、というやり方の例を紹介します。
「ダウンロード」ボタンを新規に作成し、クリックするとCognosのポータルページの画面内に、ダウンロード可能なファイルの一覧が表示され、ファイル名をクリックするとダウンロードができます。
※ファイルは、Cognosサーバーのフォルダ上に置いているだけなので、Cognosに負荷かかりません。
<img width="744" alt="001.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/a9383632-95e5-3a64-2f39-de3f485611ef.png">

#実装手順
**①ファイル配置するディレクトリの作成**
ダウンロード用のファイルを配置するディレクトリを、Cognos Analyticsサーバー上の以下場所に作成。
/opt/ibm/cognos/analytics/webcontent/downloadFiles

**②/opt/ibm/cognos/analytics/webcontent/servlet/FileDownload.jsp の作成**
FileDownload.jsp の内容は以下

```html
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.io.File"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h2>ファイルダウンロード</h2>
<%
String filePath = "../webcontent/downloadFiles";
String filePath2 = "./downloadFiles";
String[] files = new String[0];
        try {
                Process p = Runtime.getRuntime().exec("ls " + filePath);
                p.waitFor();
                java.io.BufferedInputStream bis = new java.io.BufferedInputStream(p.getInputStream());
                java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
                byte[] b = new byte[1024];
                int len = -1;
                while( (len=bis.read(b, 0, 1024)) != -1 ) {
                        baos.write(b, 0, len);
                }
                String res = baos.toString("MS932");
                String[] tmp = res.split("\n");
                files = tmp;
        } catch(Exception ex) {}
        File dir = new File(filePath);
        String path = dir.getAbsolutePath();
%>
        <table border="1">
        <tr style="background-color:silver;">
                <th width="300px;">ダウンロードファイル一覧</th>
        </tr>
<%
        for(int i=0; i< files.length ; i ++) {
%>
        <tr>
                <td>
                        <%
                        out.println("<a href=." + filePath2 + "/" + files[i] + ">"+files[i]+"</a>");
                        %>
                </td>
        </tr>
<%
        }
%>
        </table>
</body>
</html>
```

**③「ダウンロード」ボタン生成用のspec.jsonファイルの作成と取り込み**
自分のPC上に「FileDownload」フォルダを作成し、以下のファイルとフォルダを作成。
<img width="516" alt="002.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/4a59d334-9914-e64c-7664-09da140d752d.png">

imagesフォルダの配下には、ダウンロードボタンのイメージファイルを置く。
※ファイルは任意のものを用意。今回はCognosサーバーから取得したupload-export_32.pngファイルを使用している。

spec.jsonの中身は以下。エディタでUTF-8で保存している。

```html
{
	"name":"File_Download_Button",
	"schemaVersion": "1.0",
	"extensions": [
	{
		"perspective": "common",
		"comment": "There is a special meta perspective called COMMON. Adding contributions to this perspective will cause the extension to be applied to All perspectives.",
		"features": [{
			"id": "sample.common.button.FileDownload",
			"toolItems": [
			{
				"comment": "This code adds a button to download files.",
				"id": "sample.iframeOpener.website",
				"containerId": "com.ibm.bi.glass.navbarLeadingGroup",
				"label": "ダウンロード",
				"type": "Button",
				"icon": "images/upload-export_32.png",
				"weight": 900,
				"comment": "The greater the weight, the higher the item will appear in the container.",
				"actionController": "bi/glass/api/IFrameOpener",
				"options": {
					"url": "/servlet/FileDownload.jsp",
					"title":"ダウンロード"
				}
			}
			]
		}]
	}]}
```

「FileDownload」フォルダをZIP化し、FileDownload.zipファイルを、Cognosポータルの「管理」→「カスタマイズ」→「拡張」でアップロードする。
<img width="740" alt="003.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/9b184bf5-a5ce-8c42-a53f-5100e2431061.png">


以上で完了です。
ログインすると「ダウンロード」ボタンが表示されるので、クリックするとdownloadFilesフォルダ配下に存在するファイルが一覧されて、クリックするとダウンロード可能となります。
<img width="744" alt="001.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/6b02acbc-06d4-3f00-608f-6d075352ac51.png">

是非ご活用ください。