При создании контента из InvokeFactory добавьте "Заметку".

Я создаю элемент содержимого из пользовательского адаптера сценариев формы PloneFormGen, используя invokeFactory, Пока все работает нормально, однако мы хотим начать генерировать комментарий для включения в действие create для истории элемента. Сам комментарий будет создан с использованием полей формы и некоторого предустановленного текста.

Это то, что было бы возможно из 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']
    )

Я пытался использовать ключи, такие как comments, comment, message, и даже cmfeditions_version_comment в пределах target.invokeFactory аргументы. Пока не повезло.

1 ответ

Решение

Я не уверен, возможно ли это в адаптере нестандартного скрипта.

Действие вашей первой записи None, История автоматически показывает Create если действие None, Это реализовано здесь (plone.app.layout.viewlets.content)

# On a default Plone site you got the following
>>> item.workflow_history
{'simple_publication_workflow': ({'action': None, 'review_state': 'private', 'actor': 'admin', 'comments': '', 'time': DateTime('2014/10/02 08:08:53.659345 GMT+2')},)}

Ключом dict является идентификатор рабочего процесса, а значение - кортеж всех записей. Таким образом, вы можете манипулировать входом, как вы хотите. Но я не знаю, возможно ли это с ограниченным питоном (пользовательский адаптер скрипта может использовать только ограниченный питон).

Но вы также можете добавить новую запись, расширив свой скрипт:

...

new_object = target.get(id)
workflow_tool = getToolByName(new_object, 'portal_workflow')

workflows = workflow_tool.getWorkflowsFor(new_object)

if not workflows:
    return

workflow_id = workflows[0].id  # Grap first workflow, if you have more, take the the one you need
review_state = workflow_tool.getInfoFor(new_object, 'review_state', None)

history_entry = {
                 'action' : action, # Your action
                 'review_state' : review_state,
                 'comments' : comment, # Your comment
                 'actor' : actor, # Probably you could get the logged in user
                 'time' : time,
                 }

workflow_tool.setStatusOf(workflow_id, context, history_entry)
Другие вопросы по тегам