2016-09-08 4 views
1

私はidによって別のコンテンツ(my_item)の複数のインスタンスに結び付けられているコンテンツタイプ(バッチ)を持っています。 my_itemコンテンツタイプには、下書き、保留中、および承認済みのワークフローがあります。バッチを作成し、my_itemコンテンツタイプのインスタンスを「承認」するフォームがあり、my_item_instancesのbatch_idをバッチのバッチID(バッチの作成時に設定)に設定するフォームがあります。承認された状態は、最終状態であり、編集も格納もできません。Plone/Workflow-遷移を必要とせずにワークフローの状態を設定できますか?

my_itemコンテンツタイプインスタンスの状態を下書きに戻す必要があります。アイテムが(サブスクライバを介して)削除されているときに、承認済み状態から元に戻すための遷移がないので、移行を必要とせずにmy_itemsの状態を「ドラフト」に戻す必要があります。

私が試した2つの方法があります。また、

Iに起草する状態を設定するためのワークフローを見つけられませんでした:

加入者がIObjectWillBeRemoved

これはエラー InvalidParaemterErrorになり
def my_item_will_be_removed(obj,event) 
    my_items = catalog.searchResults('batch_id':obj.batch_id) 
    for i in my_items: 
     api.content.transition(obj=i,to_state='pending') 

です試しました:

wf_tool = api.portal.get_tool(name='portal_workflow') 
wf_tool.setStatusOf('item_workflow',i,'pending') 

何らかの理由でmy_itemが文字列になることがあります。

できませんか?それが可能なら、どうすればいいですか?


Offtopicが、私は今のところ使用できる回避策があると思います: ドラフト状態に承認された状態から行くの移行「retract_from_approval」

「can_retract_from_approvalは」に割り当てる必要が作ります、削除イベントには、「バッチ」

を削除my_itemsを反復処理し、現在の反復

上でローカルにバッチを削除する責任の役割に「can_retract_from_approvalの許可を割り当てることができます役割
my_items = catalog.searchResults('batch_id',obj.batch_id) 
for m in my_items: 
    mi_obj = m.getObject() 
    mi_obj.manage_permission('retract_from_approval',['ARole'],obj=mi_obj) 

次に、ワークフローツールを使用して、my_itemをドラフト状態に戻す 'retract_from_approval'トランジションを実行します。次に、can_retract_from_approval権限を削除します。

+0

を必要としてください?あなたのコードスニペットはあなたのアイテムに対して 'i'を反復し、' e'でメソッドを呼び出しますが、これはpastoですか? –

+0

編集:私はe = i.getObject()を入れることを意味する –

+0

更新:申し訳ありませんが、私はe = i.getObject()を使用していないことを理解しました。だから私はただの脳だった。それが問題でした。私はそれがタイプミスの結果であったことはごめん。 –

答えて

4

これは、Plone 2.5からPlone 3に移行するために使用した古い移行ツールのスニペットです。多くの場合、です。

wtool = getToolByName(obj, 'portal_workflow') 
    status = {'action': '', 
       'review_state': old_state, 
       'actor': 'admin', 
       'comments': 'Recovery state', 
       'time': DateTime() } 

    wtool.setStatusOf(workflow_id, obj, status) 
  1. ない、それはまだ、今日
  2. を動作するかどうか、あなたはおそらく、あなたが「文字列になって `my_item`で終わる」明確にすることができreindexObjectSecurity
+1

ありがとうございました。この回答は、実際に私が/将来持っていたかもしれない他の質問を処理します。ありがとうございました。 –

+0

reindexObjectSecurity(obj.reindexObjectSecurity())を使用した後であっても、移行後に権限が正しく動作していないようです。私はそれを送り返している状態で、ユーザーはもともとmy_itemの内部に保存されているオブジェクトを削除することを許可した(ワークフローで定義されている)「オブジェクトの削除」権限を持っていましたが、彼らは必要な権限を持っていません。今のところ私はmanage_permission(obj.manage_permission( 'オブジェクトの削除'、roles = [...]))を使うことができます –

関連する問題