Заполнение роли в процессе Куратором из вкладки Детали (пример скрипта для дизайнера)

Скрипт берет сотрудника из поля Куратор и проверяет наличие у него пользователя. Если пользователь есть, то подставляет его в процессную роль. Если пользователя нет, то по умолчанию проставляет инициатора.

Скрипт

import com.haulmont.cuba.core.EntityManager
import com.haulmont.cuba.core.Persistence
import com.haulmont.cuba.core.Transaction
import com.haulmont.cuba.core.global.AppBeans
import com.haulmont.cuba.core.global.Metadata
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
 
Log log = LogFactory.getLog("123");
List<ProcRole> roles = card.proc.getRoles();
Persistence persistence = AppBeans.get(Persistence.NAME)
Transaction tx = persistence.createTransaction()
try {
    EntityManager em = persistence.getEntityManager()
    ProcRole procRole = null;
    for (ProcRole pr : roles) {
        if ("wait".equals(pr.getCode())) {
            procRole = pr;
            break;
        }
    }
 
   Card reloadedCard = em.reload(card, "edit");
    if (reloadedCard.owner != null) {
        ProcRole reloadedProcRole = em.reload(procRole, "_local");
        Metadata metadata = AppBeans.get(Metadata.NAME);
        CardRole cardRole = metadata.create(CardRole.class);
        cardRole.setProcRole(reloadedProcRole);
        cardRole.setCode(reloadedProcRole.getCode());
        cardRole.setNotifyByEmail(true);
        cardRole.setNotifyByCardInfo(true);
        cardRole.setCard(reloadedCard);
        cardRole.setUser(reloadedCard.owner.user);
// cardRole.setSortOrder(1)
//        cardRole.setDuration(5);
       cardRole.setTimeUnit(TimeUnit.DAY)
       em.persist(cardRole);
       card.getRoles().add(cardRole)
    }
    tx.commit();
} finally {
    tx.end()
}