プライマリ・コンテンツに移動
Oracle® Enterprise Data Quality状況依存ヘルプ
12c (12.2.1.2.0)
E88273-01
  目次へ移動
目次

前
 
 

2 Oracle Enterprise Data Qualityの管理

次の各項では、Oracle Enterprise Data Qualityの管理ユーザー・インタフェースについて説明します。

2.1 EDQの管理

EDQの管理機能を説明します。

2.1.1 Launchpad

Launchpadは、EDQアプリケーションや、「管理」、「ダッシュボード」、「Webサービス」などのグローバル・ナビゲーション・リンクへのアクセスを制御します。使用可能なすべてのページおよびオプションにアクセスするには、画面右上から「ログイン」を選択して、Launchpadのログイン機能を使用します。

ログインすると、アクセス権限のあるナビゲーション・リンクとアプリケーションの完全リストが表示されます。認証が必要なページにナビゲートすると、ログイン・ページが表示されます。

ログインした後は、画面右上のユーザー名をクリックして、ユーザー・メニューにアクセスできます。これにより、ログアウト機能やパスワード変更機能にアクセスできます(「パスワードの変更」オプションは内部レルムを使用している場合のみ使用可能です)。

グローバル・ナビゲーションでは、「Launchpad」と「ダッシュボード」はどちらもこれらのページを開くためのボタンであるのに対し、「管理」と「Webサービス」は限定されたページのセットから選択できるメニューです。「Webサービス」メニューには、「Webサービス」と「Webサービス・テスター」が含まれます。「管理」メニューには、「ユーザー」、「グループ」、「外部グループ」、「セッション」、「拡張機能」および「Launchpad構成」の各セクションのページが含まれます。

これらのページのいずれかに移動すると、そのグローバル・ナビゲーション・セクション内のページ間をスムーズに移動するための左側のナビゲーション・パネルがあり、現在のページが強調表示されます。

「Launchpad」画面に戻るには、「Launchpad」を選択します。

2.1.2 管理

管理オプションへのアクセスおよび構成について説明します。

2.1.2.1 Launchpad構成

このタブでは、Launchpadに公開されたアプリケーションを制御します。ユーザーには、EDQスイート内のすべてのアプリケーションの起動権限が付与されている必要があります。アプリケーション権限はユーザー・グループに関連付けられているため、そのアプリケーションの権限を付与されている1つ以上のグループに属している場合のみ、ユーザーはそのアプリケーションを起動できます。

メイン・ページには、選択した各起動ツールがLaunchpadでの表示位置に表示され、それぞれの名前、アイコン、説明およびヘルプ・リンクが示されます。その横には、使用可能ではあるが現在表示されていない起動ツールのリストがあります。ボタンを押してLaunchpadを構成すると、非常によく似たレイアウトのモーダル・ページが表示されます(その場所に応じて各起動ツールで使用可能なボタンおよびドラッグ・アンド・ドロップ機能がある点を除く)。


注意:

「問題管理」アプリケーションは、ディレクタからアクセスできます。これは、問題通知電子メールからディレクタにリンクできるようにする別個のアプリケーションです。構成済グループ内のユーザーは、Launchpadに公開しなくても、電子メール・リンクからこれを使用できます。また、「構成分析」、「ダッシュボード」および「サーバー・コンソール」アプリケーションもディレクタから起動できます。アプリケーション権限と機能権限は常に優先されます。

2.1.2.2 拡張機能

「拡張機能」タブは、EDQサーバーにインストールされた拡張機能を管理するために使用します。

2.1.2.3 機能パック

「機能パック」タブでは、オラクル社とのライセンス契約に従ってOracle Enterprise Dataの機能パックを管理できます。選択したパックを編集するには、「機能パックの変更」権限が必要です。

オラクル社は、顧客が機能を試験的に評価することを許可していますが、本番システムがライセンス契約に準拠していることを確認するためにユーザーを監査する権限は所有しています。

