IBM FileNet P8, バージョン 5.2.1            

変更プリプロセッサー

変更プリプロセッサーは、ユーザーが実装するサーバー側のアクション・ハンドラーであり、新規のソース・オブジェクトまたは更新されたソース・オブジェクトを、それらが Content Engine データベースで永続化される前に変更するものです。変更プリプロセッサー・ハンドラーは、クラス定義に関連付けます。クライアントがそのクラスのオブジェクトを保存すると、関連付けられたハンドラーが起動されます。

変更プリプロセッサーは、非同期または同期イベント・アクション・ハンドラーでは実行することが困難または不可能であるソース・オブジェクトの修正をできるようにします。例えば、作成時のみ設定可能な (SOOC) プロパティーは永続化された後に変更できないため、SOOC プロパティーを変更するには、変更プリプロセッサーを使用する必要があります。 変更プリプロセッサーとイベント・アクション・ハンドラーの機能の比較については、「アクション・ハンドラー: 制約事項および最適な方法」を参照してください。

変更プリプロセッサーには、以下の特性があります。

実装のガイドライン

次のメソッドを ChangePreprocessor インターフェースで実装します。

boolean preprocessObjectChange(com.filenet.api.core.IndependentlyPersistableObject sourceObj)

このメソッドを実装する際は、以下の点を考慮してください。

  • ソース・オブジェクトの保留中のアクションの配列を取得して、条件付き処理を実行できます。PendingAction オブジェクトは、クライアントが送信したがサーバーがまだ実行していない、ソース・オブジェクトに対して意図された変更 (コンテンツの移動、更新、チェックアウトの各アクションなど) を表します。保留中のアクションの配列を反復処理することにより、クライアントが送信したアクションに基づいて、変更プリプロセッサーがソース・オブジェクト・プロパティーを更新するタイミングを制御できます。コード例については、「変更プリプロセッサー・ハンドラーの作成」を参照してください。
  • ソース・オブジェクトのプロパティー・コレクションを取得できます。プロパティー・コレクションは、ソース・オブジェクトの現在の状態と、クライアントからのまだ永続化されていない変更を反映します。

    サーバーへの作成要求の場合、プロパティー・コレクション内の項目は少なく、クライアントが指定したプロパティー値、クライアントが設定していないプロパティーに関連付けられたデフォルト値、およびオブジェクト・タイプによって決定される他のいくつかのプロパティーのみが含まれています。

    サーバーへの更新要求および削除要求の場合、コレクションには、クライアントによって変更されたプロパティーとマージされたオブジェクトで現在定義されているすべてのプロパティーが含まれます。

    変更プリプロセッサー・ハンドラーは、サーバーへの要求のタイプ (作成、更新、削除) に関係なく実行されるため、ソース・オブジェクトのプロパティー・コレクションから入手できるすべてのプロパティーが信頼できるとは限りません。そのため、変更プリプロセッサーの実装では、プロパティーの取得を試みる前に、IsPropertyPresent メソッドを呼び出して、そのプロパティーがコレクション内にあることを確認することをお勧めします。

  • 現在のバージョンをチェックアウトすると、副次作用として予約オブジェクトがソース・オブジェクトとして渡されます。この場合、プリプロセッサーに渡されたプロパティー・コレクションには、アクションとともに送信された予約プロパティーと、発信元のソース・オブジェクトからの copy-to-reservation プロパティーが含まれます。そのため、プロパティー定義で CopytoReservation プロパティーが false に設定されているプロパティー・インスタンスは、予約オブジェクトのコレクションにコピーされません。例えば、MimeType プロパティーは、プロパティー定義の制約のためにコレクションにコピーできません。
  • プリプロセッサーを使用してプロパティー・コレクションを変更した場合、true を返して、コレクションをサーバーで永続化してください。逆に false を返すと、プロパティー・コレクションへの変更は失われます (永続化しません)。
  • クラス階層内でプリプロセッサーのチェーンが再帰的に実行される場合、チェーン内のプリプロセッサーは、前に開始されて true を返したプリプロセッサーから適用されたプロパティー更新を参照できます。プロパティー・コレクションは、すべてのプリプロセッサーが開始されるまでは永続化されません。

許可される操作

  • ソース・オブジェクトのプロパティー・コレクションへの更新を実装できます。実装では、fetchProperty を使用して、オブジェクト値プロパティー (OVP) のプロパティー値に基づいて条件付き処理を実行できます。
  • コレクションからプロパティーを削除できます。偽装プロパティー (つまりクラス定義では定義されておらず、クライアントとプリプロセッサーの間でのみ意味を持つプロパティー) を削除する必要があることに注意してください。偽装プロパティーを削除しない場合、Content Engine は例外をスローします。
  • 変更プリプロセッサーは保留中のアクション処理の前に開始されるため、ソース・オブジェクトの保留中のアクションの配列を取得できます。

許可されない操作

以下の操作は、ソース・オブジェクトの永続化に悪影響を与えるので、開始できません。

  • fetchProperties()checkout()save()refresh()addPendingAction()clearPendingActions()delete()setUpdateSequenceNumber() などのオブジェクトを変更する IndependentlyPersistableObject のメソッド。
  • setCaptureSource()accessContentStream() などのコンテンツ・アクセス・メソッド。

セットアップ要件

変更プリプロセッサーをセットアップするには、以下のようにします。

  1. ChangePreprocessor インターフェースを実装します。
  2. CmChangePreprocessorAction オブジェクトを作成します。このオブジェクトには、実装された ChangePreprocessor インターフェースを設定するためのプロパティーが含まれています。IsEnabled プロパティーも含まれていて、これにより、管理者は、プリプロセッサーがクラス階層内のどこで参照されているかに関係なく、システム・スコープ単位でプリプロセッサーを無効にできます。
  3. CmChangePreprocessorDefinition オブジェクトを作成します。このオブジェクトには、実装された ChangePreprocessorAction オブジェクトを設定するためのプロパティーが含まれています。IsEnabled プロパティーも含まれていて、これにより、管理者は、クラス・スコープ単位でプリプロセッサーを無効にできます。
  4. CmChangePreprocessorDefinitionList オブジェクトを作成し、それに CmChangePreprocessorDefinition オブジェクトを追加します。
  5. 変更プリプロセッサーを設定するクラス定義を表す SubscribableClassDefinition オブジェクトを取得します。
  6. SubscribableClassDefinition オブジェクトで CmChangePreprocessorDefinitionList を設定し、それを保存します。

ObjectStore.CmChangePreprocessorActions プロパティーを持つすべての CmChangePreprocessorAction オブジェクトを取得できます。SubscribableClassDefinition.ChangePreprocessorDefinitions プロパティーを持つすべての CmChangePreprocessorDefinition オブジェクトを取得できます。

セットアップ操作および取得操作のコード例については、「変更プリプロセッサーの操作」を参照してください。



最終更新日: 2015 年 10 月
changepreprocessor_concepts.htm

© Copyright IBM Corp. 2015.