Я работаю с рабочими процессами Activiti в Alfresco Share, и мне нужно добавить общий заголовок для всех пользовательских форм задач в рабочем процессе. Этот заголовок будет набором свойств (полей) только для чтения, отображающих контекстную информацию рабочего процесса в верхней части всех форм пользовательских задач в рабочем процессе. Например, в рабочих процессах управления клиентами заголовок может отображать имя и фамилию клиента, код клиентского файла и т. Д., Отображая каждое значение в текстовом поле или метке только для чтения.
Есть ли простой способ добавить набор информационных полей (а также заполнить их) ко всем формам пользовательских задач в рабочем процессе? Я знаю, что можно создать новый аспект, содержащий желаемые свойства, но как я могу добавить этот аспект во время выполнения к моим типам задач и при необходимости установить их значения свойств с помощью JavaScript? В настоящее время каждая пользовательская задача в рабочем процессе имеет свой собственный настраиваемый тип (т.е. форму) в определении модели рабочего процесса (файл XML), за исключением некоторых «стандартных» задач проверки, которые используют «wf: activitiReviewTask» в качестве ключа формы. Набор информационных полей только для чтения должен отображаться во всех формах, включая стандартные формы задач проверки.
Я хочу добиться чего-то вроде этого (см. Красный квадрат):
Форма задачи с информационными полями
Заранее благодарны за Вашу помощь.
ОБНОВЛЕНИЕ 1
У меня нет опыта работы с шаблонами форм. Поскольку мои формы очень просты, я просто использовал несколько определений модели (аспекты и типы) и некоторую пользовательскую конфигурацию Share, объединенную для их разработки. Информацию, которую я хочу отобразить в заголовке, можно легко получить из кода JavaScript, поскольку она хранится в нескольких переменных контекста рабочего процесса. Это то, что я имел в виду, еще не проверено, скажите, пожалуйста, работоспособная ли это идея. Если нет, не могли бы вы привести пример того, как это сделать с помощью шаблонов форм?
mynsModel.xml
<aspect name="myns:customerTaskHeader">
<title>Customer task header</title>
<properties>
<property name="myns:customerName">
<title>Name</title>
<type>d:text</type>
</property>
<property name="myns:customerSurname">
<title>Surname</title>
<type>d:text</type>
</property>
</properties>
</aspect>
workflowModel.xml
<type name="wf:customerDelivery">
<title>Delivery to customer</title>
<parent>bpm:workflowTask</parent>
<properties>
<property name="wf:customerDeliveryType">
<title>Delivery type</title>
<type>d:text</type>
</property>
<property name="wf:customerDeliveryStatus">
<title>Signed</title>
<type>d:boolean</type>
</property>
</properties>
<mandatory-aspects>
<aspect>myns:customerTaskHeader</aspect>
</mandatory-aspects>
</type>
share-config-custom.xml
<config evaluator="task-type" condition="wf:customerDelivery">
<forms>
<form>
<field-visibility>
<show id="myns:customerName" />
<show id="myns:customerSurname" />
<show id="packageItems" />
<show id="wf:customerDeliveryType" />
<show id="wf:customerDeliveryStatus" />
<show id="bpm:comment" />
<show id="transitions" />
</field-visibility>
<appearance>
<set id="" appearance="title" label-id="workflow.set.general" />
<set id="items" appearance="title" label-id="workflow.set.items" />
<set id="response" appearance="title" labelid="workflow.set.response" />
<field id="bpm:comment" labelid="workflow.field.message">
<control template="/org/alfresco/components/form/controls/textarea.ftl">
<control-param name="style">width: 95%</control-param>
</control>
</field>
<field id="packageItems" set="items" />
<field id="transitions" set="response" />
<field id="myns:customerName" read-only="true">
<control template="/org/alfresco/components/form/controls/info.ftl" />
</field>
<field id="myns:customerSurname" read-only="true">
<control template="/org/alfresco/components/form/controls/info.ftl" />
</field>
</appearance>
</form>
</forms>
</config>
Некоторые недостатки, которые я вижу в этом (возможном) обходном пути:
- Все определения типов задач должны включать аспект
customerTaskHeader
. Проблема в том, что многие пользовательские задачи в рабочем процессе имеют встроенный тип, а не настраиваемый. Было бы неплохо иметь возможность добавить аспект со всеми необходимыми значениями к типу задачи во время выполнения с помощью кода JavaScript, но это, вероятно, невозможно. - Мне нужен отдельный оценщик настраиваемой конфигурации для каждого типа задачи в share-config-custom.xml. Та же проблема.
- Я считаю его довольно громоздким в использовании и сложным в обслуживании. Более того, поправьте меня, если я ошибаюсь, я не вижу простого способа установить значения в поля заголовков всех форм задач в рабочем процессе. Я думаю, мне следует добавить прослушиватель событий create к каждой пользовательской задаче со следующим кодом:
[Код JavaScript]
var customerName = execution.getVariable('customerName');
var customerSurname = execution.getVariable('customerSurname');
task.setVariable('myns_customerName', customerName);
task.setVariable('myns_customerSurname', customerSurname);