機能パックは、インストールでどのプロセッサ・セットをアクティブにするか、リアルタイム処理を有効にするかどうか、および「ダッシュボード」アプリケーションを有効にするかどうかを指定します。

プロセッサのファミリを選択しない場合、このファミリ内のプロセッサは使用できません。リアルタイム処理を有効にしない場合、WebサービスやJMSインタフェースは使用できません。ダッシュボードを有効にしない場合、データ品質メトリックをダッシュボードに公開できません。

2.1.2.4 ユーザー

「ユーザー」タブには、EDQユーザー・アカウントの情報が含まれています。

具体的には次の目的で使用します。

  • ユーザー・アカウントの作成と管理(グループへのユーザーの割当て、個別セキュリティ設定の構成を含む)。

  • 汎用セキュリティ設定の構成。

    WebLogic Serverを使用するデフォルトEDQインストールでは、「ユーザー」タブは表示されません。デフォルトでは、WebLogic ServerはOracle Platform Security Services (OPSS)を使用してユーザーを管理し、EDQはWebLogic Serverからグループを読み取ります。デフォルトのWebLogic環境でユーザーを管理するには、WebLogic Serverでユーザーを作成してグループに割り当ててから、「外部グループ」タブでそれらのグループをEDQグループにマップします。


    注意:

    EDQでは、Oracle Internet DirectoryやActive Directoryなどの外部ユーザー管理システムとの統合もサポートしているため、ユーザーおよびパスワードの外部管理が可能です。EDQ LDAP統合ガイドを参照してください。

2.1.2.5 グループ

EDQ内のアクセス権限は、グループを介して制御します。アプリケーションの権限、プロジェクトおよび機能ポイントのアクセス権はグループに割り当てられます。ユーザーはグループに属し、自分が属するグループから権限を継承します。

新しくEDQをインストールすると、事前構成された権限を持つ複数のデフォルト・グループが提供されます。これらについては、後述します。また、新規のグループを作成して、それらのグループに権限を割り当てることもできます。

2.1.2.5.1 アプリケーション権限

ユーザーには、EDQスイート内のすべてのアプリケーションの起動権限が付与されている必要があります。アプリケーション権限はユーザー・グループに関連付けられているため、そのアプリケーションの権限を付与されている1つ以上のグループに属している場合のみ、ユーザーはそのアプリケーションを起動できます。

2.1.2.6 外部グループ

このタブは、外部ユーザー管理システム(Oracle Internet Directory、Active Directory、Oracle Platform Security Servicesなど)と統合されたEDQインスタンスでのみ表示されます。

ここには、使用可能な外部レルムおよびグループと、それらを含めたりマップしたりできるEDQグループが表示されます。

2.1.2.7 セッション

「セッション」タブは、セッションおよび時間(日)別にユーザー・セッションを監視するために使用します。

セッションはユーザー名別に表示され、各セッションの開始時間と終了時間が表示されて(現行セッションの場合は空白のまま)、「クライアント・ログ」と「サーバー・ログ」へのリンクが提供されます。

アクティブなセッションには、ユーザー名の左側に「アクティブ・セッション」インジケータが付きます。

表示されたセッションは、画面左側の「結果のフィルタ」複数選択領域を使用してフィルタできます。

デフォルトでは、過去30日間にわたるすべてのユーザーのセッションが表示されます。結果をフィルタするには、次の手順を実行します。

  1. 「含まれるユーザー」リストからユーザー名を選択して、「除外されたユーザー」リストに移動します。

  2. 必要に応じて、「日数」フィールドを編集します(最大値は30です)。

  3. 「フィルタ」をクリックして、新しいパラメータを適用します。

2.1.3 Webサービス

EDQサーバーで設定されたWebサービスはすべて1つのページから参照できるため、統合者はそれらを使用するのに必要なWSDLファイルに簡単にアクセスできます。

サービスを選択すると、「Webサービス・テスター」アプリケーションが自動的にロードされます。詳細は、「Webサービス・テスター」を参照してください。


