自动重命名新的Archetypes对象(Plone 4)停止工作

时间:2015-04-23 09:55:07

标签: plone plone-4.x

我有一个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,但我无法找到它。

1 个答案:

答案 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订阅者?
  • 问题我曾经是,tmp id 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不再相同了。