# Скрипт взятия в работу одному из всех назначенных (пример скрипта для дизайнера) **Category:** [Дизайнер процессов](https://community.tezis-doc.ru/c/workflow-guides/44) **Created:** 2024-07-02 07:56 UTC **Views:** 176 **Replies:** 0 **URL:** https://community.tezis-doc.ru/t/skript-vzyatiya-v-rabotu-odnomu-iz-vseh-naznachennyh-primer-skripta-dlya-dizajnera/266 --- ## Post #1 by @d.slepnev Скрипт переводит в работу на пользователя, который на этапе параллельного назначения на всех, нажал кнопку "В работу". При этом пользователь автоматически получает роль "Ответственный". Дополнительно в скрипте указана проверка: в зависимости от наименования вида созданного документа Ответственному задается определенная длительность выполнения задания в днях (При проставленной галке по заданию длительности в процессе). ![image|690x471](upload://yothKzXY2P3mCGD3ZHEmj1TK906.png) В скрипте заполнить: наименования выхода и блока с параллельным назначением, роль участника процесса, наименование видов документов и их длительность. **Скрипт** ``` import com.haulmont.cuba.core.EntityManager import com.haulmont.cuba.core.Persistence import com.haulmont.cuba.core.Transaction import com.haulmont.cuba.core.global.* import com.haulmont.thesis.core.entity.SimpleDoc import com.haulmont.workflow.core.entity.Card import com.haulmont.workflow.core.entity.CardRole import com.haulmont.workflow.core.entity.ProcRole import com.haulmont.workflow.core.global.TimeUnit import org.apache.commons.logging.Log import org.apache.commons.logging.LogFactory DataManager dataManager = AppBeans.get(DataManager.NAME) UserSessionSource session = AppBeans.get(UserSessionSource.NAME) /*List assignments = new ArrayList<>() for (Assignment assignment : (((Card) card).getAssignments())) { if (assignment.getOutcome() == "V_rabotu" && assignment.finishedByUser != null && assignment.getName() == "Na_ispolnenii___ne_nachato") { assignments.add(assignment) } }*/ /* LoadContext ctx = new LoadContext(Assignment.class) ctx.setUseSecurityConstraints(false) .setView("browse") .setQueryString("select a from wf\$Assignment a where a.card.id=:cardId and a.name ='Na_ispolnenii___ne_nachato' and a.outcome ='V_rabotu' order by a.finished desc ") .setParameter("cardId", card) assignments = dataManager.loadList(ctx) tx.commit()*/ //проставить пользователя из finishedBy в роль по задаче. Log log = LogFactory.getLog("123") List roles = card.proc.getRoles() Persistence persistence = AppBeans.get(Persistence.NAME) Transaction tx2 = persistence.createTransaction() try { EntityManager em = persistence.getEntityManager() ProcRole procRole = null for (ProcRole pr : roles) { if ("Ответственный".equals(pr.getCode())) { procRole = pr break } } Card reloadedCard = em.reload((Card) card, "edit") as Card ProcRole reloadedProcRole = em.reload(procRole, "_local") Metadata metadata = AppBeans.get(Metadata.NAME) //ищем Ответственный среди ролей LoadContext ctx = new LoadContext(CardRole.class) ctx.setUseSecurityConstraints(false) .setView("transition-form") .setQueryString("select c from wf\$CardRole c where c.card.id=:cardId and c.code ='Ответственный'") .setParameter("cardId", card) CardRole registrarCardRole = dataManager.load(ctx) CardRole cardRole // если Ответственный уже есть, то используем его, иначе - создаем новую роль if (registrarCardRole == null) cardRole = metadata.create(CardRole.class) else cardRole = registrarCardRole cardRole.setProcRole(reloadedProcRole) cardRole.setCode(reloadedProcRole.getCode()) cardRole.setNotifyByEmail(true) cardRole.setNotifyByCardInfo(true) cardRole.setCard(reloadedCard) cardRole.setUser(session.getUserSession().currentOrSubstitutedUser) // cardRole.setSortOrder(1) //время "завершить к" if (reloadedCard instanceof SimpleDoc && reloadedCard.docKind != null) { if ("Заявка на курьера".equals(reloadedCard.docKind.name)) { cardRole.setDuration(7) cardRole.setTimeUnit(TimeUnit.DAY) } if ("Заказ материальных ценностей".equals(reloadedCard.docKind.name)) { cardRole.setDuration(10) cardRole.setTimeUnit(TimeUnit.DAY) } if ("Заявка на командирование".equals(reloadedCard.docKind.name)) { cardRole.setDuration(10) cardRole.setTimeUnit(TimeUnit.DAY) } if ("Заявка на нотариально-заверенную копию документа".equals(reloadedCard.docKind.name)) { cardRole.setDuration(5) cardRole.setTimeUnit(TimeUnit.DAY) } } if (registrarCardRole == null) { em.persist(cardRole) card.getRoles().add(cardRole) } else em.merge(cardRole) tx2.commit() } finally { tx2.end() } ``` --- **Canonical:** https://community.tezis-doc.ru/t/skript-vzyatiya-v-rabotu-odnomu-iz-vseh-naznachennyh-primer-skripta-dlya-dizajnera/266 **Original content:** https://community.tezis-doc.ru/t/skript-vzyatiya-v-rabotu-odnomu-iz-vseh-naznachennyh-primer-skripta-dlya-dizajnera/266