注意:

制限付きのプロジェクト・アクセス権を持つユーザーは、自分がアクセスできるプロジェクトのWebサービスの表示とテストのみできます。

2.1.4 EDQの拡張

EDQは完全に拡張可能なシステムであり、ユーザー独自のプロセッサを作成してプラグインでき、拡張機能をアプリケーションに適合できます。

新しいプロセッサの記述

プロセッサは、ウィジェットと内部的に呼ばれ、この項で使用される用語の一部を説明する場合に役立ちます。

新しいプロセッサは、次のファイルで構成されるJARファイルとして作成されます。

  • widgets.xml (プロセッサ定義およびオプションのjavascript実装)

  • コンパイル済Javaクラス・ファイル(Java 1.6以降の仕様のJavaライブラリによって網羅されていない機能を追加する必要がある場合のオプションの実装)

  • widgets.properties (ラベルの国際化を促進するオプション・テキスト・ファイル)

  • イメージ・ファイル(カスタム・プロセッサ用のオプションのアイコン・イメージ・ファイル)

  • version.properties (バージョン情報を含む必須ファイル)

JARファイルへのプログラムのパッケージ化の詳細は、http://java.sun.com/docs/books/tutorial/deployment/jar/index.htmlを参照してください。

これらのJARファイルは、EDQ oedq_local_home\localwidgetsフォルダにコピーする必要があります。EDQ Application ServerサービスがEDQサーバーで再起動されるときに、新規プロセッサがツール・パレットに自動的にデプロイおよび追加されます。

EDQサーバーの構成ディレクトリの場所を変更するには、EDQ Launchpadの「構成」オプションを使用して、管理者のユーザー名とパスワードでログオンします。

EDQのアップグレードでは、カスタム・プロセッサは常に保持されます。さらに、EDQのアンインストールおよびアップグレード・プロセスでは、([Common Files]に)処理の前にサーバー構成の完全なバックアップが作成されます。

新規プロセッサは、次のような他のEDQプロセッサのほぼ全機能を模倣できます。

  • 参照データ(リソース)を必要とするオプションを含むプロセッサ・オプション(プロパティ)の定義

  • プロセッサからの出力フィルタ(spigot)の定義

  • プロセッサによる結果の生成方法の定義

  • データの変換

次の「記述されたプロセッサの例」を参照してください。

照合

照合の拡張性は特殊なケースであり、つまり、照合プロセッサ自体は最初から簡単に記述できない複雑なプロセッサであるものの、その処理は拡張可能です。このため、独自の照合アルゴリズムを定義し、既存のEDQ照合プロセッサ内で使用できます。

次のすべてを追加できます(詳細および例についてはクリックしてください)。

また、独自のカスタム出力セレクタを作成することもできます。詳細は、「選択関数」の項を参照してください。

比較と照合の変換はガジェットと内部的に総称されることに注意してください。

照合は、プロセッサの追加と似た方法で、JARファイルの作成を通じて拡張されます。JARファイルは次のファイルで構成されます。

  • matchlibrary.xml (比較用の新しい識別子タイプおよびデフォルト結果バンドを追加する場合)

  • widgets.xml (新しいガジェットを追加する場合)

  • matchlibrary.properties (ラベルの国際化を促進するオプション・テキスト・ファイル)

  • widgets.properties (ラベルの国際化を促進するオプション・テキスト・ファイル)。

これらのJARファイルは、oedq_local_home\localgadgetsフォルダにコピーする必要があります。EDQ Application Serverサービスがサーバーで再起動されるときに、新しい照合機能が自動的にデプロイされ、すべての照合プロセッサで使用可能になります。

カスタム作成のガジェットの例および独自のガジェットの作成方法は、サポートにお問い合せください。

選択関数

選択関数は、ウィジェットおよびガジェットと似たメカニズムを使用して定義され、widgets.xmlを使用して選択関数ファイルが定義され、widgets.xmlファイルを使用して国際化が促進されます。

