分析における問合せの検証とブロック
分析で特定の問合せをブロックする必要が生じることがあります。たとえば、特定の列を他の列と併用するようにコンテンツ・デザイナに要求したり、特定の列がリクエストされたときにフィルタを要求したりする場合です。
APIを使用して、分析で指定された基準や分析内の式に基づいて問合せをブロックできます。JavaScriptを使用してこのAPIにアクセスすることによって、条件のチェックや分析の検証を行えます。
このセクションには次のトピックが含まれます:
JavaScriptファイルの保存
この項では、JavaScriptを使用した条件のチェックと分析の検証について説明します。
これらのタスクや他の同様のタスクを実行する独自のJavaScriptプログラムを作成します。Oracle Analytics Serverでは、JavaScriptプログラムはインストールされません。JavaScriptプログラムを作成したら、これらをシングルトン・データ・ディレクトリ(SDD)に保存できます。これらは仮想ディレクトリとして最初にデプロイするディレクトリです。
SDD/components/OBIPS/analyticsRes
SDDは、DOMAIN_HOME/bidataなどのシングルトン・データ・ディレクトリです。
共有ファイルとディレクトリの設定を参照してください。
これ以外のディレクトリにJavaScriptプログラムを配置する場合は、プログラムを呼び出すコードでフルパス名を指定してください。たとえば、次のようなコードを使用できます。
<script type="text/javascript" src="http://example/mydir/myblocking.js" />
基準に基づく分析のブロック
コードによるブロック対象の分析をユーザーが実行しようとしたときに、エラー・メッセージを表示できます。分析は実行されません。
answerstemplates.xmlファイルには、kuiCriteriaBlockingScriptというメッセージが含まれており、validateAnalysisCriteria関数を定義するJavaScriptを含むかまたはこのようなJavaScriptを定義するように、このメッセージをオーバーライドできます。デフォルトでは、このメッセージには、常にtrueを返す関数が含まれます。
ユーザーが分析を実行しようとすると、編集したvalidateAnalysisCriteria関数がアンサーによって呼び出されます。分析がブロックされない場合、この関数はtrueを返し、分析がブロックされる場合は、falseまたはメッセージを返します。メッセージまたはfalse以外の値が返された場合は、ポップアップ・ウィンドウにそのメッセージが表示されます。いずれにしても、問合せはブロックされます。
次のコード例は、問合せのブロックを示しています。最初に、answerstemplates.xmlファイルに次のXMLコードを追加します。
<?xml version="1.0" encoding="utf-8"?>
<WebMessageTables xmlns:sawm="com.siebel.analytics.web.messageSystem">
<WebMessageTable system="QueryBlocking" table="Messages">
<WebMessage name="kuiCriteriaBlockingScript" translate="no">
<HTML>
<script type="text/javascript" src="fmap:myblocking.js" />
</HTML>
</WebMessage>
</WebMessageTable>
</WebMessageTables>
このXMLコードは、myblocking.jsというJavaScriptプログラムを呼び出します。次のディレクトリにこのファイルが配置されていることを確認します。
SDD/components/OBIPS/analyticsRes
SDDはシングルトン・データ・ディレクトリです。
このmyblocking.jsプログラムのサンプル・コードを次に示します。
// This is a blocking function. It ensures that users select what
// the designer wants them to.
function validateAnalysisCriteria(analysisXml)
{
// Create the helper object
var tValidator = new CriteriaValidator(analysisXml);
// Validation Logic
if (tValidator.getSubjectArea() != "Sample Sales")
return "Try Sample Sales?";
if (!tValidator.dependentColumnExists("Markets","Region","Markets","District"))
{
// If validation script notifies user, then return false
alert("Region and District are well suited, do you think?");
return false;
}
if (!tValidator.dependentColumnExists("Sales Measures","","Periods","Year"))
return "You selected a measure so pick Year!";
if (!tValidator.filterExists("Sales Measures","Dollars"))
return "Maybe filter on Dollars?";
if (!tValidator.dependentFilterExists("Markets","Market","Markets"))
return "Since you are showing specific Markets, filter the markets.";
var n = tValidator.filterCount("Markets","Region");
if ((n <= 0) || (n > 3))
return "Select 3 or fewer specific Regions";
return true;
}
前述のテンプレートを使用してこの関数をオーバーライドしなかった場合や、この関数でfalse以外が返された場合は、基準は有効とみなされ、分析が発行されます。プレビューおよび保存操作に対しても、同じメカニズムで基準が検証されます。
この変更を行った後は、プレゼンテーション・サービスのサーバーを停止して再起動するか、または「管理」ページで「ファイルとメタデータのリロード」リンクをクリックします。
式に基づく分析のブロック
アンサー付属のフックを使用して、JavaScript検証機能を組み込み、コンテンツ・デザイナが列の式を入力または変更したときにアンサーからこの検証機能を呼び出すことができます。呼出しに失敗してメッセージが返されると、アンサーによってそのメッセージが表示され、操作が取り消されます。
また、ヘルパー関数を使用することによって、Document Object Model(DOM)を手動で走査するかわりに、問合せブロック関数でフィルタや列などをチェックできますDOMは、アンサーで現在表示されているHTML UIページの内部ブラウザ表現を記述する手段です。「検証ヘルパー関数」を参照してください。
criteriatemplates.xmlファイルには、kuiFormulaBlockingScriptというメッセージが含まれており、validateAnalysisFormula関数を定義するJavaScriptを含むようにこのメッセージをオーバーライドできます。デフォルトでは、このメッセージには、常にtrueを返す関数が含まれます。
アンサーは、コンテンツ・デザイナが行った変更を適用する前にvalidateAnalysisFormulaを呼び出します。この関数がtrueを返すと、式は受け入れられます。この関数がfalseを返すと、式は拒否されます。それ以外の場合は、無効な式が入力されたときの現行の動作と同じように、この関数からの戻り値が式の下のメッセージ領域に表示されます。
コンテンツ・デザイナは、必要に応じて「OK」をクリックしてエラーを無視できます。独自のアラートを表示して、コンテンツ・デザイナが作業を続行できるようにするには、関数からtrueを返すようにします。問合せをブロックするには、falseまたはメッセージを返します。JavaScript文字列および正規表現技術を使用して関数に渡された式をチェックし、関数で式を検証する必要があります。
次のコード例は、サンプルのカスタム・メッセージを示しています。
<?xml version="1.0" encoding="utf-8"?>
<WebMessageTables xmlns:sawm="com.siebel.analytics.web.messageSystem">
<WebMessageTable system="QueryBlocking" table="Messages">
<WebMessage name="kuiFormulaBlockingScript" translate="no">
<HTML>
<script type="text/javascript" src="fmap:myblocking.js" />
</HTML>
</WebMessage>
</WebMessageTable>
</WebMessageTables>
次のコード例は、入力された式に基づくブロックを示しています。
// This is a formula blocking function. It makes sure the user doesn't enter an unacceptable formula.
function validateAnalysisFormula(sFormula, sAggRule)
{
// don't allow the use of concat || in our formulas
var concatRe = /\|\|/gi;
var nConcat = sFormula.search(concatRe);
if (nConcat >= 0)
return "You used concatenation (character position " + nConcat + "). That isn't allowed.";
// no case statements
var caseRe = /CASE.+END/gi;
if (sFormula.search(caseRe) >= 0)
return "Don't use a case statement.";
// Check for a function syntax: aggrule(formula) aggrule shouldn't contain a '.'
var castRe = /^\s*\w+\s*\(.+\)\s*$/gi;
if (sFormula.search(castRe) >= 0)
return "Don't use a function syntax such as RANK() or SUM().";
return true;
}
この変更を行った後は、Oracle BIプレゼンテーション・サービスのサーバーを停止して再起動するか、または管理ページで「ファイルとメタデータの再ロード」リンクをクリックします。
検証ヘルパー関数
使用できるいくつかの検証ヘルパー関数がJavaScriptファイルにあります。
これらの関数は、answers/queryblocking.jsという名前のファイル内で定義されます。この表に各ヘルパー関数を示し、それぞれについて説明します。
| 検証ヘルパー関数 | 説明 |
|---|---|
|
|
分析で参照されたサブジェクト・エリアの名前を返します。通常これは、他の検証を実行する前に関数内のswitch文で使用されます。分析がセット・ベースの基準である場合は |
|
|
指定されたフォルダ(表)がコンテンツ・デザイナによって分析に追加されている場合は |
|
|
指定された列がコンテンツ・デザイナによって分析に追加されている場合は |
|
|
|
|
|
指定された列にフィルタが存在する場合は |
|
|
プロジェクション・リストに |
|
|
特定の論理列に対して指定されたフィルタ値の数を返します。フィルタ値が |