我有一个Plone 4站点停止重命名新的Archetypes对象;在创建之后(像/temp/portaltype.2015-04-23.1234567890
这样的东西)并保存第一个更改,包括给它一个标题,它应该被重命名为更好的东西(/temp/an-object-with-a-meaningful-name
),但这不会再发生了。< / p>
当我应用一些更改来将Plone从4.3.3更新到4.3.4(一次只做一步)时,可能会出现问题;但我继承了一个长versions.cfg
,它只是按包名排序,并没有包含为什么选择某些版本的任何提示...
我能够回溯两个月并拥有一个可以重命名的版本,但是如果没有更多关于要查找内容的知识,重新应用每一个更改将是一个非常耗时的过程,重建,启动和测试;但我的架构定义没有任何变化。我有一个temp
浏览器,参与提供主要编辑表单。但这似乎不是保存行动的理由。
可悲的是,我还没有完全理解base_edit
行动的机制 - 据我所知 - 应该Archetypes.BaseObject.processForm
并隐含._renameAfterCreation
,所以我&#39 ;感谢一些指针如何调试这个。谢谢!
更新
我的产品configure.zcml
中有一些触发器,例如:
<subscriber
for=".content.portaltype.PortalType
Products.Archetypes.interfaces.IObjectInitializedEvent"
handler=".events.onInitPortalType"/>
... with,events.py
:
def onInitPortalType(self, event):
"""
Called after first edit of new objects?
"""
print '/// onInitPortalType(%(self)r, %(event)r)' % locals()
setInitialOwner(self, event)
setStateToPrivate(self, event)
但是,事件似乎没有被触发,因为我无法在instance fg
会话中找到输出。
更新2:
我注意到zope.event
已被固定到相当旧的版本(3.5.2
),所以我现在更加认真地更新到4.3.4(following this how-to)。这让我zope.event
v4.0.3,但我现在有版本冲突:
There is a version conflict.
We already have: zc.recipe.egg 1.3.2.
While:
Installing.
Getting section test.
Initializing section test.
Installing recipe zc.recipe.testrunner.
某处似乎需要zc.recipe.egg < 2dev
,但我无法找到它。
答案 0 :(得分:2)
在原型上,Plone 4.3.3和4.3.4之间没有任何重大变化。 Products.Archetypes从1.9.7更改为1.9.8,Products.ATContentTypes保留在同一版本中。
指针可能是:
_at_rename_after_creation
标志,默认为True
。可以在内容类型class
上更改此内容。portal_factory
工具中激活? (Afaik这应该对创建后的重命名没有影响 - 但谁知道: - ))Products.Archetypes.interfaces.IObjectInitializedEvent
订阅者?portaltype.2015-04-23.1234567890
格式错误,AT没有将其识别为tmp id,因此在创建后没有将其重命名。方法AT用于检查id是否是自动生成的 - &gt; https://github.com/plone/Products.CMFPlone/blob/4.3.4/Products/CMFPlone/utils.py#L111 AFAIK问题是,meta_type和portal_type不再相同了。