選択関数は、oedq_local_home\localselectionフォルダにアップロードする必要があります。詳細は、「カスタム出力セレクタの例」のトピックを参照してください。

拡張機能のインポート

拡張機能は、EDQ管理アプリケーションの拡張機能を使用してインポートおよび管理します。

2.1.4.1 カスタム比較の例

カスタム比較を、照合ライブラリに追加できます。プロセッサ(ウィジェット)と同じ方法で、widgets.xml に追加されます。唯一の制限として、比較には、2つの入力と1つの出力が必要です。出力は、文字列(ブール比較用)または数値(結果バンドを使用する比較用)のいずれかである必要があります。ブール比較は、Trueの場合"T"を、Falseの場合"F"を返します。

各カスタム比較は、識別子タイプ(既存のタイプ(文字列、数値または日付))またはカスタム・タイプ(「カスタム識別子タイプの例」を参照)に関連付けられる必要があります。

比較ガジェットと識別子タイプの関連付け

比較ガジェットを使用するには、特定の識別子タイプと関連付ける必要があります。新しい比較を既存のシステム識別子と関連付ける場合、その名前は次のようになります。

文字列の場合dnm:string

数値の場合dnm:number

日付の場合dnm:date

次のxmlの例は、matchlibrary.xmlに追加された比較の関連付けを表しています。

  <identifierComparison>
    <ident>dnm:string</ident>
    <gadget>dnm:exactstringmatch</gadget>
  </identifierComparison>

これにより、識別子"dnm:string"が比較"dnm:exactstringmatch"と関連付けられます。

比較用のデフォルト結果バンドの設定

次のxmlは、文字列編集距離の比較用にmatchlibrary.xml に追加された比較デフォルト結果バンドを表しています。

  <comparisonReturn>
    <widgetId>dnm:stringeditdistance</widgetId>
    <resultBand name="exact" label="Exact Match">0</resultBand>
    <resultBand name="onetypo" label="One Typo">1</resultBand>
    <resultBand name="twotypos" label="Two Typos">2</resultBand>
    <resultBand name="threetypos" label="Three Typos">3</resultBand>
  </comparisonReturn>

完全な例

次の例のファイルは、JARファイルにパッケージ化でき、照合ライブラリへのカスタム「文字置換の一致」比較の追加に使用できます。「文字置換の一致」比較は、文字置換が発生した文字列を照合します。たとえば、値'Michael'と'Micheal'を比較する際、1回の置換がカウントされ、「最大許容置換」オプションが1以上に設定されている場合、2つの値が照合されます。

例2-1 matchlibrary.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
Custom Match Library Extension
Copyright 2008 Oracle Ltd. All rights reserved.
 -->
<matchLibrary>
  <identifierComparison>
    <ident>dnm:string</ident>
<gadget>dn:characterTranspositionMatch</gadget>
  </identifierComparison>
</matchLibrary>

例2-2 widgets.xml

<?xml version="1.0" encoding="UTF-8"?>
<widgets>
  <comment>Oracle Match example script widgets</comment>
  <copyright>Copyright 2008 Oracle Ltd. All rights reserved.</copyright>
  <widget id="dn:characterTranspositionMatch" class="com.datanomic.director.match.library.util.JavaScriptGadget">
    <guidata>
      <label>%characterTranspositionMatch.gadget</label>
      <group>compare</group>
      <icon>script</icon>
 
    </guidata>

    <!-- inputs -->
    <inputs>
 
      <input id="1" type="string" maxattributes="1">
        <guidata><label>label1</label></guidata>
      </input>
 
      <input id="2" type="string" maxattributes="1">
        <guidata><label>label1</label></guidata>
      </input>
    </inputs>
 
    <!-- outputs -->
    <outputs cardinality="1:1">
      <output id="1" type="string" name="result">
        <guidata><label>resultlabel</label></guidata>
      </output>
    </outputs>
