任意の時点で「チェックイン」ステータスにあるファイルのコレクションを取得するにはどうすればよいですか? plone 4.1 を使用。チェックインはワークフローのステータスではありません。「チェックイン」によってファイルのロックを解除する前に、他のユーザーが最新のコピーにアクセスできないように、編集中にユーザーによってロックされたファイルです。ロックされているすべてのファイル、つまり「チェックアウト」状態または「チェックイン」状態にあるすべてのファイルのリストを表示するコレクションをいつでも作成できるかどうかを知りたいです。
3 に答える
チェックインされたオブジェクトは「通常の」公開済みオブジェクトと見分けがつかないため、そのようなコレクションを簡単に作成する方法はおそらくありません。
いくつかの回避策が思い浮かびます。
ID が「copy_of」で始まる非公開状態のオブジェクトを検索して、チェックアウト済みのオブジェクトを探します。
「公開」オブジェクトを確認します。
追加の「チェックイン」状態を含むカスタム ワークフローを作成し、(何らかの方法で) 少なくとも 1 回チェックアウトして再度チェックインしたオブジェクトに対してチェックイン状態を使用します。
これらはどれも特に魅力的ではないため、公開されたアイテムのカタログ検索がおそらく最善の策です。
>>> [brain.getObject().getId() for brain in portal.portal_catalog(
review_state="published")]
['front-page', 'news', 'aggregator', 'events', 'aggregator', 'Members']
必要に応じて、すべてのオブジェクトのリストと比較できます。
>>> [brain.getObject().getId() for brain in portal.portal_catalog()]
['front-page', 'news', 'aggregator', 'events', 'aggregator', 'Members',
'copy_of_front-page']
これをプログラムで行う必要はありません。公開されたオブジェクトとすべてのオブジェクトの検索の違いを示したかっただけです。後者は追加のチェックアウト済みオブジェクトを (非公開状態で) 返します。
このアプローチでは可能です:
- 有名な schemaextender を介して、新しいフィールド 'Has workingcopy' をすべての ATCT に追加します。
- フィールドをカタログに登録して、コレクションで使用できるようにします。
- 作業コピーが作成されたときにフィールドを true に設定し、チェックアウトまたはキャンセルされたときに False に設定するイベント ハンドラーをリッスンします。
とにかくすぐにプロジェクトに必要なので、これ用のパッケージを書きました:adi.workingcopyflag
チェックイン/チェックアウト状態はportal_catalogでインデックス化されていないため、コレクションで情報を利用できるようにする方法はありません。