5 インポート・プロセッサ・スクリプトの作成

この章では、インポート・プロセッサ・スクリプトの作成について説明します。

インポート・プロセッサ用のスクリプトを開発すると、様々な機能を実行できます。一般的なタスクには、次のようなものがあります。

  • 特定のイメージ・ファイルのインポートをスキップする

  • キャプチャのバッチ・プロパティを変更する

  • バッチのインポートをスキップする

  • インポート時にページ・レベルのメタデータ値を追加する

  • インポート後にイメージを別のフォルダに移動する

Captureでは、インポート・プロセッサ・スクリプトを作成してインポート・プロセスをカスタマイズできます。詳細は、『Oracle WebCenter Enterprise Captureのマネージング』を参照してください。

この章では、次の内容を説明します。

インポート・プロセッサのイベント

インポート・プロセッサ・スクリプトは、特定のインポート・プロセッサ・イベントの動作をカスタマイズできるJavaScriptモジュールです。

この項では、次のインポート・プロセッサ・イベントについて説明します:

preProcess

preProcessイベントは、インポート・ソースの前処理の前に発生します。初期化コードをここで実行できます。ctxパラメータでcancelプロパティをTrueに設定すると、この処理を取り消すことができます。

構文 パラメータ

public void preProcess(ImportProcessorContext ctx);

ImportProcessorContext ctx

process

processイベントは、インポート・プロセスの開始を通知します。

構文 パラメータ

public process(ImportProcessorContext ctx);

ImportProcessorContext ctx

postProcess

postProcessイベントは、インポート・ソースの処理が完了した後に発生します。

構文 パラメータ

public void postProcess(ImportProcessorContext ctx);

ImportProcessorContext ctx

preCreateBatch

preCreateBatchイベントは、新しいバッチが作成される前に発生します。ctxパラメータでcancelプロパティをTrueに設定すると、バッチ作成を取り消すことができます。

構文 パラメータ

public void preCreateBatch(ImportProcessorContext ctx);

ImportProcessorContext ctx

postCreateBatch

postCreateBatchイベントは、バッチの作成直後で、ドキュメントが作成される前に発生します。

構文 パラメータ

public void postCreateBatch(ImportProcessorContext ctx);

ImportProcessorContext ctx

preCreateDocument

preCreateDocumentイベントは、新しいドキュメントが作成される前に発生します。ctxパラメータでcancelプロパティをTrueに設定すると、ドキュメント作成を取り消すことができます。

構文 パラメータ

public void preCreateDocument(ImportProcessorContext ctx);

ImportProcessorContext ctx

postCreateDocument

postCreateDocumentイベントは、新しいドキュメントが作成された後に発生します。

構文 パラメータ

public void postCreateDocument(ImportProcessorContext ctx);

ImportProcessorContext ctx

preImportFile

preImportFileイベントは、ファイルがインポートされる前に発生します。ctxパラメータでcancelプロパティをTrueに設定すると、ファイルのインポートを取り消すことができます。

構文 パラメータ

public void preImportFile(ImportProcessorContext ctx);

ImportProcessorContext ctx

postImportFile

postImportFileイベントは、ファイルがインポートされた後に発生します。

構文 パラメータ

public void postImportFile(ImportProcessorContext ctx);

ImportProcessorContext ctx

preRelease

preReleaseイベントは、バッチがリリースされる前に発生します。ctxパラメータでcancelプロパティをTrueに設定すると、バッチのリリースを取り消すことができます。

構文 パラメータ

public void preRelease(ImportProcessorContext ctx);

ImportProcessorContext ctx

postRelease

postReleaseイベントは、バッチがリリースされた後に発生します。

構文 パラメータ

public void postRelease(ImportProcessorContext ctx);

ImportProcessorContext ctx

preDatabaseSearch

preDatabaseSearchイベントは、データベース参照の前に発生します。ctxパラメータでcancelDBSearchプロパティをTrueに設定すると、データベース検索を取り消すことができます。

構文 パラメータ

public void preDatabaseSearch(ImportProcessorContext ctx);

ImportProcessorContext ctx

processDatabaseSearchResults

processDatabaseSearchResultsイベントは、データベース参照によって検索結果が返された後に発生します。

