4 EDQケース管理の構成

この章では、ケース管理を使用するようにEDQを構成する方法について説明します。

この章の内容は次のとおりです。

ケース管理では、データ品質処理の結果の手動での調査をサポートしています。ケース管理を使用すると、特権ユーザーは高度に構成可能なワークフローを使用した一致する結果の管理およびレビューが可能になります。

EDQサーバーで使用されるケース管理の拡張属性の完全なセットは、oedq_local_home/casemanagementディレクトリのflags.xmlファイルに構成されます。このファイルは新しい拡張属性を追加し、それらの属性の移入方法のルールを定義するように変更される必要があります。

追加のプロパティ・ファイルflags.propertiesはベースflags.xmlファイルを伴い、グラフィカル・ユーザー・インタフェース(GUI)に表示される、拡張属性用のラベルを指定します。このファイルの設定は、ISO 639-1言語コードで追加のプロパティ・ファイルを作成することにより、flags_en.properties (英語)やflags_de.properties (ドイツ語)などの、特定のクライアント言語に対し上書きすることができます。この言語コードについては、ISO Webサイト(http://www.iso.org/iso/home/standards/language_codes.htm)で説明されています。

Oracle Watchlist Screeningがインストールされている場合、これらのファイルはすでに存在する可能性があります。

ケース管理の公開を正しく動作させるには、ケース管理の管理アプリケーションを使用してケース・ソースをインポートするときに、必ずflags.xmlファイルを上書きします。これは、ケース・ソースではflags.xmlファイルの形式に依存があり、ケース・ソースが定義されたサーバーで行われるのと同じ方法で、フラグが索引付けされ、指定される必要があるからです。インポートの完了後に再度追加される必要のあるサーバー上のflags.xmlファイルに既存の拡張属性がある場合には、ケース・ソースのインポート前にファイルをバックアップすることをお薦めします。

4.1 拡張属性の理解と追加

この項では、様々なタイプの拡張属性と、ケース管理で使用するためにそれらを追加する方法について説明します。

4.1.1 デフォルトの拡張属性

最初のEDQインストールでは、flags.xmlファイルに次の2つの拡張属性(flag)の定義例が含まれています。

<f:flag index="1" label="%escalation" type="boolean" default="false" notnull="true"/>

<f:flag index="2" label="%priority.score" type="number" readonly="true"/>

ノート:

これらのプロパティが各行に表示される順序は、この例とは一致しない場合があります。プロパティの順序は重要ではありません。また、Oracle Watchlist Screeningがインストールされている場合、flags.xmlファイルの内容は異なります。

4.1.2 新規拡張属性の追加

新しい拡張属性を追加するには、flags.xmlファイルで、既存の属性定義の直後に行を追加し、既存の行と同じ構文に従い、各プロパティに次のノートを使用します。

プロパティ 許可される値 ノート

index

整数

ファイルの各エントリに対して一意である必要があります

label

任意

%文字は、UIのラベルがクライアント・ロケールに対するflags.propertiesファイルから取り出す必要があることを示すために使用されます。%文字が使用されていない場合、ラベルは常に(すべての言語で)示されたとおりです。

type

numberbooleanまたはstring

列のデータ型を制御します。

readonly

trueまたはfalse

ケースまたはアラートの編集時に特権ユーザーが拡張属性の値を編集できるかどうかを制御します

notnull

trueまたはfalse

Null値が拡張属性で許可されるかどうかを制御します。これが定義されない場合、Null値は許可されます('false'設定と同じ)。

default

任意の許容される値

特定の値に設定されていない場合、拡張属性のデフォルト値を設定します。

'string'のタイプの拡張属性には80文字の文字制限があります。これよりも長い値は、値として挿入できません。

4.2 データ入力の検証の構成

拡張属性に対しユーザー指定のデータ形式を制限できます。この制限は、ユーザーがケース管理GUIで拡張属性を編集するとき、およびケース管理の管理のワークフロー・エディタで拡張属性に指定可能な値を定義するときにチェックされます。

この制限はケースおよびアラートがプロセスからケース管理に書き込まれるときにはチェックされないので、拡張属性に無効な値を書き込むことができます。無効な値は適切なエラー・メッセージとともにエラーで表示されます。この計画された動作は、不要なジョブの失敗からシステムを保護します。

制限はflags.xmlファイルの一部として定義されます。指定可能な制限には2つのタイプがあります。

  • 事前定義リストは、書き込まれるデータが、指定可能な値を事前定義したリストでチェックされることを意味します。

  • 正規表現は、書き込まれるデータが、正規表現でチェックされることを意味します。

4.2.1 事前定義リストの制限のチェック

拡張属性に入力される値が、指定可能な値の事前定義リストと一致することをチェックするには、XML要素を次の形式で拡張属性(flag)の定義の後に追加します。

<f:restrictions>	
<f:predefined>	
<f:value>first value</f:value>	
<f:value>second value</f:value>	
<f:value>third value</f:value>	
</f:predefined>	
</f:restrictions>	
</f:flag>	

たとえば、次のXMLフラグメントは、'active'および'inactive'の値のみが可能な、カスタムの'Status'拡張属性を定義します。

<f:flag index="6" label="Status" type="string" readonly="false">	
<f:restrictions>	
<f:predefined>	
<f:value>active</f:value>	
<f:value>inactive</f:value>	
</f:predefined>	
</f:restrictions>	
</f:flag>	

拡張属性は、「ケース管理」の「ケースの編集」(または「アラートの編集」)ダイアログに有効な値のリストとともに表示されます。

ヒント:

この場合、ユーザーはStatusフィールドにNull値を指定できます('notnull'条件は設定できなかったため)。

4.2.2 正規表現の制限のチェック

拡張属性に入力される値が、正規表現と一致することをチェックするには、XML要素を次の形式で拡張属性(flag)の定義の後に追加します。

<f:restrictions>	
<f:regex ignorecase="false" matchby="w">	
<f:value></f:value>	
</f:regex>	
</f:restrictions>	

ここで、valueプロパティは正規表現を定義し、ignorecaseおよびmatchbyプロパティは一致方法を定義します。matchby条件の指定可能な値は次のとおりです。

説明

w

WHOLE - すべての値が正規表現と一致する必要があります。

s

STARTS - 値の最初が正規表現と一致する必要があります。

e

ENDS - 値の最後が正規表現と一致する必要があります。

c

CONTAINS - 値に正規表現と一致する文字列が含まれる必要があります。

たとえば、次のXMLフラグメントは、NN-NN-NNN (2桁、ハイフン、2桁、ハイフン、3桁)形式の値のみが可能な、カスタムの'National ID'拡張属性を定義します。

<f:flag index="7" label="National ID" type="string" readonly="false" notnull="true">	
<f:restrictions>	
<f:regex ignorecase="false" matchby="w">	
<f:value>\d{2}-\d{2}-\d{3}</f:value>	
</f:regex>	
</f:restrictions>	
</f:flag>	

次に、ユーザーが正規表現と一致しない値を追加しようとしたときに表示されるエラー・メッセージを示します。

errormessage属性を使用してこのエラー・メッセージをカスタマイズすることもできます。エラー・メッセージとして表示する単純なテキスト文字列を入力することも、パーセント(%)記号で文字列を開始して、アプリケーションによりflags.propertiesファイルでローカライズされた値を探すこともできます。

たとえば、次のXMLフラグメントは、エラーが発生したときに、e1.messageエラー・メッセージをflags.propertiesファイルから取得します。

<f:restrictions><f:regex ignorecase="false" matchby="w" errormessage="%e1.message"><f:value>\d{3}-\d{2}-\d{4}</f:value></f:regex></f:restrictions>

4.3 ケース管理の構成プロパティの理解

この項では、ケース管理の構成に使用されるdirector.propertiesの主要なパラメータを示します。

パラメータ Description0

case.management.fail.on.long.flags

このプロパティは、80文字を超えるフラグ値が生成された場合のケース管理の動作を制御します。このプロパティにtrueを設定すると、そのプロセスはエラーを生成して停止します。falseを設定すると、長いフラグ値が切り捨てられ、警告がログ・ファイルに書き込まれます。このプロパティはデフォルトでfalseに設定されています。

cm.index.queue.limit

このプロパティは、索引キュー制限の最大サイズを制御します。

index.directory

このプロパティでは、Lucene索引ディレクトリの絶対パスを構成できます。デフォルトでは、索引ディレクトリは必ずlocalhomeディレクトリに作成されます。場合によっては、このディレクトリが非常に大きくなる可能性があるため、別の場所に格納することで、ディスク領域を管理しやすくなります。

4.4 ケース管理フィルタの実行のレポート

この付録では、Oracle Enterprise Data Qualityでのケース管理フィルタの実行に関する情報を抽出する方法について説明します。

EDQには、各フィルタ実行の開始および終了時にコールされるトリガー・ポイントが含まれます。フィルタ実行に関する情報はトリガーに渡され、トリガーはJava Message Service (JMS)、Oracle Cloud Infrastructure Streaming Service、Amazon Kinesis Data Streamsなどのストリーミング・サービスに送信できます。

トリガー・パスは次のとおりです:

  • /casemanagement/filter/start
  • /casemanagement/filter/end

これらのパスを受け入れるトリガーの実行関数は、次のように定義されます:

function run(path, id, env, json) {
 ...
}

json引数は、次の属性を含む文字列化されたJSONオブジェクトです:

属性 説明

id

内部フィルタ実行ID

filter

フィルタの文字列表現

type

指定可能な値は、search_filterreportbulk_updatebulk_deleteおよびexportです

xaxis

レポートX軸の文字列表現(レポートの場合のみ存在)

yaxis

レポートY軸の文字列表現(レポートの場合のみ存在)

server

フィルタが実行されたサーバーの名前

userid

フィルタを実行しているユーザーの内部数値ID

user

フィルタを実行しているユーザーの名前

userdisplay

フィルタを実行しているユーザーの表示名

start

フィルタ開始のタイムスタンプ

duration

フィルタ実行時間(ミリ秒) (終了コールの場合のみ存在)

status

フィルタが正常に完了しなかった場合にその理由を示します

sql

フィルタに使用されたSQL文(SQL実行モードのみ)

args

SQLバインド引数の配列

SQL実行のレポート内のargs属性には、SQLテキスト内の'?'プレースホルダを置換するバインド値が含まれます。配列の各エントリには、次が含まれます:

トリガーがフィルタ実行終了レポートをJMS、OCI通知サービス・トピック、OCIストリームおよびKafkaトピックに送信するとします。

addLibrary("oci");
addLibrary("jms");
addLibrary("kafka");
 
var oci    = OCI.create("OCI 1")
var topic  = oci.topic("ocid1.onstopic.oc1.phx.aaaaaaaa....")
var stream = oci.stream("ocid1.stream.oc1.phx.aaaaaaaa....")
 
var props  = config.loadTriggerProperties("jms", "jms\\.properties");
var jms    = JMS.open(Object.assign({}, props, config.loadCredentials("", props)))
var kprops = config.loadTriggerProperties("kafka", "kafka\\.properties");
var kprod  = KAFKA.producer(kprops.topic, kprops)
 
function getPath() {
  return "/casemanagement/filter/(start|end)";
}
 
function run(path, id, env, json) {
  if (path.endsWith("end")) {
    topic.publish("filter done", json)
    stream.publish(null, json)
    jms.send(json)
    kprod.publish(null, json)
  }
}

スクリプト・トリガー・フレームワークは、一般的な問合せに1つのインスタンスを使用し、実行には別のインスタンスを使用します。最初のインスタンスはトリガーされないため、JMS接続などのリソースは必要ありません。このフレームワークは、組込み変数runnableを作成します。この変数は、単一の構成インスタンスではfalseです。リソースを最適化するために、これを次のように使用できます:

var jms = runnable && JMS.open(Object.assign({}, props, config.loadCredentials("", props)))
...
function run(path, id, env, json) {
  ...
  jms && jms.send(json)
}

4.5 ケース管理添付の外部ストレージの構成

EDQ 14.1.2では、ケース管理添付データをファイル・システムまたはクラウド・ストレージに格納する新しいオプションがあります。新しい添付は外部に保存されますが、既存の添付データはデータベース表に残ります。REST APIを使用して、データを外部ストレージに移行したり、外部データをデータベースに戻したりすることもできます。

4.5.1 ファイル・システムでのストレージの構成

ファイル・システムでケース管理ストレージを構成するには、director.propertiesに次を追加します:

case.management.attachment.storage.directory = pathtodirectory

ディレクトリ・パスが絶対パスでない場合、そのディレクトリはローカル・ホーム構成ディレクトリが基準になります。EDQは、格納されるファイルの名前として添付レコードの内部IDを使用します。内部IDは、dn_caseattachmentsレコードのattachment_id列にあります。別の名前を使用してファイルを格納する場合は、次を設定します:

case.management.attachment.storage.entryname = filename

filename値には、次の置換を含めることができます:

置換

${id}

添付の内部ID。これは常に必須です。

${source}

ソース名。ソース名にファイル名として無効な文字を含めることはできません。

${caseid}

関連付けられたdn_caseレコードの内部ID。

例:

case.management.attachment.storage.directory = cmatts

case.management.attachment.storage.entryname = ${source}/${id}

この場合、添付データはローカル・ホーム構成ディレクトリ内のcmattsというディレクトリに格納され、ファイル名はソース名と内部IDから構成されます。

4.5.2 クラウド・ストレージ・プロバイダでのストレージの構成

ファイル・システムでケース管理ストレージを構成するには、director.propertiesに次を追加します:

case.management.attachment.storage.url = baseurl

EDQは、エントリ名をベースURLに追加して完全な添付URLを作成します。エントリ名は、case.management.attachment.storage.entryname値から構成されます。

次のいずれかを使用して、クラウドとの間でアップロードおよびダウンロードするための資格証明を設定できます:

  • case.management.attachment.storage.credentials = stored credentials name
  • case.management.attachment.storage.platform.credentials = true

    case.management.attachment.storage.platform.credentialstrueに設定されている場合、EDQは、コンピュート・インスタンスに関連付けられた資格証明を使用します。EDQは、AWS、OCIおよびGCPのプラットフォーム資格証明をサポートしています。

OCIオブジェクト・ストレージの例

case.management.attachment.storage.url         = https://mytenancy.objectstorage.us-phoenix-1.oci.customer-oci.com/n/mytenancy/b/cmbucket/o/
case.management.attachment.storage.credentials = OCI 1
case.management.attachment.storage.entryname   = cm/${source}/${id}

Amazon S3の例

case.management.attachment.storage.url         = https://cmbucket.s3.eu-west-1.amazonaws.com/cm/
case.management.attachment.storage.credentials = aws1

GCPストレージには、ダウンロードURLとアップロードURLに関する異なるルールがあります。GCPで外部ストレージを構成するには:

case.management.attachment.storage.url    = https://storage.googleapis.com/storage/v1/b/bucketname/o/
case.management.attachment.storage.cloud  = gcp

4.5.3 外部添付ストレージ用のREST API

外部添付ストレージを有効にした場合、既存の添付データはデータベース表に残ります。ケース管理の管理エンドポイントの一部として提供されるREST APIを使用して、既存のレコードを外部ストレージに移行したり、外部データをデータベースに戻したりできます。

外部ストレージとの間での移行

POST http://server:port/edq/cmadmin/migrateattachments

POST http://server:port/edq/cmadmin/unmigrateattachments

ペイロードは、次の属性を含むJSONオブジェクトです:

属性 説明 デフォルト値

start

処理する最初の添付の内部ID。

0

count

処理するレコードの数。

unlimited

batch

1つのデータベース問合せで処理するレコードの数。

10000

移行は非同期で実行されます。コールの結果は、実行に対応するキーを含むJSONオブジェクトです。キーは、実行完了のポーリングに使用できます:

{ "executionkey":"a279513d1ea44b0198094ac31ae68258" }

変換ステータスの取得

GET http://server:port/edq/cmadmin/conversionstatus/EXECUTIONKEY

このコールは、非同期変換のステータスを取得します。URLのEXECUTIONKEYコンポーネントは、前の移行コールから返されるキーです。

結果は、次の属性を持つJSONオブジェクトです:
属性 タイプ 説明

complete

ブール

変換が完了した場合はtrue

failed

ブール

変換中にエラーが発生した場合はtrue

start

文字列

変換が開始したときのタイムスタンプ。

end

文字列

変換が完了したときのタイムスタンプ。

error

文字列

エラー・メッセージ。または、変換が成功した場合はnull

lastid

整数

変換中に処理された最後の添付のID。

processed

整数

処理されたレコードの数。これがゼロの場合、すべてのレコードが処理されたことを意味します。

converted

整数

変換されたレコードの数。

startおよびcount属性を使用すると、複数のアイドル期間にわたって大規模システムの増分移行を実行できます。最初のコールにはstart = 0を、後続のコールにはlastid+1を設定し、適切な時間内にプロセスで実行できるcountを選択します。

4.5.4 一括削除時のパフォーマンスの考慮事項

外部ストレージの使用は、添付のあるユーザー・アクションには影響しません。ただし、ケースおよびアラートを一括削除する場合は、関連付けられている外部アイテムを、それらがファイルであるかクラウド・ストレージ・オブジェクトであるかに関係なく、個別に削除する必要があります。これは、削除の全体的な実行時間に影響する可能性があります。

クラウド・ストレージ・オブジェクトは、複数のコールを同時に実行することで削除されます。1つのバッチで実行される削除の最大数は、10です。これを変更するには、次を設定します:

case.management.attachment.storage.deletebatch = batchsize