<properties>    
 
      <property name="matchNoDataPairs" type="boolean" required="true">
        <guidata>
        <label>%characterTranspositionMatch.property.matchNoDataPairs.label</label>
        </guidata>
        <default>false</default>
      </property>
      
      <property name="ignoreCase" type="boolean" required="true">
        <guidata>
        <label>%characterTranspositionMatch.property.ignoreCase.label</label>
        </guidata>
        <default>true</default>
      </property>

      <property name="startsWith" type="boolean" required="true">
        <guidata>
        <label>%characterTranspositionMatch.property.startsWith.label</label>
        </guidata>
        <default>false</default>
      </property>
      <property name="maxAllowedTranspositions" type="number" required="true">
        <guidata> <label>%characterTranspositionMatch.property.maxAllowedTranspositions.label</label>
        </guidata>
        <default>1</default>
      </property>
    </properties>
<parameters>
      <parameter name="script">
<![CDATA[
function S(s)
{
return (s == null) ? "" : s;
}
function doit()
{
 // no data pairs
if (S(input1) == "" | S(input2) == "")
 {
 if (matchNoDataPairs)
 output1 = "T";
 else
 output1 = "F";
 return;
 }
 
 if (!startsWith)
 {
 if (input1.length != input2.length)
 {
 output1 = "F";
 return;
 }
 }
 
var transpositions = 0;
var longword = input1.length > input2.length ? input1 : input2;
 
var shortword = input1.length > input2.length ? input2 : input1;
 
if (ignoreCase)
{
// convert to uppercase
longword = longword.toUpperCase();
shortword = shortword.toUpperCase();
}
for (var i = 0; i < shortword.length; i++)
{
if (shortword[i] != longword[i])
{
 
// are we at the end of the string?
if (i == shortword.length - 1)
 
{
output1 = "F";
return;
}
 
// not a transposition match?
if (shortword[i] != longword[i + 1])
{
output1 = "F";
return;
}
 
// compare the next character
if (shortword[i + 1] != longword[i])
{
output1 = "F";
 
return;
}
transpositions++;
 
// too many transpositions?
if (transpositions > maxAllowedTranspositions)
{
output1 = "F";
return;
}

// skip over the characters
i++;
}
}
output1 = "T";
}
]]>
      </parameter>
      <parameter name="function">doit</parameter>
    </parameters>
  </widget>
</widgets>

例2-3 matchlibrary.properties

[This file was not required in this case as the comparison does not support result bands, and does not require new identifiers.]

例2-4 widgets.properties

characterTranspositionMatch.gadget = Character Transposition Match
characterTranspositionMatch.property.matchNoDataPairs.label = Match No Data pairs?
characterTranspositionMatch.property.ignoreCase.label = Ignore case?
characterTranspositionMatch.property.startsWith.label = Starts with?
characterTranspositionMatch.property.maxAllowedTranspositions.label = Maximum allowed transpositions

例2-5 version.properties

name=Character Transposition Match
version=v8.1.3.(175)
title=Character Transposition Match
type=GADGET

2.1.4.2 カスタム識別子タイプの例

タグ

カスタム識別子タイプを記述するxmlでは、次のような特定のタグが使用されます。

<name>は、識別子の内部名を示し、一意である必要があります(標準の照合識別子にはすべて接頭辞「dnm:」が付きます)

<label>は、GUIに表示される識別子のラベルを示します

<description>は、GUIに表示される識別子の説明を示します

<systemDefinition>は、今後の使用のために予約されており、falseに設定する必要があります。

例2-6 matchlibrary.xmlに追加されたカスタム識別子

次のxmlの例は、matchlibrary.xmlに追加されたカスタム識別子を表しています。

  <identifierDefinition>
    <name>newidentifier</name>
    <label>My New Identifier</label>
    <description>The description</description>
    <systemDefinition>false</systemDefinition>
    <formalAttribute>
    <name>value1</name>
    <label>First value</label>
    <type>string</type>
    </formalAttribute>
    <formalAttribute>
    <name>value2</name>
