Перейти к основному содержимому

События

Netuno позволяет внедрять события на определённой фазе выполнения.
Например, можно внедрить событие, которое выполняется непосредственно перед тем, как setup построит базу данных
(это примерно соответствует определению скрипта в netuno/apps/мое_приложение/server/setup/_start.js)
или событие, которое выполняется сразу после завершения процесса построения базы данных
(это было бы аналогично netuno/apps/мое_приложение/server/setup/_end.js).

Для этого нам нужно расширить класс org.netuno.tritao.event.EventBase. Также определим наш пакет, который будет тем же, что был определён в предыдущих руководствах по сервисам и ресурсам Java Core.

package org.netuno.addon.калькулятор.событие;

import org.netuno.tritao.event.EventBase;

public class СобытиеНачалаНастройки extends EventBase {
// ...
}

Затем создаём конструктор, который использует конструктор суперкласса EventBase для инициализации события:

package org.netuno.addon.калькулятор.событие;

import org.netuno.proteu.Proteu;
import org.netuno.tritao.event.EventBase;
import org.netuno.tritao.hili.Hili;

public class СобытиеНачалаНастройки extends EventBase {

public СобытиеНачалаНастройки(Proteu proteu, Hili hili) {
// ...
}
}

Помимо объектов типа Proteu и Hili, нам нужно передать в конструктор суперкласса тип события. Типы событий определены в import org.netuno.tritao.event.EventId. Также нужно передать в конструктор целое число, представляющее порядок выполнения события.
Таким образом, регистрируя несколько событий для одного и того же типа события, можно управлять тем, какое из событий выполнится первым, какое — сразу после него, и так далее.
Число вроде 100 подходит, потому что можно добавить другие события, которые выполнятся до него (например, 50).

package org.netuno.addon.калькулятор.событие;

import org.netuno.proteu.Proteu;
import org.netuno.tritao.event.EventBase;
import org.netuno.tritao.hili.Hili;
import org.netuno.tritao.event.EventId;

public class СобытиеНачалаНастройки extends EventBase {

public СобытиеНачалаНастройки(Proteu proteu, Hili hili) {
super(proteu, hili, EventId.SETUP_START, 100);
}
}

Для справки полный список всех доступных типов событий можно найти здесь:

Возвращаясь к нашему коду, завершим, переопределив функцию run:

package org.netuno.addon.калькулятор.событие;

import org.netuno.proteu.Proteu;
import org.netuno.psamata.Values;
import org.netuno.tritao.event.EventBase;
import org.netuno.tritao.event.EventId;
import org.netuno.tritao.hili.Hili;

public class СобытиеНачалаНастройки extends EventBase {

public СобытиеНачалаНастройки(Proteu proteu, Hili hili) {
super(proteu, hili, EventId.SETUP_START, 100);
}

@Override
public void run(Values данные) {
System.out.println("ПОЛЬЗОВАТЕЛЬСКОЕ СОБЫТИЕ НАЧАЛА НАСТРОЙКИ "+ данные.toJSON());
}

}

Аргумент данные служит для того, чтобы событие получало дополнительные данные. Пока он используется только в событиях, связанных с действиями. Например, можно создать событие, которое выполняется каждый раз, когда что-то сохраняется в базе данных, и затем пишет сообщение в консоль Netuno:

package org.netuno.addon.калькулятор.событие;

import org.netuno.proteu.Proteu;
import org.netuno.psamata.Values;
import org.netuno.tritao.db.DataItem;
import org.netuno.tritao.event.EventBase;
import org.netuno.tritao.event.EventId;
import org.netuno.tritao.hili.Hili;

public class СобытиеСохраненияДействия extends EventBase {

public СобытиеСохраненияДействия(Proteu proteu, Hili hili) {
super(proteu, hili, EventId.ACTION_SAVE, 100);
}

@Override
public void run(Values данные) {
DataItem элементДанных = данные.get("dataItem");
System.out.println("СОХРАНЕНИЕ " + элементДанных.getFormName());
// или
System.out.println("СОХРАНЕНИЕ " + данные.get("dataItem", DataItem.class).getFormName());
}

}

Теперь остаётся только скомпилировать класс, убедившись, что файл .class находится в папке:

  • netuno/core/web/WEB-INF/classes/org/netuno/addon/калькулятор/событие/

Или создать файл JAR, убедившись, что он находится в папке:

  • netuno/lib/

Полные файлы проекта можно посмотреть по этой ссылке.