Cognos テキストボックスのプロンプトのデフォルト値にデータアイテムの値を入れる


概要

Cognos AnalyticsやCognos 10 BIで、テキストボックスのプロンプトを配置した時に、デフォルトの値をどっかのデータアイテムから取得できると便利ですよね。

JavaScriptで、本日の日付とかをデフォルト値で入力するのは、こちらのDeveloperWorksの記事にあり、よくお世話になっているやり方ですが、JavaScriptで生成できる値であればこのやり方で良いのですが、生成できない場合に、どこかのデータアイテムから取得したいよ、というパターンです。
Setting Dynamic Date Prompt Values within IBM Cognos 10.2 Report Studio
https://www.ibm.com/developerworks/library/ba-pp-reporting-scripting_techniques-page634/index.html

実装

本体ページにリストを置き、「製品ライン」と「数量」を置いてみます。

リストのクエリーはこんなイメージで、「数量」に対して、pFrom と pTo というパラメーターで、フィルターをかけています。

プロンプト・ページは2つあり、「ダミー・プロンプト・ページ」というのが、以下のイメージで、これがポイントです。

ダミー・プロンプト・ページで使用するクエリーは、以下のものを使用します。
つまり、「数量最大-10000」から「数量最大」の間の販売数量の製品にフィルターして、先ほどのリストに表示したいというシナリオです。
この「数量最大-10000」と「数量最大」のデータアイテムの値を、最初にお見せしたテキストボックスのプロンプトのデフォルト値として入力しようというものです。

右側の値のプロンプトの指定イメージです。
クエリー:製品数量、使用する値:数量最大、パラメーター:pToを指定しています。
また、値のプロンプトの名前を To に指定しています。

左側の値のプロンプトの指定イメージです。
クエリー:製品数量、使用する値:数量最大-10000、パラメーター:pFromを指定しています。
また、値のプロンプトの名前を From に指定しています。

左側のHTMLItemです。

<div  style = "Display:none">

右側のHTMLItemです。
これで、二つの値のプロンプトのデータアイテムの値を読み取って、pFromとpToのパラメーターにセットして、100msec後に「Next」で次のプロンプトページに遷移します。
「From」の部分と「To」の部分が、先ほどの値のプロンプトで名前を指定したところと一致させます。

</div>

<script language="javascript">


function setDefaultVaule()
{
    var form = getFormWarpRequest();
    form._oLstChoicesFrom.options[2].selected = true;
    form._oLstChoicesTo.options[2].selected = true;
    setTimeout("promptButtonNext();",100);
}

setDefaultVaule()

</script>

次のプロンプトページ、「プロンプト・ページ1」のイメージです。
左のテキストボックスのプロンプトのパラメーター:pFrom
右のテキストボックスのプロンプトのパラメーター:pTo
を指定しているのがポイントです。
これにより「ダミー・プロンプト・ページ」で設定されたパラメーターを受け取り、ここのテキストボックスのプロンプトに入力できます。

これで、レポートを実行すると、「ダミー・プロンプト・ページ」は、一瞬でスキップされ、この様にテキストボックスにデフォルト値が入った画面になります。

「終了」でレポート実行すると、製品の販売数量が指定の範囲で絞り込まれた結果が表示されます。

一瞬「ダミー・プロンプト・ページ」を経由するのは、あまり美しくない実装かも知れないですが、好きなデータアイテムの値を、テキストボックスのプロンプトのデフォルト値に入れれるのは、色々と応用範囲が広がる使える手だと思いますので、ご活用頂ければ幸いです。