<label>Second value</label>
<type>number</type>
    </formalAttribute>
  </identifierDefinition>

比較と識別子タイプを関連付ける方法は、「カスタム比較の例」も参照してください。

2.1.4.3 カスタム出力セレクタの例

カスタム出力セレクタは、EDQプロセッサ(ウィジェット)と同じ方法で、widgets.xmlファイルに追加され、oedq_local_home\localselectionフォルダに保存されます。

例2-7 出力セレクタ用のスクリプトベースのガジェットの例

次は、出力セレクタ用のスクリプトベースのガジェットの例です。

  <!-- ************************************************************ -->  
  <!-- script for a simple 'first value' selection gadget -->
  <!-- ************************************************************ -->  
  <widget id="dnm:customselect"
          class="com.datanomic.director.match.library.util.JavaScriptSelectionGadget">
    <guidata>
      <label>%custom.firstvalue.name</label>
      <group>select</group>
      <icon>script</icon>
    </guidata>
    <!-- inputs -->
    <inputs>
      <input id="1" type="string" maxattributes="unlimited">
        <guidata><label>%custom.firstvalue.input</label></guidata>
      </input>
    </inputs>
    <!-- outputs -->
    <outputs cardinality="1:1">
      <output id="1" type="string" name="result">
        <guidata><label>Result</label></guidata>
      <output id="2" type="string" name="success">
        <guidata><label>Success</label></guidata>
      </output>
    </outputs>
<parameters>
      <parameter name="script">
<![CDATA[
function doit()
 {
   output1 = input1[0];
   output2 = "Y";
 }
]]>
      </parameter>
      <parameter name="function">doit</parameter>
    </parameters>
  </widget>

2.1.4.4 照合変換の例

照合変換ガジェットはwidgets.xmlに追加され、EDQのプロセッサ(ウィジェット)とまったく同じ方法で記述されます。「記述されたプロセッサの例」を参照してください。

唯一の制限として、照合変換では、入力と出力の両方とも1つのみである必要があります。

例2-8 大文字変換用のスクリプトベースのガジェットの例

次は、大文字変換用のスクリプトベースのガジェットの例です。

The following is an example of a script-based gadget for an Upper Case transformation:
  <!-- ************************************************************ -->  
  <!-- script for a simple uppercase transformation -->
  <!-- ************************************************************ -->  
  <widget id="customUppercase"
          class="com.datanomic.director.match.library.util.JavaScriptGadget">
    <guidata>
      <label>%custom.uppercase.gadget</label>
      <group>transformers</group>
      <icon>script</icon>
    </guidata>
    <!-- inputs -->
    <inputs>
      <input id="1" type="string">
        <guidata><label>%customer.uppercase.input</label></guidata>
      </input>
    </inputs>
    <!-- outputs -->
    <outputs cardinality="1:1">
      <output id="1" type="string" name="result">
        <guidata><label>%customer.uppercase.output</label></guidata>
      </output>
    </outputs>
<parameters>
      <parameter name="script">
<![CDATA[
function doit()
 {
   output1 = input1.toUpperCase();
 }
]]>
      </parameter>
      <parameter name="function">doit</parameter>
    </parameters>
  </widget>

2.1.4.5 記述されたプロセッサの例

記述されたプロセッサでのスクリプトの使用

スクリプトは、scriptという名前のウィジェット・パラメータとして定義されます。これは、<または>または&などの文字に関する問題を避けるために、XML CDATAセクションに入力されます。

デフォルトでは、スクリプト全体は、処理された各レコードに対して実行されます。functionという名前のパラメータが存在する場合、これにより、各レコードにコールされるスクリプトで関数が識別されます。この方がより効率がよくなります。

スクリプト内で、各プロセッサ入力は、JavaScript名inputNにマップされます(この場合のNは、XMLからの入力IDです)。入力で複数の属性が許可されている場合、値は配列となり、それ以外の場合はプレーン値です。