構文 パラメータ

public void processDatabaseSearchResults(ImportProcessorContext ctx);

ImportProcessorContext ctx

電子メール・ソースのイベント

この項では、次の電子メール・ソース・イベントについて説明します:

ノート:

電子メールのインポート・ソースをMicrosoft Exchange Webサービスとして選択する場合は、スクリプト内で対応する(getExchange)メソッドを呼び出す必要があります。導入された

新しいメソッドの詳細は、ImportProcessorContextクラスおよびEmailSourceContextクラスを参照してください。

deleteMessage

deleteMessageイベントは、電子メール・メッセージ後処理ステップの中で、電子メール・メッセージが削除される直前に発生します。電子メール・メッセージが削除されないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void deleteMessage(ImportProcessorContext ctx, EmailSourceContext emailCtx);

ImportProcessorContext ctx

EmailSourceContext emailCtx

moveMessage

moveMessageイベントは、電子メール・メッセージ後処理ステップの中で、電子メール・メッセージが電子メール・フォルダに移動される直前に発生します。電子メール・メッセージが移動されないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void moveMessage(ImportProcessorContext ctx, EmailSourceContext emailCtx);

ImportProcessorContext ctx

EmailSourceContext emailCtx

newAttachment

newAttachmentイベントは、新しい電子メール添付が処理される直前に発生します。添付がインポートされないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void newAttachment(ImportProcessorContext ctx, EmailSourceContext emailCtx);

ImportProcessorContext ctx

EmailSourceContext emailCtx

newMessage

newMessageは、新しい電子メール・メッセージが処理される直前に発生します。電子メール・メッセージがインポートされないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void newMessage(ImportProcessorContext ctx, EmailSourceContext emailCtx);

ImportProcessorContext ctx

EmailSourceContext emailCtx

フォルダ・ソースのイベント

この項では、次のフォルダ・ソース・イベントについて説明します:

deleteDocumentFile

deleteDocumentFileイベントは、フォルダ後処理ステップの中で、フォルダからファイルが削除される直前に発生します。ドキュメント・ファイルが削除されないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void deleteDocumentFile(ImportProcessorContext ctx, FolderSourceContext folderCtx);

ImportProcessorContext ctx

FolderSourceContext folderCtx

newFolder

newFolderイベントは、新しいフォルダが処理される直前に発生します。このフォルダを処理対象から除外するには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void newFolder(ImportProcessorContext ctx, FolderSourceContext folderCtx);

ImportProcessorContext ctx

FolderSourceContext folderCtx

renameDocumentFile

renameDocumentFileイベントは、フォルダ後処理ステップの中で、フォルダ内のファイルの名前が変更される直前に発生します。ドキュメント・ファイルの名前が変更されないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void renameDocumentFile(ImportProcessorContext ctx, FolderSourceContext folderCtx);

ImportProcessorContext ctx

FolderSourceContext folderCtx

リスト・ファイル・ソースのイベント

この項では、次のリスト・ファイル・ソース・イベントについて説明します:

deleteListFile

deleteListFileイベントは、リスト・ファイル後処理ステップの中で、リスト・ファイルが削除される直前に発生します。リスト・ファイルが削除されないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void deleteListFile(ImportProcessorContext ctx, ListFileSourceContext listFileCtx);

ImportProcessorContext ctx

ListFileSourceContext listFileCtx

newFolder

newFolderイベントは、リスト・ファイルが格納されている新しいフォルダが処理される直前に発生します。フォルダを処理対象から除外するには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void newFolder(ImportProcessorContext ctx, ListFileSourceContext listFileCtx);

ImportProcessorContext ctx

ListFileSourceContext listFileCtx

newListFile

newListFileイベントは、新しいリスト・ファイルが処理される直前に発生します。リスト・ファイルが処理されないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void newListFile(ImportProcessorContext ctx, ListFileSourceContext listFileCtx);

ImportProcessorContext ctx

ListFileSourceContext listFileCtx

newListFileLine

newListFileLineイベントは、リスト・ファイル内の新しい行が処理される直前に発生します。リスト・ファイル行が処理されないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void newListFileLine(ImportProcessorContext ctx, ListFileSourceContext listFileCtx);

