Скрипт для параллельного согласования карточки с именными ролями и состояниями. Пример, такой схемы на скриншоте.
Из-за специфики работы модуля “Ветвление” и “Объединение” с наскока такую схему реализовать не получится. Требуется скриптом вычислять, было ли отклонение и если да, то выводить карточку на доработку. В противном случае вести процесс дальше.
Ниже скриншот правильной схемы. Суть - добавляются состояния по каждому выходу, выходы группируются в пустой модуль и таким образом достигаем правила “сколько веток в ветвлении столько входов в объединение”.
Так же добавляется модуль “Выбор”, в котором вычисляется направление движения по процессу. Ниже скрипт.
ToImprovement
import com.haulmont.cuba.core.EntityManager
import com.haulmont.cuba.core.Persistence
import com.haulmont.cuba.core.Query
import com.haulmont.cuba.core.global.AppBeans
EntityManager em = AppBeans.get(Persistence.class).getEntityManager();
Query query = em.createNativeQuery("select a.id from wf_Assignment a where a.card_id = '" + card.id + "' and a.outcome in('Otkloneno_IT','Otkloneno_VB','Otkloneno_RI') and a.name in ('Na_soglasovanii_u_IT_direktora', 'Na_soglasovanii_u_vladelca_budzheta', 'Na_soglasovanii_u_ruk__iniciatora') and a.iteration = (select MAX(ass.iteration) from wf_Assignment ass where ass.card_id = '" + card.id + "' and ass.name = a.NAME)");
Object result = query.getFirstResult();
return result != null || card.state.contains("Otkloneno_IT") || card.state.contains("Otkloneno_VB") || card.state.contains("Otkloneno_RI") ;
В a.outcome указываются имена неуспешных выходов, a.name - имена этапов из ветвления, card.state.contains - перечислить состояния при неуспешных переходах.
Если есть хотя бы одно неуспешное состояние, то идем по ветке “Да” в доработку. Если иначе, то движемся дальше по процессу.