各プロセッサからの出力は、JavaScript名outputNに割り当てられます(この場合のNは、XMLからの出力IDです)。

プロパティとリソース

まず、プロセッサ・オプションは、プロパティと内部的に呼ばれており、プロパティでは参照データが使用され、これはリソースと内部的に呼ばれていることに注意してください。

パッケージ化されたスクリプト・プロセッサは、プロパティおよびリソースを参照できます。

各プロパティは、プロパティと同じ名前のJavaScript変数にマップされます。リソース以外のプロパティは、同等のJavaScriptタイプ(文字列、数値、日付など)に設定されます。各リソース・プロパティは、リソースの問合せを可能にするメソッドおよびプロパティを含む内部タイプとして作成されます。

次のプロパティおよびメソッドを、リソース値で使用できます。

名前 タイプ 意味
name 文字列 リソースの名前
keys 数値 リソースに定義されているキー(ルックアップ列)の数
results 数値 リソースに定義されている結果値(戻り列)の数
types 文字列の配列 キー(ルックアップ列)のデータ・タイプ(文字列、数値、日付)および結果(戻り列) - キーが先で次が結果です。
loadall() リソース・レコードの配列 リソースのすべての要素のロード
query(k1, k2 …) リソース・レコードの配列 リソースの問合せ(キーの数およびタイプはリソース定義と一致する必要があります)。

loadAllまたはqueryによって返される各リソース・レコードは、リソース・レコードのキー値および結果値を含む配列です。一致するレコードがない場合、メソッド・コールの結果は空の配列になります。

リソースの内容全体が必要な場合、次のように事前ロード・パラメータをプロパティ定義で設定し、フレームワークがリソースを1回ロードし、プロセス・スレッドで値を共有するように指定する必要があります。

<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ファイルの完全な例です。

この例の目的は、プロセッサ(ウィジェット)がどのように構築されるかを説明することであるため、クレジット・カード検証の実際の詳細は省略されています。

この場合、ウィジェットには2つの出力、つまり成功フラグ(YまたはN)とクレジット・カード・タイプ(Amex、Mastercardなど)があります。例のコードでは、合計桁数のmod 10をタイプの配列へのルックアップとして使用しています。

例2-9 完全なwidgets.xmlファイル

<?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>

2.1.5 プロジェクト固有のランディング領域

EDQプロジェクトに対して個別のランディング領域を設定することが望ましい場合があります。プロジェクト固有のランディング領域は、主要なランディング領域ディレクトリ(oedq_local_home/landingarea)内に作成し、プロジェクトの内部IDを使用して名前を付ける必要があります。プロジェクトの内部IDを使用すると、ランディング領域または関連付けられているスクリプトの名前を変更する必要なく、プロジェクト名を変更できます。

2.1.5.1 プロジェクト固有のランディング領域の作成

プロジェクト固有のランディング領域を作成するには、次のようにします。

  1. プロジェクトの内部IDを特定します。この情報は、「ディレクタ」内のプロジェクトを右クリックし、「プロパティ」を選択すると確認できます。内部IDは「拡張」タブにあります。

  2. プロジェクトの内部IDと同じ名前を使用して、oedq_local_home/landingareaディレクトリにサブディレクトリを作成します。この例で使用されているプロジェクトの場合、ディレクトリはoedq_local_home/landingarea/1となります

    または、組込みFTPサーバーを使用して、プロジェクト固有のランディング領域を作成できます。詳細は、Oracle Fusion Middleware Oracle Enterprise Data Qualityの管理のEDQファイルへのリモートでのアクセスに関する項を参照してください。

2.1.6 リアルタイムプロセスの監視

リアルタイム・プロセスのモニタリングの詳細は、『Oracle Fusion Middleware Oracle Enterprise Data Qualityの管理』のリアルタイム・プロセスのモニタリングに関する項を参照してください。