リカバリー bin
Content Engine API はリカバリー bin をサポートするため、クライアント・アプリケーションで削除とリカバリーの操作を実装できます。このような操作は通常、グラフィカル・ユーザー・インターフェースで実装されます。このインターフェースを使用して、ユーザーは、オブジェクトをごみ箱にドラッグしたり、誤って削除したオブジェクトをリストアしたり、ごみ箱を空にしてオブジェクトを永久に削除したりします。Content Engine API のレベルでは、削除されたオブジェクトのコンテナーはリカバリー bin で、削除されたコンテニーはリカバリー・アイテムです。
リカバリー bin は、CmRecoveryBin クラスで表されます。通常はユーザーごとに 1 つずつ、複数のリカバリー bin を作成できます。 リカバリー bin に入れられたオブジェクトは CmRecoveryItem クラスによって表され、同じリカバリー bin 内のすべての削除済みオブジェクトは CmRecoveryItemSet によって表されます。
オブジェクトをリカバリー bin に入れるアクションを実行すると、オブジェクトに削除のマークが付けられます。というのは、サーバーはオブジェクトに削除のフラグを立てますが、そのオブジェクトをオブジェクト・ストア・データベースで保持するからです。削除のマークを付けられたオブジェクトは、削除のマークを解除できる可能性があるため、リカバリー可能なオブジェクトと呼ばれます。つまり、オブジェクトをリカバリー bin から削除して以前の状態にリストアすることができます。
リカバリー・アイテムのアクションは消去です。消去により、アイテムをオブジェクト・ストア・データベースから削除します。 消去は、任意の IndependentlyPersistableObject オブジェクトで削除メソッドを呼び出すのと同じ結果になります。この場合、削除されたオブジェクトはリカバリー不能になります。
この機能に関連付けられているアクション (削除のマーキング、リカバリー、および消去) は、MarkForDeleteEvent、RecoveryEvent、DeletionEvent メソッドをトリガーします。詳細については、「サブスクライブ可能イベントと監査可能イベント」を参照してください。
コードの例については、「リカバリー bin の操作」を参照してください。
オブジェクト・サポート
このリリースでは、VersionSeries および CustomObject クラスのインスタンスに明示的に削除のマークを付けることができます。これらのクラスには、markForDeletion メソッドが含まれています。このメソッドはサーバーにオブジェクトの MarkedforDeletion プロパティーを true に設定するよう指示します。
削除のマーキングのアクションは、保留、保存、またはセキュリティー制約など、オブジェクトに適用される可能性がある削除防止メカニズムに制約されます。
カスケード関係
オブジェクト値プロパティー (OVP) を含むオブジェクトへの削除のマーキングは、OVP で設定されている DeletionAction プロパティーによって決定されるように、OVP によって参照されている特定のオブジェクトに連鎖的な影響を与えます。DeletionAction プロパティーには、以下のいずれかの値を指定できます。
- CASCADE: ある OVP をホストしているオブジェクトが削除されると、その OVP によって参照されるすべてのオブジェクトも削除されます。
- PREVENT: ある OVP に値が指定されている場合、その OVP が参照するすべてのオブジェクトが先に削除されるまで、ホストしているオブジェクトの削除は実行されません。
- NONE: ある OVP をホストしているオブジェクトが削除されると、その OVP は OVP が参照するオブジェクトの削除を行わず、ホストしているオブジェクトの削除を防ぐこともしません。
VersionSeries または CustomObject に削除のマークが付けられ、DeletionAction が CASCADE に設定された OVP がオブジェクトに含まれる場合、サーバーはその OVP によって参照されている各オブジェクトの CmIsMarkedforDeletion プロパティーを設定します。サーバーは、削除のマークを付けられた元のオブジェクト (VersionSeries または CustomObject) を表すために CmRecoveryItem オブジェクトも作成し、連鎖的に削除されたオブジェクトを更新して同じ CmRecoveryItem オブジェクトを指すようにします。
VersionSeries または CustomObject に削除のマークが付けられた場合、サーバーは、カスケード・ディスカバリー・プロセスを実行して、OVP によって参照されているオブジェクトが削除のマーク付けに適格であるかどうかを判別します。カスケード関係には以下の制限が適用されます。
- 参照されているオブジェクトが別のオブジェクト・ストア内に存在する場合、削除のマーキングはそのオブジェクトに伝搬しません。
- 参照されているオブジェクトが複数のバージョンを持つドキュメントである場合、削除のマーキングはそのオブジェクトに伝搬しません。ただし、そのドキュメントがバージョン・シリーズ内の唯一のバージョンである場合は、バージョン・シリーズに削除のマークが付けられます。
- 参照されているオブジェクトが以前に別の削除のマーキング操作によって削除のマークを付けられていた場合、その操作はそのオブジェクトに伝搬しません。同様に、VersionSeries または CustomObject のリカバリーは、参照されているオブジェクトに伝搬しません。
- 参照されているアイテムにセキュリティー制約 (不十分なユーザー権限など) がある場合、削除のマーキングは失敗します。 例えば、ドキュメントの Annotations プロパティーに削除アクションが PREVENT で指定されている場合、ドキュメントに削除のマークを付けようとすると失敗します。アノテーションへの OVP の参照が解除されるか、参照されているアノテーションが削除されるまで、ドキュメントに削除のマークを付けることはできません。
削除のマーキング操作に加えて、カスケード関係は、リカバリーと消去の操作にも適用されます。ただし、リカバリーに関しては、OVP によって参照されているオブジェクトに対して、サーバーはカスケード・ディスカバリー・プロセスを実行しません。
コンテナー
フォルダーにファイリングされたオブジェクトに削除のマークが付けられた場合、サーバーは、削除のマークを付けられたオブジェクトによって参照されているすべての関係オブジェクトのコンテナー名を変更します。この操作は、同じコンテナー名を使用する同一フォルダーにファイリングされる新規オブジェクトとの競合を防ぐために行われます。このオブジェクトが後でリストアされる場合、サーバーは、コンテナー名を (オブジェクトに削除のマークが付けられる前の) 元の値に変更しようとします。 命名の衝突が検出された場合、オブジェクトのコンテナー名には、固有の名前になるように自動的に接尾部が付けられます。詳細については、ContainmentName プロパティーを参照してください。
権限
オブジェクトの削除と同様に、削除のマーキングには、DELETE 権限が必要です。オブジェクトに削除のマークを付けるユーザーは、結果として作成されるリカバリー・アイテムを消去することもできます。消去するには、削除のマークを付けられた元のオブジェクトに対する DELETE 権限が必要であるためです。 アイテムのリカバリーには、削除のマークを付けられたオブジェクトではなく、CmRecoveryItem オブジェクトに対する DELETE 権限が必要です。 デフォルトでは、リカバリー bin 内の一連の CmRecoveryItem オブジェクトは、それらを収容する CmRecoveryBin オブジェクトからセキュリティーを継承します。 詳しくは、「アクションを実行するために必要なアクセス権 (Access rights required to take actions)」を参照してください。
リカバリー可能なオブジェクトのアクセス
リカバリー可能なオブジェクトは、リカバリー bin のコンテキストの外部にある大半のユーザーからはアクセス不能です。 つまり、標準のアクセス権を持つユーザーは、リカバリー可能なオブジェクトのリストアまたは消去のためにのみ、リカバリー bin およびリカバリー・アイテムを操作できます。 特別な権限を付与されない限り、ユーザーは、リカバリー可能なオブジェクトの取得または照会を行うことはできません。 fetchObject または Factory メソッドを使用する取得は、E_OBJECT_NOT_FOUND エラーとなります。 照会の場合、リカバリー可能なオブジェクトは結果に示されません。
リカバリー可能なオブジェクトに対する、より高いレベルのアクセス権を必要とするユーザーには、オブジェクト・ストアに対するアクセス権 VIEW_RECOVERABLE_OBJECTS を付与することができます。 この特別な権限により、ユーザーは、オブジェクトを変更するためにユーザーに付与される標準の権限に従い、すべてのリカバリー可能なオブジェクトの取得または照会のほか、リカバリー可能なオブジェクトの変更を行えます。 リカバリー可能なオブジェクトの変更の例外は、バージョン管理されているドキュメントに適用されます。 VIEW_RECOVERABLE_OBJECTS 権限を持つユーザーは、リカバリー可能なドキュメントのバージョンをチェックアウトすることはできません。
VIEW_RECOVERABLE_OBJECTS 権限を付与する 1 つのユース・ケースは、証拠開示手続きです。この場合、ユーザーには、訴訟のシナリオに適用されるすべてのオブジェクトを検出して保持する責任があります。例えば、訴訟の基準に基づいてドキュメントを照会すると、削除のマークを付けられたドキュメントが示される場合があります。 証拠開示手続きを行うユーザーは、削除のマークを付けられているものを含めて、すべてのドキュメントを保留します。保留中のリカバリー可能なオブジェクトを消去することはできません。 同様に、VIEW_RECOVERABLE_OBJECTS 権限を持つユーザーが、保存を適用するか、リカバリー可能なオブジェクトに対する所有者の DELETE 権限を拒否する場合、それらのリカバリー可能なオブジェクトを消去することはできません。
セキュリティー・プロキシー
ドキュメントおよびカスタム・オブジェクトは、他のオブジェクトのセキュリティー・プロキシーとしての役割を果たすことができます。セキュリティー・プロキシー・オブジェクトに削除のマークが付けられた場合、サーバーは、引き続き、セキュリティー・プロキシーの許可が子オブジェクトによって継承されることを許可します。例えば、DocA が DocB のセキュリティー・プロキシーであり、DocA に削除のマークが付けられた場合、DocB は引き続き DocA からセキュリティーを継承しますが、標準のアクセス権を持つユーザーは DocA を照会または取得することはできません。オブジェクト・ストアに対する VIEW_RECOVERABLE_OBJECTS 権限を持つユーザーのみが DocA にアクセスできます。
削除のマークを付けられたオブジェクトは大半のユーザーから表示不可能ですが、オブジェクトはオブジェクト・ストア・データベースに存在し、潜在的にリカバリー可能です。したがって、サーバーは、リカバリー可能なセキュリティー・プロキシー・オブジェクトから継承されたセキュリティーを維持します。この動作の結果、継承するオブジェクトが、VIEW_RECOVERABLE_OBJECTS 権限を持たないユーザーによる検査から予期されるよりも多くの権限を付与して、混乱を招く可能性があります。また、まれな状況下では、プロキシー・オブジェクトに削除のマークを付ける意図に反することになります。
このような潜在的な問題を回避するために、セキュリティー・プロキシーとして機能することを主要な目的とするオブジェクトに削除のマークを付けないでください。プロキシー関係を終了することを意図している場合は、代わりに削除を使用してください。