ImportProcessorContext ctx

ListFileSourceContext listFileCtx

renameListFile

renameListFileイベントは、リスト・ファイル後処理ステップの中で、リスト・ファイルの名前が変更される直前に発生します。リスト・ファイルの名前が変更されないようにするには、ctxパラメータでcancelプロパティをTrueに設定します。

構文 パラメータ

public void renameListFile(ImportProcessorContext ctx, ListFileSourceContext listFileCtx);

ImportProcessorContext ctx

ListFileSourceContext listFileCtx

インポート・プロセッサのクラス

この項では、次のインポート・プロセッサ・クラスについて説明します:

インポート・プロセッサ・スクリプトの設計に使用できる次のイベント・クラスに加えて、認識プロセッサおよびインポート・プロセッサに関連する共通クラスがいくつかあります。これらの共通クラスの詳細は、「共通キャプチャ・クラス」を参照してください。

EmailSourceContext

EmailSourceContextクラスには、電子メール・ソースの処理で使用されるすべてのクラスが含まれます。

プロパティ タイプ 説明

account

String

現在処理されている電子メール・アカウントの名前。

attachmentFilename

String

現在処理されている電子メール・メッセージ添付のファイル名。

標準IMAP接続では、次のプロパティを使用します:

folder

Folder

現在処理されている電子メール・フォルダ。

message

Message

現在処理されている電子メール・メッセージ。

EWS接続では、次のプロパティを使用します:

getExchangeMessage

microsoft.exchange.webservices.data.core.service.item.EmailMessage

現在処理されている電子メール・メッセージ。

getExchangeFolder

microsoft.exchange.webservices.data.core.service.folder.Folder

現在処理されている電子メール・フォルダ。

FolderおよびMessageクラス定義の詳細は、Javamail APIのドキュメントを参照してください。

FolderSourceContext

FolderSourceContextクラスには、フォルダ・ソースの処理で使用されるすべてのクラスが含まれます。

プロパティ タイプ 説明

folderName

String

現在処理されているディレクトリの名前。

documentFilename

String

現在処理されているファイルの名前。

renamedDocumentFilename

String

後処理ステップでファイルへの接頭辞追加または拡張子の変更が指定されている場合は、このプロパティが変更後のファイル名を示します。

ImportJob

インポート・ジョブは、バッチをインポート・ソース(ファイル・システム・フォルダ、区切り形式リスト・ファイル、電子メール・サーバーの受信トレイ/フォルダなど)からインポートするよう、キャプチャ・ワークスペース内で構成されます。

プロパティ タイプ 説明

jobID

String

ジョブをシステム内で一意に識別する値。

workspaceID

String

ジョブが属するワークスペースの識別子。

jobName

String

人間が判読可能なジョブ名。

dbSearchID

String

ジョブの処理時に使用するデータベース検索の識別子。

dbSearchFieldID

String

ジョブの処理時に使用するデータベース検索フィールドの識別子。

imageDownsample

Integer

イメージのサンプリング方法を決定します:

  • 0: なし(イメージ形式を維持)

  • 1 – 色を8ビット・グレースケールにダウンサンプル。

  • 2 – 色またはグレースケールを白黒にダウンサンプル。

jpegQuality

Integer

JPEG画質(0から99)。

batchPrefix

String

バッチ名の作成時に使用するバッチ接頭辞。

defaultBatchStatusID

String

このジョブで作成されたバッチに関連付けるバッチ・ステータスの識別子。

defaultPriority

Integer

バッチに割り当てられるデフォルトの優先度(0から10)。

defaultDocumentTypeID

String

このジョブで作成されたドキュメントのデフォルトのドキュメント・プロファイル。

searchResultOption

Integer

データベース参照で複数の結果が返されたときの処理方法を決定します。

  • 0: 最初のレコードを使用する

  • 1: 結果を無視する(フィールドに値を移入しない)

scriptID

String

このジョブに使用するスクリプトの一意識別子。

importFrequency

Integer

ジョブで処理する作業をポーリングする頻度を指定する値(秒単位)。次の値を指定できます。

  • 0 – 非アクティブ

  • 30 – 30秒ごと

  • 60 – 1分ごと

  • 300 – 5分ごと

  • 900 – 15分ごと

  • 1800 – 30分ごと

  • 3600 – 1時間ごと

  • -1 – 毎日(時刻を指定)

