Как импортировать задачи из email от незарегистрированых пользователей
Нашим клиентам потребовалось импортировать задачи из почты, в том числе и от незарегистрированных пользователей. В TrackStudio 3.5 такая функциональность была, но вызывала массу проблем, поэтому мы от нее избавились. В TrackStudio 4.0 всё то же самое можно сделать с помощью одного триггера.
Предварительно вам следует настроить импорт задач от существующих пользователей.
Мы будем создавать задачи из электронных писем с помощью встроенного механизма импорта, но при этом проверять наличие указанного пользователя в системе и, при необходимости, регистрировать нового пользователя, прописывать ему права на проект и создавать задачу от его имени.
package scripts.before_create_task;
import com.trackstudio.app.adapter.AdapterManager;
import com.trackstudio.exception.GranException;
import com.trackstudio.external.TaskTrigger;
import com.trackstudio.kernel.manager.KernelManager;
import com.trackstudio.kernel.manager.UserManager;
import com.trackstudio.secured.SecuredTaskTriggerBean;
import com.trackstudio.tools.Null;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CreateUserFromEmail implements TaskTrigger {
public SecuredTaskTriggerBean execute(SecuredTaskTriggerBean task) throws GranException {
String s = task.getDescription();
//String userStatusId = "d14883c11eef1ae9011eef360b6f0045"; //внешние пользователи
String userStatusId = task.getSubmitter().getPrstatusId();
if (s != null && s.length() > 0) {
String emailPattern = "From:\\s*\\\"?(\\S+\\s*\\S+[^\\\"])?\\\"?\\s+(<|<)?(([-a-z0-9!#$%&'*+/=?^_`{|}~]+(\\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*)@([a-z0-9.]+))(>|>)?";
// From: max.vasenkov@gmail.com
// From: Maxim Vasenkov <max.vasenkov@gmail.com>
// From: Maxim Vasenkov <max.vasenkov@gmail.com>
// From: Winzard <i@winzard.ru>
// From: Admin <admin@localhost>
// From: "Максим Васенков" <vasenkov@any.place.com>
// From: "Максим Васенков" <vasenkov@any.place.com>
Pattern pat = Pattern.compile(emailPattern);
Matcher mat = pat.matcher(s);
if (mat.find()) {
String userName = mat.group(1);
String userEmail = mat.group(3);
if (userName == null) userName = mat.group(4);
String fId = KernelManager.getUser().findUserIdByEmailNameProject(userEmail, userName, task.getParentId());
if (fId==null){
String id = AdapterManager.getInstance().getSecuredUserAdapterManager().createUser(task.getSecure(),
Null.beNull(task.getSubmitterId()), userEmail, userName, Null.beNull(userStatusId));
AdapterManager.getInstance().getSecuredUserAdapterManager().updateUser(task.getSecure(), id,
userEmail, userName, null, userEmail, userStatusId, task.getSubmitterId(),
task.getSecure().getUser().getTimezone(), task.getSecure().getUser().getLocale(),
task.getSecure().getUser().getCompany(), null, null, null, null, true);
String aclid = AdapterManager.getInstance().getSecuredAclAdapterManager().createAcl(task.getSecure(),
task.getParentId(), null, id, null);
AdapterManager.getInstance().getSecuredAclAdapterManager().updateTaskAcl(task.getSecure(),
aclid, userStatusId, false);
if (id != null) task.setSubmitterId(id);
}
}
}
return task;
}
}
Здесь пользователь создается с той же ролью, что и указанный в правилах импорта пользователь, через которого осуществляется импорт. Пользователю даются права на вышестоящую по отношению к импортируемой задачу.
Этот Create Task/Before Trigger нужно подключить в настройках категорий тех задач, которые планируется импортировать.
| Attachment | Size |
|---|---|
| CreateUserFromEmail.java | 2.85 KB |
| CreateUserFromEmail.class | 3.71 KB |