Скрипт 1 изменяет инициатора на другого пользователя и скрипт 2 высылает уведомление прежнему инициатору.
Скрипт 1. Изменяет инициатора на другого пользователя
import com.haulmont.cuba.security.entity.User
import com.haulmont.thesis.core.entity.Doc
import com.haulmont.workflow.core.entity.CardRole
Doc doc = ((Doc) card);
User initiator = null
for (CardRole role : doc.roles) {
if (role.getCode().equals("Initiator")) {
initiator = role.getUser()
}
}
for (CardRole role : doc.roles) {
if (role.getCode().equals("Сотрудник БСС")) {
if (role.getUser().equals(initiator)) {
return false
}
}
}
return true
Скрипт 2. Высылает уведомление прежнему инициатору
import com.haulmont.cuba.core.EntityManager
import com.haulmont.cuba.core.Persistence
import com.haulmont.cuba.core.Query
import com.haulmont.cuba.core.Transaction
import com.haulmont.cuba.core.global.AppBeans
import com.haulmont.cuba.core.global.View
import com.haulmont.cuba.security.entity.User
import com.haulmont.thesis.core.entity.Doc
import com.haulmont.workflow.core.app.MailService
import com.haulmont.workflow.core.entity.CardRole
import org.apache.commons.collections.CollectionUtils
Doc doc = ((Doc) card);
Persistence persistence = AppBeans.get(Persistence.class)
Transaction tr = persistence.createTransaction()
try {
EntityManager em = persistence.entityManager
Query query = em.createQuery("select u from sec\$User u where u.userRoles in (select ur from sec\$UserRole ur where ur.role.name = :currentRole)")
.setParameter("currentRole", "bss");
query.setView(User.class, View.MINIMAL)
List bssUsers = query.getResultList()
if (CollectionUtils.isEmpty(bssUsers)) {
return
}
User initiatorUser = null
User bssUser = (User) bssUsers.get(0)
for (CardRole role : doc.roles) {
if (role.getCode().equals("Initiator")) {
if (bssUsers.contains(role.getUser())) {
return
} else {
initiatorUser = role.getUser()
role.setUser(bssUser)
}
}
}
MailService mailService = AppBeans.get(MailService.NAME);
String subject = "Смена инициатора по документу " + doc.getDescription()
String body = "Смена инициатора по документу " + doc.getDescription() + ". Новый инициатор: " + bssUser.instanceName
mailService.sendEmail(initiatorUser, subject, body);
tr.commit()
} catch (Exception e) {
throw new RuntimeException(e)
} finally {
tr.end()
}