Интерфейсы CMFWorkflow и маркеров

В настоящее время я создаю прототип небольшого проекта в Plone и пытаюсь максимально использовать KISS, пока требования все еще меняются. С этой целью я пока воздерживался от создания каких-либо настраиваемых типов контента и использовал маркерные интерфейсы для различения «типов» контента.

Теперь, когда я смотрю на рабочий процесс, я понял, что они привязаны к типам, и, похоже, не существует механизма для их назначения маркерам. Я думаю, что я мог бы обернуть portal_workflow своей собственной версией, которая ищет маркеры и возвращает соответствующий рабочий процесс, если они найдены, однако это не кажется надежным подходом.

Есть ли способ назначить рабочий процесс маркерам, которые я пропустил, или я должен просто стиснуть зубы и вместо этого создать несколько облегченных пользовательских типов контента?


person Matthew Trevor    schedule 11.10.2012    source источник
comment
В этом случае для простоты можно было бы, возможно, использовать новые типы контента. :-П   -  person Martijn Pieters    schedule 11.10.2012
comment
Да, в значительной степени это был вывод, когда я понял, что мне нужны настраиваемые рабочие процессы :)   -  person Matthew Trevor    schedule 11.10.2012


Ответы (1)


На самом деле нет встроенной функции для использования маркеров, но на http://www.martinaspeli.net/articles/dcworkflows-hidden-gems Мартин Аспели намекает, что это возможно:

Обратите внимание, что в Plone цепочка рабочих процессов объекта просматривается путем множественной адаптации объекта и рабочего процесса к интерфейсу IWorkflowChain. Фабрика адаптеров должна возвращать кортеж строковых имен рабочих процессов (IWorkflowChain — это специализация IReadSequence, т. е. кортеж). По умолчанию, очевидно, просматриваются сопоставления в инструменте portal_workflow, но можно переопределить сопоставление, например. в ответ на какой-то интерфейс маркера.

person Jon Stahl    schedule 11.10.2012
comment
Спасибо, именно это заставило меня подумать, что я мог бы предоставить свою собственную оболочку portal_workflow, которая справится с этим. Я думаю, что пользовательские типы будут правильным подходом, хотя я выбрал вас в качестве решения, потому что это решает указанную проблему :) - person Matthew Trevor; 11.10.2012
comment
Все верно; именно этот интерфейс делает возможным CMFPlacefulWorkflow. Полный путь к интерфейсу: Products.CMFPlone.interfaces.IWorkflowChain. Реализация по умолчанию находится в Products.CMFPlone.workflow. - person Martijn Pieters; 11.10.2012
comment
Да, создание полноценных типов контента, вероятно, в конце концов является более простым путем. - person Jon Stahl; 11.10.2012