hour

Integer

importFrequencyが毎日に設定されている場合、ここで時刻(時)を指定します。

minute

Integer

importFrequencyが毎日に設定されている場合、ここで時刻(分)を指定します。

lastCheck

Date

ジョブが処理のために最後にチェックされた日付または時刻。これは、ジョブで処理する作業がポーリングされた後にインポート・ジョブ・スケジューラによって更新されます。

fieldMappings

Map<String, FieldMappingInfo>

ソース・メタデータ・フィールドをインポートするためにキャプチャのフィールドをマッピングする値のセット。

importSourceClassName

String

このジョブのインポート・ソースを実装するJavaクラスの名前。

batchProcessorClassName

String

バッチがリリースされるときの処理に使用されるクラスの名前。この値がnullの場合は、バッチ・ロックが破棄されてバッチがREADY状態になります。

batchProcessorJobID

String

バッチ・プロセッサ・ジョブの一意の識別子。この値がnullの場合は、プロセッサがジョブをサポートしていないか、バッチがREADY状態に移行しようとしています。

imageFailureAction

Integer

無効なイメージが検出されたときに実行されるアクションを指定します:

  • 0 – バッチを強制終了する

  • 1 – アイテムをスキップする

locale

Locale

リスト・ファイル・ソースのロケールを指定します。

defaultDateFormat

String

リスト・ファイル・ソース内の日付のデフォルトの形式を指定します。

description

String

このジョブの説明。

encoding

String

リスト・ファイル・ソースのファイル・エンコーディングを指定します。

isJobOnline

Boolean

このジョブを処理するかどうかを示します。

preserveImageFiles

Boolean

Trueに設定すると、インポート中にイメージ・ファイルが変更されないようにします。

ImportProcessorContext

ImportProcessorContextクラスには、処理されるジョブに関連するプロパティが格納されます。このクラスのインスタンスが処理開始前に作成され、処理の様々なステージでインポート・ソースに渡されます。

プロパティ タイプ 説明

cancel

Boolean

このブール値がTrueに設定されている場合、実行される操作が取り消されます。

cancelDBSearch

Boolean

このブール値がTrueに設定されている場合、データベース参照が取り消されます。

dBSearchResults

DBSearchResults

データベース参照の結果が含まれます。

sourceName

String

現在のインポート・ジョブで使用するように構成されているインポート・ソースの名前。

logger

Logger

追加エントリのログ記録に使用できるjava.util.logging.Loggerのインスタンス。

importCancelAction

Integer

このプロパティは、スクリプトでpreImportFileイベントでcancelプロパティがTrueに設定された場合に実行されるアクションを指定します。値は次のいずれかの定数に設定できます:
  • CANCEL_ACTION_SKIP = 0 — バッチへのファイルのインポートをスキップする

  • CANCEL_ACTION_ABORT = 1 — バッチ全体を中断する

importJob

ImportJob

処理中の現在のインポート・ジョブ。

batchLock

BatchLockEntity

新しいバッチの作成後、バッチのバッチ・ロック・エンティティが格納されます。

importSourceFile

String

現在処理されているファイルの名前。

documentEntity

DocumentEntity

現在処理されているファイルに関連付けられているドキュメント・エンティティ。

documentPageEntity

DocumentPageEntity

現在処理されているファイルに関連付けられているドキュメント・ページ・エンティティ。

lastMultiPageTiffNumber

Integer

処理中の複数ページTIFFファイルの現在のページ番号が格納されます。

workspaceEntity

CaptureWorkspaceEntity

現在のバッチに関連付けられているワークスペース・エンティティ。

batchManager

BatchManagerSession

バッチ操作に使用されるバッチ・マネージャ・オブジェクト。

isExchangeMail

Boolean

現在の電子メール・インポート・ジョブでExchange WebサービスAPIが使用されているかどうかを確認します。

ListFileSourceContext

ListFileSourceContextクラスには、リスト・ファイル・ソースの処理で使用されるすべてのクラスが含まれます。

プロパティ タイプ 説明

