私のPloneインスタンスでは、作成したすべての新しいページを、作成後に独自のフォルダに移動します。フォルダは、そのページと同じタイトルと説明を持つ必要があります。これは私が新しいフォルダに追加した新しいページを移動する最後の行まで働くPloneページを移動すると「インデックスに値のある別のドキュメントがあります」エラー
def notifyDocumentIsAdded(document, event):
portal = api.portal.get()
context = aq_inner(document)
folder = aq_parent(context)
if getattr(document,"title") != getattr(folder,"title"):
newfolder = api.content.create(
type='Folder',
title=getattr(document,"title"),
container=folder,
description=getattr(document,"description"))
api.content.move(source=document,target=newfolder,safe_id=True)
:だから私はzope.lifecycleevent.interfaces.IObjectAddedEventのイベントハンドラとして、この機能を書きました。私は得る
ERROR Products.ZCatalog A different document with value 'c31f15e4923e4f2683dedc829d2f773d' already exists in the index.'
この値を持つドキュメントとは何ですか? IDの競合ですか?または、イベントをトリガーしたオブジェクトを移動するのは問題ですか?
更新:ページは上記の私の文にもかかわらず、正確に移動され : 私は今より良い実際の問題を理解するのpythonデバッガを使用した後。問題は次のとおりです。ハンドラが実行された後、ハンドラによって移動された古いカタログのカタログによってページが索引付けされます。移動後にtransaction.commit()を使用しても、ページは以前の場所と新しい場所でインデックスされます。上記のエラーです。どのように起こるのを防ぐことができますか?
同じトランザクションでスクリプトで切り取り/貼り付けを実行するときに問題が発生することがあります。 2つの操作の間に 'transaction.savepoint'(または、必要に応じて完全なコミット)を実行してください。 –