Как использовать настройки операций по расписанию
В системе введен новый тип скриптов. Они используются для работы с автоматическими задачами : рассылка, импорт, синхронизация с репозиториями (стандартные автоматические работы). Пользователи могут написать свои скрипты.
Скрипты разделяются на два типа.
- Базовый -
/**
* This interface should be implement general scheduler job
*/
public interface IGeneralScheduler {
/**
* This method returns a mask for cron
* @return mask cron time. For example 0 1 * * *
*/
public String getCronTime();
/**
* This method returns a name of job
* @return names job
*/
public String getName();
/**
* This method implements jobs actions
*/
public String execute();
/**
* Switcher
* @return true if scheduler should be used
*/
public boolean isUse();
}
Скрипт должен расширять IGeneralScheduler интерфейс. Частота вызова скрипты прописывается в синтаксисе quartz
Пример.
package scripts.scheduler.example;
import com.trackstudio.external.IGeneralScheduler;
public class CommonJob implements IGeneralScheduler {
@Override
public String getCronTime() {
return "0 0/1 * * * ?"; //every minute
}
@Override
public String getName() {
return "scheduler example"
}
@Override
public void execute() {
System.out.println(" execute ");
}
@Override
public boolean isUse() {
return true;
}
}
далее нужно прописать данный скрипт в настройках trackstudio.adapter.properties
handler.service example.CommonJob.class;
- Конкретизированный для категории -
Второй тип скриптов конкретизирован для категорий. Интерфейс ICategoryScheduler
package com.trackstudio.external;
import com.trackstudio.kernel.cache.TaskRelatedInfo;
/**
* This interface should be implement for observed tasks concrete category
*/
public interface ICategoryScheduler {
/**
* This method returns a category ID
* @return category ID
*/
public String getCategoryId();
/**
* This method returns a mask for cron
* @return mask cron time. For example 0 1 * * *
*/
public String getCronTime();
/**
* This method returns a name of job
* @return names job
*/
public String getName();
/**
* This method defines actions for task.
* @param task TaskRelatedInfo
*/
public void execute(TaskRelatedInfo task);
}
Пример перевода задачи из закрытого состояния в папку архив.
package scripts.scheduler.example;
import com.trackstudio.app.adapter.AdapterManager;
import com.trackstudio.app.filter.TaskFValue;
import com.trackstudio.app.session.SessionContext;
import com.trackstudio.app.session.SessionManager;
import com.trackstudio.external.ICategoryScheduler;
import com.trackstudio.kernel.cache.TaskRelatedInfo;
import com.trackstudio.kernel.cache.UserRelatedManager;
import com.trackstudio.kernel.manager.KernelManager;
import com.trackstudio.secured.SecuredTaskBean;
import java.util.List;
import static com.trackstudio.tools.textfilter.MacrosUtil.getListTask;
public class ArchiveBugsJob implements ICategoryScheduler {
@Override
public String getCategoryId() {
return "4028808a1951e21b01195245ff4200c1";
}
@Override
public String getCronTime() {
return "0/30 * * * * ?";
}
@Override
public String getName() {
return "example category scheduler";
}
@Override
public void execute(TaskRelatedInfo task) {
try {
System.out.println("Scheduler actions : " + task.getId());
String sessionId = SessionManager.getInstance().create(UserRelatedManager.getInstance().find("1")); // root
SessionContext sc = SessionManager.getInstance().getSessionContext(sessionId);
String filterId = "1";
TaskFValue taskFValue = KernelManager.getFilter().getTaskFValue(filterId);
TaskRelatedInfo parent = new TaskRelatedInfo(task.getParentId());
List<SecuredTaskBean> list = getListTask(new SecuredTaskBean(parent, sc), taskFValue, filterId);
for (SecuredTaskBean stb : list) {
if (stb.getStatus().isFinish()) {
AdapterManager.getInstance().getSecuredTaskAdapterManager().pasteTasks(sc, "4028808a1951e21b011952d1e6ef03a0", stb.getId(), "CUT");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Далее для этого типа скриптов нет необходимости прописывать их в properties. Активация привязана в состоянию задачи данной категории. В настройках процесса данной категории в разделе операции, есть закладка - "Настройка операции по наблюдению".
Для активации нужно отметить операцию - Наблюдать по расписанию.
После выполнения этой операции задача попадает в список для обработки скриптом task - public void execute(TaskRelatedInfo task).
Для деактивации нужно создавать новую операцию -Завершить наблюдение по расписанию. После выполнения этой операции задача удаляется из списка для обработки скриптом.
Все скрипты нужно собирать в jar архив и размешать в etc/plugins/scripts/