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のドキュメントを参照してください。

MSGraphEmailSourceContext

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

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

プロパティ タイプ 説明
account String 現在処理されている電子メール・アカウントの名前。
attachmentFilename String 現在処理されている電子メール・メッセージ添付のファイル名。
folder oracle.odc.importprocessor.email.ms.graph.api.Node 現在処理されている電子メール・フォルダ。
message com.microsoft.graph.models.Message 現在処理されている電子メール・メッセージ。
bodyText String 電子メール・メッセージ本文。
attachmentList List 電子メール・メッセージへの添付のリスト。

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;
}