文書操作
CMF Placeful Workflowをいじる
CMF PlacefulWorkflowを使って特定のフォルダ配下をAnonymousが閲覧できないようにしてみます。
既存のワークフローはどうなっているのか?
まずは既存のワークフローを確認してみます。デフォルトでは「plone_workflow」と「folder_workflow」という2つのワークフローが用意されています。ワークフローには「状態」があり、それぞれの「状態」には「遷移」(誰がどの状態に変化させることができるかということ)があります。
folder_workflow
フォルダーワークフローには「private」「published」「visible」という状態があります。
- 「private」状態(anonymousユーザには見えない)
- この状態にあるコンテンツは、「レビューワ」によって「published」の状態に、あるいは「メンバー」によって「visible」の状態にすることができます。逆に言えば、例えば「メンバー」によって「published」の状態にすることはできません。
- 「published」状態(anonymousユーザにも見える)
- この状態にあるコンテンツは、「メンバー」によって「private」の状態に、あるいは「メンバー」によって「visible」の状態にすることができます。
- 「visible」状態 (anonymousユーザにも見える)*初期状態
- この状態にあるコンテンツは、「レビューワ」によって「published」の状態に、あるいは「メンバー」によって「private」の状態にすることができます。逆に言えば、例えば「メンバー」によって「published」の状態にすることはできません。
plone_workflow
フォルダーワークフローには「pending」「private」「published」「visible」という状態があります。
- 「pending」状態(anonymousユーザには見えない)
- この状態にあるコンテンツは、「レビューワ」によって「published」または「visible」の状態に、あるいは「メンバー」によって「visible」または「private」の状態にすることができます。逆に言えば、例えば「メンバー」によって「published」の状態にすることはできません。
- 「private」状態(anonymousユーザには見えない)
- この状態にあるコンテンツは、「メンバー」によって「visible」の状態にすることができます。逆に言えば、例えばいきなり「published」の状態にすることはできません(publishedにしたい場合は、一度visibleにしてからpublishedにすることになる)。
- 「published」状態(anonymousユーザにも見える)
- この状態にあるコンテンツは、「レビューワ」または「メンバー」によって「visible」の状態にすることができます。逆に言えば例えばいきなり「private」の状態にすることはできません(privateにしたい場合は、一度visibleにしてからprivateにすることになる)。
- 「visible」状態 (anonymousユーザにも見える)*初期状態
- この状態にあるコンテンツは、「レビューワ」によって「published」の状態に、あるいは「メンバー」によって「private」または「pending」の状態にすることができます。逆に言えば、例えば「メンバー」によって「published」の状態にすることはできません。
これらのワークフローの「状態」や「遷移」については、ZMIのportal_workflowの「content」タブをクリックして各ワークフローを表示したときに見える「state」タブや「transitions」タブから確認することができます。
また各状態にはパーミッションが設定してあり(各状態の「permission」タブから確認できる)、これによってanonymousユーザに見えるか見えないかが決まります。
どんなワークフローにするのか?
それではどのようにカスタマイズしたらよいでしょう?「anonymousユーザには見えないようにしたい」という前提がありますが、これだけでは少し物足りないのでもう少しルールを増やしてみたいと思います。例えばこんなのはどうでしょう。
- 状態は「private」「pending」「published」の3つ
- コンテンツの初期状態はprivateとする(基本的にはanonymousユーザには見せない)
- anonymousユーザに見せたいコンテンツについてはレビューワにお伺いを立てて(pending状態にする)、承認されたらpublishedとする。ただしお伺いを取りやめたり、レビューワがリジェクトした場合はprivateに戻る
plone_workflowに似ていますが、「visible」状態はありません。ということで以上の要件に合うようにplone_workflowをカスタマイズしてみたいと思います。
実際にカスタマイズする
plone_workflowのコピー、リネーム
まずは元となるplone_workflowをコピー&ペーストして、自分の好きな名前にします。ここではprivate_workflowという名前にしました。以下このprivate_workflowを編集していきます。
初期状態をprivateに変更し、visible状態を削除
plone_workflowの初期状態は「visible」ですが、今回編集していくprivate_workflowでは初期状態がprivateとなるので変更します。「private」のチェックボックスにチェックを入れて画面下部の「Set Initial State」ボタンを押せば、privateが初期状態となります(星マークが付いたハズです)。ついでにお役ご免となったvisible状態を削除します。
private状態の遷移を変更
既存のprivate状態に割り当てられている遷移は「show」です。これは「メンバー」がコンテンツを「visible」にできるというものですが、これでは今回の要件には合いません。そこでprivate状態のコンテンツの遷移を「submit」にしてやります。showのチェックをはずし、submitにチェックをいれたら画面下部の「Save Change」ボタンを押します。これでprivate状態のコンテンツは「pending」状態にのみ変更できることになります。
pending状態の遷移を変更
次にpending状態の遷移を変更します。pendign状態のコンテンツがたどる道は以下の3つとします。
- reject: レビューワによるリジェクト→private状態へ
- publish: レビューワによる承認→published状態へ
- retract: メンバーによる撤回→private状態へ
既存のpending状態には上記の3つ以外に「hide」という遷移がありますが、今回は使わないので削除します。pending状態をクリックしてhideのチェックを外してセーブしましょう。
また上記の3つの遷移のうちrejectとretractについては、この遷移によって「private」状態に移らせるために、「Destination State」を「private」にしておきます。
published状態の遷移を変更
最後にpublished状態の遷移の変更ですが、特に変更する必要はありません。
さてこれでprivate_workflowの完成です。次はサイト中の特定のフォルダ以下にこのワークフローを適用したいと思います。
CMF Placeful Workflow
実はここまでやってきたワークフローの編集作業はCMF Placeful Workflowの機能をいじっていたわけではなく、DC Workflowというプロダクトの機能をいじっていたのです(ホントかな…)。
CMF Placeful WorkflowはこのDC Workflowを拡張して、特定の場所に特定のワークフローを割り当てるという機能を提供してくれます。DC Workflowは基本的にコンテンツタイプベースでワークフローを設定していたので、例えば特定のフォルダ以下に特定のワークフローを設定すると言ったロケーションベースの設定は難しかったわけです。そこでロケーションベースのワークフロー設定を簡単に行うためのプロダクトとしてCMF Placeful Workflowが登場したのだと思います(ウソかもしれない)。「Placefull *」という名前の由来もそういった機能から来ているのだと思います。
* 日本語では「位置依存型」と訳されていますが、ちょっとわかりにくいですね。かといってなかなか良い単語もパッと思いつきませんが。
CMF Placeful Workflowの設定
ワークフローポリシーの作成
設定は「サイト設定→アドオンプロダクトの設定」から行いますが、ここでまずは「ワークフローポリシー」を作成します。「ワークフローポリシー」というのは、例えば「フォルダはfolder_workflow、ドキュメントはplone_workflow、…」といったようにコンテンツタイプごとに設定したワークフローのセットのことです。
デフォルトではワークフローポリシーがありませんので新規に作成しますが、ゼロから作るのはめんどうなので、「Duplicate another policy」のドロップダウンメニューから「Global Workflow」を選んでおきます。ちなみにこの「Global Workflow」というのは、ZMIのportal_workflowの最初の画面である「Workflows by type」を参照しているようです。
ワークフローポリシーの編集
次に今追加したワークフローポリシーを編集します。タイトルとか説明とかはテキトーでいいですが、「デフォルトワークフロー」は必ず変更してください。「Global Workflow」をコピーした場合、デフォルトではplone_workflowが選択されていると思いますが、これを先ほど作った「private_workflow」に変更します。これで基本的にコンテンツにprivate_workflowが適用されることになります。
あとはコンテンツタイプ別に設定されているワークフローを変更してやるだけです。(Default)が指定されているものは勝手にprivate_workflowが割り当てられるのでそのままでOK。folder_workflowやplone_workflowが指定されているものはプルダウンメニューから(Default)かprivate_workflowを選んでやります。最後にセーブするのを忘れないように…。
ワークフローポリシーを特定フォルダ以下に適用
作成したワークフローポリシーを特定フォルダ以下に適用するには、当該フォルダの「状態」ボタンから「ポリシー」を選びます。
すると以下のような画面になりますので、クリックして次の画面にいきます。
上下に二つの設定部がありますが、当該フォルダも含めてポリシーを適用するかどうかが異なりますので適当に設定してやればよいでしょう。
Plone 2.1.3でCMF Placeful Workflowを使う
以下の環境で使うことができました。
- Python 2.3.5
- Zope 2.8.6
- Plone 2.1.3
- CMF Placeful Workflow 0.4.8
- カテゴリ
-
Plone
- Plone Products
- 固定リンク
- ¦
- コメント (4)
- ¦
- トラックバック (0)
- トラックバック用URL:
- http://nagosui.org:8080/Nagosui/COREBlog2/use-cmf-placeful-workflow/tbping



nyusukeさま、こんにちは。
MLでPlacefulWorkFlowの件で投稿させていただいたものです。
私もインストールしてみたんですが、思いっきり1.0releaseを入れてしまい、エラーで動きませんでした。
Plone2.1.3の場合は、0.4.8じゃないとダメなんですね...。
まだ上手く使えてなかったところに、nyusukeさまのこの記事を発見し、大変助かりました。
ありがとうございました!
あきこさんの出力量はすごいですね…
負けずに出力していきたいと思います。
いつも参考にさせていただいております。
今、社内自己申告システムをploneで構築しようと計画しておりますが、下記のようなワークフローは、どのようにすれば実現可能でしょうか?
1.本人が編集・申告
2.直属チームの上司が編集・承認または、却下
3.所属課課長が編集・承認または、却下
4.所属部部長が編集・承認または、却下
5.人事部で回収確認
事前に管理者が設定した特定の直属上司に申請できるように設定することは、可能なのでしょうか?
ご回答よろしくお願いいたします。
うーん、できるできないでいえばできる気はしますが、
MLに投げてみた方がいいと思います(*´Д`)