作成済プロセッサの例

作成済プロセッサでのスクリプトの使用

スクリプトは、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.