スクリプトは、scriptという名称のウィジェット・パラメータとして定義されます。 <、>または&などの文字に関する問題を回避するためにXML CDATAセクションに入力されます。
デフォルトでは、処理された各レコードに対してスクリプト全体が実行されます。functionというパラメータが存在する場合は、各レコードに対して呼び出されるスクリプト内の関数が識別されます。これはより効率的です。
スクリプト内で、各プロセッサの入力は、JavaScript名inputNにマップされ、この場合のNはXMLからの入力IDです。入力で複数の属性の許可されている場合、値は配列になり、それ以外の場合はプレーン値です。
プロセッサからの各出力はJavaScript名outputNに割り当てられ、この場合のNはXMLからの出力IDです。
最初に、プロセッサのオプションは内部的にはプロパティと呼ばれ、プロパティは参照データを使用し、この参照データは内部的にリソースと呼ばれることに注意してください。
パッケージ化されたスクリプト・プロセッサは、プロパティおよびリソースを参照できます。
各プロパティは、プロパティと同じ名称のJavaScript変数にマップされます。リソース以外のプロパティは、同等のJavaScriptタイプ(文字列、数値、日付など)に設定されます。 各リソース・プロパティは、メソッドとプロパティを含む内部タイプとして作成され、これによってリソースを問合せできます。
次のプロパティおよびメソッドをリソース値で使用できます。
名称 |
タイプ |
意味 |
---|---|---|
name |
文字列 |
リソース名 |
keys |
数値 |
リソースに対して定義されているキー(参照列)の数 |
results |
数値 |
リソースに対して定義されている結果値(戻り列)の数 |
types |
文字列の配列 |
キー(参照列)および結果(戻り列)のデータ型(STRING、NUMBER、DATE)。キーが最初で、次が結果です。 |
loadall() |
リソース・レコードの配列 |
リソースのすべての要素をロードします。 |
query(k1, k2 …) |
リソース・レコードの配列 |
リソースを問い合せます。キーの数とタイプはリソース定義とマッチする必要があります。 |
loadAllまたはqueryによって返される各リソース・レコードは、リソース・レコードに対するキー値と結果値を含む配列です。マッチ・レコードがない場合、メソッド呼出しの結果は空の配列です。
リソースのコンテンツ全体が必要な場合は、次のように、フレームワークでリソースを1回ロードし、複数のプロセス・スレッドで値を共有する必要があることを示すために、プロパティ定義にpreloadパラメータを設定する必要があります。
<resource name="resprop" required="false" structure="1:0" loadable="true">
<guidata><label>Resource property</label></guidata>
<parameters>
<parameter name="preload">true</parameter>
</parameters>
</resource>
この結果、loadAll呼出しでは共有配列が返されます。このプロパティ定義を指定すると、次のJavaScriptコードの一部分を使用して、リソースの一部の情報を出力できます。
var records = resprop.loadall();
output1 = 'Name: ' + resprop.name + "; keys: " + resprop.keys +
"; results: " + resprop.results;
output1 += ' (' + records.length + ' records)'
これは、クレジット・カード番号検証プロセッサ(ウィジェット)を記述するwidgets.xmlファイルの完全な例です。
この例の目的はプロセッサ(ウィジェット)の構築方法を説明することであるため、クレジット・カード検証の実際の詳細は省略されています。
この場合、ウィジェットには成功フラグ(YまたはN)とクレジット・カード・タイプ(Amex、Mastercardなど)の2つの出力があります。例のコードでは、参照としてタイプの配列に桁数の合計のmod 10が使用されます。
<?xml version="1.0" encoding="UTF-8"?>
<widgets>
<comment>Example packaged JavaScript widgets</comment>
<groupid>1000:custom</groupid>
<!-- ========== -->
<!-- CC checker -->
<!-- ========== -->
<widget id="rde:scdemo" class="com.datanomic.director.widget.scripting.JavaScriptWidget">
<guidata>
<label>Simple CC check demo thing</label>
<group>Custom scripts</group>
</guidata>
<!-- inputs -->
<inputs>
<input id="1" type="string">
<guidata><label>Input CC</label></guidata>
</input>
</inputs>
<!-- outputs -->
<outputs cardinality="1:1">
<output id="1" type="string" name="valid" metadata="true">
<guidata><label>Validity</label></guidata>
</output>
<!-- CC type or message -->
<output id="2" type="string" name="type">
<guidata><label>Type</label></guidata>
</output>
</outputs>
<!-- Spigots -->
<spigots>
<!-- All -->
<spigot id="1">
<guidata><label>All</label></guidata>
</spigot>
<!-- Valid -->
<spigot id="2">
<guidata><label>Valid</label></guidata>
<filter outputid="1" value="Y" equals="true"/>
</spigot>
<!-- Invalid -->
<spigot id="3">
<guidata><label>Invalid</label></guidata>
<filter outputid="1" value="N" equals="true"/>
</spigot>
</spigots>
<!-- Results -->
<results>
<metrics>
<!-- Summary metric: key is valid string -->
<metric id="1" type="fixed">
<fixedrecords fromspigots="true"/>
<drilldowns>
<metricdrill name="types" metricid="2" view="counter"/>
<datadrill name="data" destid="1"/>
</drilldowns>
</metric>
<!-- Frequency count of types -->
<metric id="2" type="variable">
<!-- Simple counter, ignoring no data values -->
<variablerecords keyval="output:2">
<filter outputid="1" value="Y"/>
</variablerecords>
<!-- Drilldown by type -->
<drilldowns>
<datadrill name="bytype" destid="2"/>
</drilldowns>
</metric>
</metrics>
<views default="summary">
<!-- Summary view with:
1. Number and % of records with valid values
2. Number and % of records with invalid values
-->
<view name="summary" viewtype="fixed" metricid="1">
<guidata>
<label>Summary</label>
</guidata>
<columns>
<!-- Number and % of records with valid values-->
<columngroup drilldown="types">
<guidata><label>Valid</label></guidata>
<selector match="Y"/>
<column datum="$count">
<guidata><label>Valid</label></guidata>
</column>
<column datum="$percent" format="0.0">
<guidata><label>%</label></guidata>
</column>
</columngroup>
<!-- Number and % of records with invalid values-->
<columngroup drilldown="data">
<guidata><label>Invalid</label></guidata>
<selector match="N"/>
<column datum="$count">
<guidata><label>Invalid</label></guidata>
</column>
<column datum="$percent" format="0.0">
<guidata><label>%</label></guidata>
</column>
</columngroup>
</columns>
</view>
<!-- Counter view -->
<view name="counter" viewtype="variable" metricid="2" sortby="cp.countcol d" drilldown="bytype">
<guidata>
<label>Credit card types</label>
</guidata>
<!-- Type and count -->
<columns>
<column datum="$key">
<guidata><label>Type</label></guidata>
</column>
<!-- Number and % of records matching the pattern -->
<columnset name="cp" ref="countpercent"/>
</columns>
</view>
</views>
</results>
<!-- Parameters -->
<parameters>
<parameter name="script">
<![CDATA[
///*************************************************************************
// string checkcc([String CardNumber])
//
// Returns CC type or null if invalid. Simple demo mod 10 of sum of digits
// to determine CC type.
//
//*************************************************************************
var types = [ 'Amex', 'Mastercard', 'Visa' ];
function checkcc(ccnumber) {
if (ccnumber == null || ccnumber.length == 0)
return null;
var sum = 0;
for (var i = 0; i < ccnumber.length; i++)
{ var c = ccnumber.charCodeAt(i) - 48;
if (c >= 0 && c <= 9)
sum += c;
else
return null;
}
sum = sum % 10;
return sum > types.length ? null : types[sum];
}
function doit()
{ var type = checkcc(input1);
output1 = type == null ?'N' : 'Y';
output2 = type == null ?'-' : type;
}
]]>
</parameter>
<parameter name="function">doit</parameter>
</parameters>
</widget>
<!-- Shared columnset for count and percent columns -->
<columnset name="countpercent">
<column name="countcol" datum="$count">
<guidata><label>Count</label></guidata>
</column>
<column name="percentcol" datum="$percent" format="0.0">
<guidata><label>%</label></guidata>
</column>
</columnset>
</widgets>
Oracle (R) Enterprise Data Qualityオンライン・ヘルプ バージョン8.1
Copyright (C) 2006,2011 Oracle and/or its affiliates.All rights reserved.