Когда я начинаю свой рабочий процесс, я хочу, чтобы этот параметр был назначен кому-то. Если никто не выбран, я хочу по умолчанию назначить его инициатору.Рабочий процесс: установка значения по умолчанию для bpm: assignee
Можно ли обойтись без создания новой модели, которая расширяет bpm: цессионарий? Если нет, то как это расширение будет выполнено?
Я считаю, что этот ответ от Джеффа Поттс актуальна: https://stackoverflow.com/a/9418066/4542428
Примечание: Я использую Community Edition 4.2
EDIT: ответ Стефан получил меня подавляющее большинство пути к ответу, но это, кажется, что я как-то неправильно ссылаюсь на ценность ассоциации. Контекст: я никогда не использовал ассоциации, и это, скорее всего, просто неспособность понять их отличие от типов и аспектов.
С моей модели:
<type name="deliveryTicketWorkflow:start">
<parent>bpm:startTask</parent>
<properties>
</properties>
<associations />
<overrides />
<mandatory-aspects>
<aspect>deliveryTicketWorkflow:pmAspect</aspect>
<aspect>deliveryTicketWorkflow:requestDetailsAspect</aspect>
</mandatory-aspects>
</type>
<aspect name="deliveryTicketWorkflow:pmAspect">
<associations>
<association name="deliveryTicketWorkflow:assignedPM">
<source>
<mandatory>false</mandatory>
<many>false</many>
</source>
<target>
<class>cm:person</class>
<mandatory>false</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
который используется моей конфигурации, как:
<config condition="activiti$deliveryTicketWorkflow" evaluator="string-compare">
<forms>
<form>
<field-visibility>
...
<show id="deliveryTicketWorkflow:assignedPM" />
...
</field-visibility>
<appearance>
...
<field id="deliveryTicketWorkflow:assignedPM" label-id="Project Manager" />
...
</appearance>
</form>
</forms>
</config>
Мой конфиг для deliveryTicketworkflow: старт идентичен. Это успешно отображает селектор человека, не делая его обязательным, ровно на 100%, как сказал Стефан.
В моем определении BPMN рабочего процесса, я тогда эти фрагменты в качестве выполнения слушателем для запуска события:
if(!execution.getVariable("deliveryTicketWorkflow_assignedPM")){
execution.setVariable("deliveryTicketWorkflow_assignedPM", initiator);
}
...
deliveryTicket.properties["dtdlm:projectManager"] = execution.getVariable("deliveryTicketWorkflow_assignedPM").properties.firstName + " " + execution.getVariable("deliveryTicketWorkflow_assignedPM").properties.lastName;
Когда рабочий процесс запускается и я выбираю кого-то как ПМ, то последняя строка (где первое и последнее имя PM захватывается) возвращает значение undefined для «deliveryTicketWorkflow_assignedPM». Когда он остается пустым, все работает плавно, но в разделе «Общая информация» описания рабочего процесса по-прежнему отображается диспетчер проектов как (Нет).
Это общий подход, я склонялся к, но я был под впечатлением, что вы не могли получить рабочий процесс до точки выстрела прослушиватель выполнения без заполнения всех обязательных полей (т.е. bpm: цессионарий). –
попробуйте использовать настраиваемое поле для правопреемника в стартовой форме и сделать его необязательным. Затем используйте это поле в своей первой задаче bmp как правопреемник.Я обновил ответ –
Я думал, что это решило мою проблему, потому что это сработало, когда я оставил селектор пустым, но я делаю что-то ужасно неправильно и никогда не ссылаюсь на значение селектора. Обновление исходного вопроса и повторное открытие. –