Как писать и отлаживать скрипты и триггеры под IntelliJ IDEA

Дополнительную функциональность в TrackStudio можно реализовать с помощью скриптов и триггеров. Скрипты обычно соответствуют вычисляемым дополнительным полям различных типов. Триггеры соответствуют событиям, происходящим с задачами, а именно: созданию задач, их редактированию и выполнению операций над ними. Скрипты вычисляются всякий раз при просмотре задачи, когда нужно отобразить значение поля, триггеры - при выполнении ассоциированных действий.

Скрипты и триггеры могут быть двух видов: интерпретируемые и скомпилированные. Интерпретируемые скрипты - это java-код, обрабатываемый интерпретатором Beanshell. Писать такие скрипты несколько проще, чем скомпилированные, т.к. не требуется согласования типов данных и наличия JDK для компиляции.
Скомпилированные же скрипты имеют ряд серьезных преимуществ:

  • во-первых, они выполняются быстрее из-за того, что не нужно загружать и инициализировать интерпретатор
  • во-вторых, если скрипт скомпилировался — в нем хотя бы нет синтаксических ошибок
  • в-третьих, в скомпилированных скриптах вы можете использовать всю мощь языка Java. Например, наследование и статические переменные

Удобнее всего писать скрипты в IDE (интегрированной среде разработки).

IntelliJ IDEA — кроссплатформенная коммерческая интегрированная среда разработки приложений от компании JetBrains. Установить IDEA можно и на Windows, и на Linux, и на OS X. На сайте JetBrains доступна бесплатная Community Edition с урезанной функциональностью, которой, однако, с лихвой хватит для разработки скриптов для TrackStudio.

  1. Установите и запустите IntelliJ IDEA.
  2. На странице Quick Start нажмите ссылку Create New Project
  3. То же действие можно выполнить через меню FileNew Project

  1. Выберите Create project from scratch и нажмите кнопку Next
  2. Введите название проекта и прочие аттрибуты

  1. Укажите JDK для проекта

  1. Завершите создание проекта
  2. Перейдите в меню FileProject Structure
  3. Выберите вкладку Libraries
  4. Добавьте библиотеку. Задайте название для нее
  5. Нажмите кнопку Attach Classes
  6. Выберите библиотеку trackstudio.jar (webapps/TrackStudio/WEB-INF-lib/trackstudio.jar)

  1. Нажмите кнопку OK

На этом создание и настройка проекта закончена. Напишем и скомпилируем какой-нибудь скрипт, использующий TrackStudio API. Например, скрипт, выводящий список участников задачи (из примеров)

  1. В левой панели откройте папку вашего проекта и на подпапке src кликните правой кнопкой мыши
  2. В открывшемся меню выберите NewClass

  1. Введите название класса: scripts.task_custom_field_value.Participants
  2. В редакторе после определения класса допишите implements TaskUDFValueScript. Обратите внимание, что IDEA сразу же предлагает вам автодополнения для зарезервированных слов и подключенных через библиотеки классов.
  3. Вставьте метод calculate из примера или напишите свой.

IDEA выделит красным цветом классы, которые пока не импортированы в редактируемый. Подведите курсор к любому такому классу и нажмите Alt-Enter.

После устранения всех синтаксических ошибок скомпилируйте класс Participants. Это можно сделать через меню Build.
В папке IdeaProjects/myscripts/out/production/myscripts/scripts/task_custom_field_value должен появиться класс Participants.class. Этот класс, а лучше — всю папку scripts, скопируйте в папку etc/plugins вашего экземпляра TrackStudio. Папки scripts при этом должны совместиться.

Отладка скриптов

  1. Откройте в любом текстовом редакторе (не в Word) файл startJetty.vmoptions, который лежит в корне вашего экземпляра TrackStudio.
  2. Добавьте в его конец строку -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
  3. Запустите ваш экземпляр TrackStudio
  4. Перейдите в IDEA в меню RunDebug
  5. Создайте конфигурацию Remote
  6. Введите номер порта 5005

  1. Нажмите кнопки Apply и Debug
  2. Точку останова в классе можно поставить, просто кликнув на пустое поле слева в строке кода. Поставьте одну точку останова где-нибудь в начале метода calculate класса Participants

  1. Откройте браузер
  2. Откройте в нем ваш экземпляр TrackStudio и войдите в систему
  3. Создайте для какого-нибудь процесса дополнительное поле типа "Пользователь" и подключите к нему класс Participants

Далее перейдите к задаче, использующей это вычисляемое поле. Если всё сделано правильно, выполнение скрипта должно остановиться в указанной точке. В IDEA подсветится строчка кода в точке остановки, а в отладочном окне внизу появится отладочная информация.

Во вкладке Variables вы можете увидеть объявленные в области видимости переменные и их значения.
Кнопка Resume Program (F9) продолжит выполнение кода до следующей точки останова. Кнопка Step Over (F8) выполнит текущую строчку кода без захода внутрь метода. Кнопка Step Into (F7) выполняет строчку с заходом в методпросто выполняет строчку, без захода в метод, если в данной строчке вызывается метод какого-нибудь класса. Кнопка Step Out (Shift-F8) выполняет весь код до выхода из метода и передает управление "наверх".

Использование TrackStudio API

Подключите к IDEA документацию TrackStudio Javadoc, которая расположена в папке docs вашего экземпляра TrackStudio. Для этого:

  1. Перейдите в меню FileProject Structure
  2. Выберите вкладку Libraries
  3. Выберите библиотеку trackstudio
  4. Нажмите кнопку Attach Documentation
  5. Укажите папку javadoc вашего экземпляра TrackStudio (docs/javadoc)
  6. Нажмите кнопку Apply

Подведите курсор к названию какого-нибудь класса или метода и нажмите Ctrl-Q. Во всплывающем окне появится подсказка с текстом из javadoc.

Автодополнение названий классов и методов работает в IntelliJ IDEA автоматически по мере набора.

Если у вас все же возникли трудности, посмотрите видео.