folderName

String

現在処理されているフォルダの名前。

listFilename

String

現在処理されているリスト・ファイルの名前。

listFileLine

String

リスト・ファイル内の現在処理されている行の内容。

documentFilename

String

リスト・ファイルの現在の行から現在処理されているファイルの名前。

renamedListFilename

String

後処理ステップでリスト・ファイルへの接頭辞追加または拡張子の変更が指定されている場合は、このプロパティが変更後のファイル名を示します。

インポート・プロセッサ・スクリプトのサンプル

この項では、次のインポート・プロセッサ・スクリプト・サンプルについて説明します:

インポート・プロセッサ・スクリプトのサンプル 1

次に示すサンプル・スクリプトでは、各ドキュメントのタイトルをインポートされるファイルの名前に設定します。ドキュメントが後でコミットされたときに、そのドキュメント・タイトルを出力フィールドにマッピングできるようになります。

importClass(java.io.File);
 
function preCreateDocument(event) { // ImportProcessorContext
    var document;   // DocumentEntity
    var sourceFile; // File
 
    sourceFile = new File(event.getImportSourceFile());
    document = event.getDocumentEntity();
 
    // Set the document title to be the name of the source file
    document.setDocumentTitle(sourceFile.getName());    
}
インポート・プロセッサ・スクリプトのサンプル 2

次のスクリプト・サンプルは、preCreateDocumentイベントを使用して、インポートされるファイルのベース・ファイル名を取得し、その名前をメタデータ・フィールドに割り当てます。さらに、このスクリプトは、メタデータ・フィールドの定義を名前で検索する方法、IndexValueを検索して作成する方法、およびIndexValueの値を設定する方法も示します。

function preCreateDocument(ctx) {
    // Get the base name of the file being imported.
    var sourceFile = new java.io.File(ctx.getImportSourceFile());
    var baseFileName = sourceFile.getName();

    // Strip off any file extension.
    var dotPos = baseFileName.lastIndexOf('.');
    if (dotPos > -1)
        baseFileName = baseFileName.substring(0, dotPos);

    // Update the "File Name" metadata field with the base name of the file.
    updateIndex(ctx, "File Name", baseFileName);
}

// Update a metadata field
function updateIndex(ctx, indexName, commitValue) {
    var doc = ctx.getDocumentEntity();
    var workspace = ctx.getWorkspaceEntity();
    
    // Locate the index definition object by the index name.
    var indexDef = findIndexDefinitionByName(workspace, indexName);
    if (indexDef != null) {
        // Get the ID for the index field.
        var indexID = indexDef.getIndexFieldID();
        // Get the index value object for the given document and index ID.
        var indexValue = getIndexValue(doc, indexID);
        // Set the commit value for the index field.
        indexValue.setFieldValue(commitValue);
    }
}

// Search the workspace to find the index definition by name
function findIndexDefinitionByName(workspace, indexName) {
    var indexDefs = workspace.getIndexDefinitions();
    var size = indexDefs.size();
    var foundIndexDef = null;
    for (var i = 0; i < size; i++) {
        var indexDef = indexDefs.get(i);
        if (indexName.equals(indexDef.getFieldName())) {
            // An index by this name was found.
            foundIndexDef = indexDef;
            break;
        }
    }
    return foundIndexDef;
}

// Search the index values of the document for an IndexValue object with the given ID.
// If one is found, return it; Otherwise, create one and return it.
function getIndexValue(doc, indexDefID) {
    // Look through all existing document indexes to see if our index is present.
    var indexes = doc.getIndexes();
    var size = indexes.size();
    var foundIndexValue = null;
    for (var i = 0; i < size; i++) {
        var indexValue = indexes.get(i);
        if (indexDefID.equals(indexValue.getFieldID())) {
            // An index by this ID was found.
            foundIndexValue = indexValue;
            break;
        }
    }

    if (foundIndexValue == null) {
        // The index value wasn't found, so create one with blank values.
        foundIndexValue = new Packages.oracle.odc.data.IndexValue(indexDefID, "", "");
        // Add it to the document's index collection.
        indexes.add(foundIndexValue);
    }

    // Return the IndexValue object.
    return foundIndexValue;
}