Plone 包括「;更改注释“;从InvokeFactory创建内容时

Plone 包括「;更改注释“;从InvokeFactory创建内容时,plone,ploneformgen,Plone,Ploneformgen,我正在使用invokeFactory从PloneFormGen表单自定义脚本适配器创建内容项。到目前为止,一切正常,但是我们希望开始为项目的历史记录生成注释,并将其包含在创建操作中。注释本身将使用表单中的字段和一些预设文本生成 这是PFG可以做到的吗 内容类型是自定义类型,并且可以进行版本设置。使用Plone 4.3.2,PFG 1.7.14 编辑 我当前的代码: from Products.CMFPlone.utils import normalizeString portal_root =

我正在使用
invokeFactory
从PloneFormGen表单自定义脚本适配器创建内容项。到目前为止,一切正常,但是我们希望开始为项目的历史记录生成注释,并将其包含在创建操作中。注释本身将使用表单中的字段和一些预设文本生成

这是PFG可以做到的吗

内容类型是自定义类型,并且可以进行版本设置。使用Plone 4.3.2,PFG 1.7.14

编辑

我当前的代码:

from Products.CMFPlone.utils import normalizeString

portal_root = context.portal_url.getPortalObject()
target = portal_root['first-folder']['my-folder']
form = request.form
title = "My Title: "+form['title-1']
id = normalizeString(title)
id = id+"_"+str(DateTime().millis())

target.invokeFactory(
    "MyCustomType",
    id=id,
    title=title,
    text=form['comments'],
    relatedItems=form['uid']
    )

我曾尝试在
目标.invokeFactory
参数中使用
注释
注释
消息
,甚至
cmfeeditions\u version\u注释
等键。到目前为止运气不好

我不确定在自定义脚本适配器中是否可以这样做

第一个条目的操作是
None
。如果操作为
None
,则历史记录将自动显示
Create
。这是实现的

#在默认的Plone站点上,您可以看到以下内容
>>>item.workflow\u历史记录
{'simple_publication_workflow':({'action':None,'review_state':'private','actor':'admin','comments':'','time':DateTime('2014/10/02 08:08:53.659345 GMT+2'),)
dict的键是工作流id,值是所有条目的元组。 因此,您可以根据需要操纵条目。但我不知道这是否适用于受限python(自定义脚本适配器只能使用受限python)

但您也可以通过以下扩展脚本来添加新条目:

。。。
new_object=target.get(id)
工作流工具=getToolByName(新对象“门户工作流”)
工作流=工作流工具。GetWorkflows for(新对象)
如果不是工作流:
返回
workflow_id=工作流[0]。id#Grap第一个工作流,如果您有更多工作流,请选择您需要的工作流
review\u state=workflow\u tool.getInfoFor(新对象“review\u state”,无)
历史记录\u条目={
“行动”:行动,你的行动
“审阅状态”:审阅状态,
“评论”:评论,#你的评论
“actor”:actor,#可能您可以获取登录用户
“时间”:时间,
}
workflow_tool.setStatusOf(工作流id、上下文、历史记录项)

我在CSA中尝试了你的建议。我收到此错误:
Unauthorized:不允许在此上下文中访问“setStatusOf”
内容类型在其内容类型python文件中具有
at_post\u create\u script
at_post\u edit\u script
函数。我想知道我是否能在那里施力?我注意到,当从
invokeFactory
创建项时,这些函数不会被调用,但也许我可以将其调用?尽管如此,我还是能够让
workflow\u tool.doActionFor()
工作。我只需要用我想要的操作名称创建一个新的工作流转换。你必须以正确的权限运行脚本。afaik您可以使用代理角色(例如管理器)来运行脚本。因此,您可以避免权限问题(新工作流也可以是一个解决方案)。您还可以将其添加到您的
at\u post\u create\u脚本中。但是你也必须确保有正确的权限。我有CSA运行的管理者代理角色,当我收到错误时,我作为站点管理员进行测试。至于
at\u post\u create\u脚本
,它在以这种方式创建内容时似乎没有运行。当我手动“添加新的”时,它会这样做,但CSA不会创建它。你知道为什么以及如何解决这个问题吗?我想你必须手动调用
at\u post\u create\u脚本。