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

自动重命名新原型对象(Plone 4)停止工作,plone,plone-4.x,Plone,Plone 4.x,我有一个Plone 4站点,它停止重命名新的原型对象;在创建(类似于/temp/portaltype.2015-04-23.1234567890)并保存第一次更改(包括给它一个标题)之后,应该将其重命名为更好的名称(/temp/an-object-with-a-meaningly-name),但这种情况不再发生 当我将Plone从4.3.3更新到4.3.4(一次只做一步)时,可能出现了问题;但我继承了一个很长的versions.cfg,它只按包名排序,不包含选择某些版本的任何提示 我可以追溯到两

我有一个Plone 4站点,它停止重命名新的原型对象;在创建(类似于
/temp/portaltype.2015-04-23.1234567890
)并保存第一次更改(包括给它一个标题)之后,应该将其重命名为更好的名称(
/temp/an-object-with-a-meaningly-name
),但这种情况不再发生

当我将Plone从4.3.3更新到4.3.4(一次只做一步)时,可能出现了问题;但我继承了一个很长的
versions.cfg
,它只按包名排序,不包含选择某些版本的任何提示

我可以追溯到两个月前,有一个版本可以进行重命名,但是没有更多关于寻找什么的知识,这将是一个非常耗时的过程,重新应用每一个更改、重建、启动和测试;但我的模式定义没有任何更改。我有一个
temp
浏览器,用于交付主要编辑表单。但拯救行动似乎并非如此

遗憾的是,我还没有完全理解
base\u edit
操作的机制,据我所知,该操作应该调用
原型.BaseObject.processForm
,并在创建后隐式地
。\u renameAfterCreation
,因此我非常感谢为如何调试它提供一些指导。谢谢大家!

更新: 我的产品的
configure.zcml
中有几个触发器,例如:

<subscriber
    for=".content.portaltype.PortalType
         Products.Archetypes.interfaces.IObjectInitializedEvent"
    handler=".events.onInitPortalType"/>
但是,事件似乎没有被触发,因为我在
实例fg
会话中找不到输出

更新2: 我注意到
zope.event
已经被固定到了一个非常旧的版本(
3.5.2
),所以我现在正在更认真地更新到4.3.4()。这让我
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
,但我找不到它。

在原型方面,Plone 4.3.3和4.3.4之间没有显著变化。Products.Archetypes从1.9.7更改为1.9.8,Products.ATContentTypes保留在同一版本上

指针可以是:

  • 在创建后的重命名处有一个
    \u标志,默认为
    True
    。这可以在内容类型
    上更改
  • 您的类型是否仍在
    portal\u factory
    工具中激活?(当然,这对创建后的重命名没有影响,但谁知道呢:-)
  • 任何
    产品、原型、接口、IObjectInitializedEvent
    订阅服务器
  • 我曾经遇到的问题是,tmp id
    portaltype.2015-04-23.1234567890
    格式错误,AT没有将其识别为tmp id,因此在创建后没有对其进行重命名。AT的方法用于检查id是否为自动生成-->AFAIK问题是,meta_类型和portal_类型不再相同
创建后重命名处的标志
\u显式设置为
True
;这些类型在
@@types控制面板中可见<代码>isIDAutoGenerated
工作正常(但在提交表单后不会调用)。有一些
IObjectInitializedEvent
订阅者,但不适用于当前检查的类型。也许我应该添加一个事件函数来显式触发重命名…我更新了问题。订阅的函数似乎没有被触发(我尝试了
print
语句和
pdb.set\u trace()
)。我想你需要对整个堆栈进行调试。尝试在Products.Archetypes中启动\u重命名创建方法后,如果不调用该方法,请在自定义类型中定义该方法并添加断点。然后尝试在_processForm.The
Products.Archetypes.BaseObject
版本的
\u renameAfterCreation
中设置一个断点,但该断点仅在创建时被调用,但仅在呈现表单之前(不再是…见鬼!);我将它复制到我的内容类的基类,但忽略了这个。作为解决方法,我创建了一个
自动重命名
操作,用户可以触发该操作;持久的好处是在更正标题后可以更新id。。。
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.