При создании контента из 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)