Как писать скрипты и триггеры в TrackStudio
Содержание
Принципы, на которых основана TrackStudio: универсальность и масштабируемость. Каким бы сложным и хитрым не был Ваш бизнес-процесс, можно найти способ, как реализовать его в TrackStudio. Возможно, полученный результат будет не столь изящным, как в специализированных под требуемую задачу системах (если таковые вообще существуют), и тем не менее, это будет рабочий инструмент.
Дополнительную функциональность в TrackStudio можно реализовать с помощью скриптов и триггеров. Скрипты обычно соответствуют вычисляемым дополнительным полям различных типов. Триггеры соответствуют событиям, происходящим с задачами, а именно: созданию задач, их редактированию и выполнению операций над ними. Скрипты вычисляются всякий раз при просмотре задачи, когда нужно отобразить значение поля, триггеры - при выполнении ассоциированных действий.
Скрипты и триггеры могут быть двух видов: интерпретируемые и скомпилированные. Интерпретируемые скрипты - это java-код, обрабатываемый интерпретатором Beanshell. Писать такие скрипты несколько проще, чем скомпилированные, т.к. не требуется согласования типов данных и наличия JDK для компиляции.
Скомпилированные же скрипты имеют ряд серьезных преимуществ:
- во-первых, они выполняются быстрее из-за того, что не нужно загружать и инициализировать интерпретатор
- во-вторых, если скрипт скомпилировался - там хотя бы нет синтаксических ошибок
- в-третьих, в скомпилированных скриптах вы можете использовать всю мощь языка Java. Например, наследование и статические переменные
Как писать скрипты и триггеры?
Для того, чтобы писать и компилировать скрипты и триггеры вам понадобится: JDK (java development kit), который можно скачать с сайта http://java.com (обратите внимание, именно JDK, а не JRE).
Вам потребуется файл trackstudio.jar (располагается в /webapps/TrackStudio/WEB-INF/lib/trackstudio.jar), который есть в любом варианте поставки TrackStudio. И лучше, если вы будете использовать какую-либо IDE, например IDEA, Eclipse или Netbeans.
Все скрипты и триггеры должны реализовывать один из интерфейсов:
com.trackstudio.external.TaskBulkProcessor - для триггеров, выполняющихся над выбранными из списка задачами
com.trackstudio.external.TaskTrigger - для триггеров, выполняющихся при создании или редактировании задачи
com.trackstudio.external.TaskUDFLookupScript - для наборов возможных значений дополнительных полей к задачам
com.trackstudio.external.TaskUDFValueScript - для значений дополнительных полей к задачам
com.trackstudio.external.UserUDFLookupScript - для наборов возможных значений дополнительных полей к пользователям
com.trackstudio.external.UserUDFValueScript - для значений дополнительных полей к пользователям
Кроме того, скомпилированные скрипты должны находиться в пакетах в соответствии со структурой папок внутри plugins в TrackStudio. Например, для скрипта, реализующего триггер Before Add Message путь должен быть
А пакет, соответственно scripts.before_add_message
package scripts.before_add_message;
import com.trackstudio.exception.GranException;
import com.trackstudio.exception.UserException;
import com.trackstudio.external.OperationTrigger;
import com.trackstudio.secured.SecuredMessageTriggerBean;
import com.trackstudio.tools.textfilter.HTMLEncoder;
public class CheckSpentTimeScript implements OperationTrigger {
public static final int TIME_LIMIT = 1; /** time limit in milliseconds */
public static final int K = 20; /** conversion factors */
@Override
public SecuredMessageTriggerBean execute(SecuredMessageTriggerBean message) throws GranException {
String desc = HTMLEncoder.stripHtmlTags(message.getDescription());
if (message.getHrs() != null && message.getHrs() > TIME_LIMIT && desc.length()/message.getHrs() < K){
throw new UserException("Please "+ message.getSubmitter().getName()+", describe what you did at that time!");
}
return message;
}
}
Скомпилировать такой скрипт можно командой
javac -cp path/trackstudio.jar CheckSpentTimeScript.java
Но лучше воспользоваться какой-нибудь IDE.
Далее можно либо положить полученный класс в папку ./etc/plugins/scripts/before_add_message/, либо создать jar
cd ../../ jar cf myscripts.jar scripts
И положить его в папку ./etc/plugins/scripts.