使用PloneFormGen自定义脚本适配器以编程方式执行内容规则

时间:2013-09-17 15:57:01

标签: plone ploneformgen plone-3.x

一些基本信息

我有一个Plone 3.2.1站点,它有一个名为 prod 的子文件夹。还有一个名为上传的PloneFormGen表单,它有一个自定义脚本适配器,可以创建自定义内容类型(稍微修改'Collection'类型)并将其放在前面提到的 prod 文件夹。

prod 文件夹配置了内容规则,其中包含以下条件:

  • 键入==“我的自定义类型”
  • 州==“私人”

如果满足这些条件,它会向我发送一封电子邮件,说明有新的内容类型等待我的审核。

问题

使用自定义脚本适配器创建内容类型时,似乎绕过或忽略了内容规则。当然,通过“添加新...”菜单手动创建“我的自定义类型”按预期执行规则。

我的想法

据我所知,我只有3个选项

  1. 安装uwosh.pfg.d2c
    • 这将是理想的,但似乎打破了我的安装(client1拒绝加载后,它被添加到buildout,它抱怨一个权限问题,它似乎也导致相同的问题在一个普通的Plone 4.3安装)
  2. 在我的脚本中写一些可以与Plone的邮件主机通信并发送自定义电子邮件的内容
  3. 在我的脚本中找到执行内容规则的方法
  4. 这个列表中的第3个是我想要去的地方,虽然我找不到很多关于它的信息,这让我觉得它可能很复杂。

    问题摘要

    是否可以使用PloneFormGen自定义脚本适配器执行已存在的内容规则?如果有可能,是否有人有文件或其中的例子?

    脚本适配器脚本,如果您需要查看它:

    from DateTime import DateTime
    
    target = context.prod
    
    form = request.form
    
    uid = str(DateTime().millis())
    
    target.invokeFactory("My Custom Type", id=uid, title=form['title-1'])
    
    obj = target[uid]
    
    obj.setFormat('text/plain')
    obj.setTitle(form['title-1'])
    obj.setDescription(form['description-1'])
    obj.setText(form['main-information'])
    obj.setCustcode(form['customer-code'])
    obj.setProdcode(form['product-code'])
    obj.setMsector(form['market-sector'])  
    obj.setProdcat(form['product-category'])
    obj.setOrderdate(form['order-date'])
    obj.setSalesrep("rep: " + form['sales-rep'])
    obj.setKeywords(form['keywords-1'])
    obj.setSubject(form['product-code'])
    
    criteria = obj.addCriterion('Type', 'ATPortalTypeCriterion')
    criteria.setValue("Image")
    
    criteria = obj.addCriterion('Subject','ATSimpleStringCriterion')
    criteria.setValue(form['product-code'])
    
    obj.reindexObject()
    

    我仍在努力解决这个问题,因此我可以在我解决这个问题时修改问题。虽然任何帮助或见解都会受到高度赞赏。

    编辑#1

    我在Plone聊天室,有人建议我调查ObjectAddedEvent。这可能是我正在寻找的,虽然我无法通过自定义脚本适配器导入这些模块,并且希望避免编写驻留在文件系统上的脚本。

1 个答案:

答案 0 :(得分:2)

https://pypi.python.org/pypi/uwosh.pfg.d2c/2.4.1刚刚发布,应修复您所描述的权限问题。