在我们的用例中,如果未修改的对象的标题被修改,我们希望根据新标题更改其id。
我们尝试使用简单的订阅者完成它而没有成功:
ZCML:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:zcml="http://namespaces.zope.org/zcml">
<subscriber
for="DummyContentType
zope.lifecycleevent.IObjectModifiedEvent"
handler=".subscriber.update_id"
/>
</configure>
的Python:
# -*- coding: utf-8 -*-
from plone import api
from plone.i18n.normalizer.interfaces import IIDNormalizer
from zope.component import queryUtility
def update_id(obj, event):
state = api.content.get_state(obj)
if state != 'private':
return
util = queryUtility(IIDNormalizer)
new_id = util.normalize(obj.Title())
api.content.rename(obj=obj, new_id=new_id, safe_id=True)
obj.reindexObject()
当此代码运行时,我们得到 ResourceLockedError 异常