1.6. Шина Событий

EventBus: TbtkScriptEventBusObject

Объект, реализующий методы для работы с шиной событий.

Аттрибут только для чтения

Return type:TbtkScriptEventBusObject

1.6.1. TbtkScriptSelectionEventObject

class TbtkScriptSelectionEventObject

Класс события выборки. Экземпляр этого объекта автоматически создаётся для каждого события, и автоматически разрушается после обработки во всех обработчиках.

Representation: String

Отображение выборки, из которой отправили сообщение. Присваивается автоматически.

Аттрибут только для чтения

Return type:String
EntityName: String

Системное имя выборки, из которой отправили сообщение. Присваивается автоматически.

Аттрибут только для чтения

Return type:String
SelectionId: String

ID выборки, из которой отправили сообщение. Присваивается автоматически.

Аттрибут только для чтения

Return type:String
TopicName: String

Имя подписки. Указываются при отсылке для персонализации получателя.

Аттрибут только для чтения

Return type:String
Args: TbtkNamedArgs

Набор именованных аргументов данного события. Может быть указано при отсылке.

Return type:TbtkNamedArgs

Attention

Значения аргументов свойства Args, доступны на запись. Это связано с особенностями реализации этого свойства. Настоятельно не рекомендуется использовать эту особенность в прикладной логике, т.к. изменения этих аргументов могут повлиять на работу ещё не вызванных обработчиков этого события. Кроме того поддержка описанного поведения не гарантируется с выходом новых версий Global.

Name: String

Системное имя события. Указывается при отсылке.

Аттрибут только для чтения

Return type:String

1.6.2. TbtkScriptEventBusObject

class TbtkScriptEventBusObject

Основные положения

  • Шина событий предназначена для обмена сообщениями между выборками, в том числе не связанными отношением мастер-деталь.
  • Шина событий является единой для всего приложения.
  • Шина событий позволяет обеспечивать взаимодействие между выборками по принципам: один к одному, один ко многим, многие к одному и многие ко многим.
  • Шина событий обеспечивает только однонаправленное взаимодействие, предназначенное, прежде всего, для оповещения о происходящих событиях и передачи связанных с этими событиями каких-либо данных.
  • У каждого события передаваемого по Шине событий может быть как множество обработчиков, так и не быть ни одного обработчика вовсе.
  • Обработчики событий не могут прерывать, отменять или изменять порядок вызова других обработчиков этих событий.
  • Порядок вызова обработчиков событий не зависит от порядка их регистрации или каких-либо свойств обработчиков, и не может изменяться каким-либо образом. При отправке событий по Шине необходимо быть уверенным в том, что порядок вызова обработчиков не играет никакой роли, и не будет сказываться на работоспособности приложения.
  • Возникновение исключений в обработчиках события не прерывает процесс вызова других обработчиков этого события.
  • Шина событий не предоставляет возможности получить информацию об обработчиках подписанных на какое-либо событие и их количестве.
Unhook(Selection: TbtkScriptSelectionObject; FilterArgs: TbtkNamedArgs=nil)

Отписка от всех событий, ограниченных фильтром.

Parameters:
  • Selection (TbtkScriptSelectionObject) – Выборка для которой осуществляется отписка.
  • FilterArgs (TbtkNamedArgs) – Настройки фильтрации, для которых необходимо осуществить отписку.
Пример использования
<PASCAL>
  EventBus.Unhook(Selection)); //отписка от всех событий передаваемых по шине.
  EventBus.Unhook(Selection, CreateArgs(['EventName', 'TestEvent'])); //отписка от всех событий, ограниченные фильтром.
</PASCAL>
Unsubscribe(Selection: TbtkScriptSelectionObject; TopicName: String; FilterArgs: TbtkNamedArgs=nil)

Отписка от событий, по топику и фильтрам.

Parameters:
  • Selection (TbtkScriptSelectionObject) – Выборка для которой осуществляется отписка.
  • TopicName (String) – Имя подписки.
  • FilterArgs (TbtkNamedArgs) – Настройки фильтрации, для которых осуществляется отписка.
Пример использования
<PASCAL>
  //отписка от события без дополнительных условий фильтрации.
  EventBus.Unsubscribe(Selection, 'TopicX'));

  //отписка от события с дополнительными условиями фильтрации.
  EventBus.Unsubscribe(Selection, 'TestTopic', CreateArgs(['EventName', 'TestEvent']));
</PASCAL>
Hook(Selection: TbtkScriptSelectionObject; FilterArgs: TbtkNamedArgs=nil)

Подписка на все события, ограниченные фильтром.

Parameters:
  • Selection (TbtkScriptSelectionObject) – Выборка для которой осуществляется подписка.
  • FilterArgs (TbtkNamedArgs) – Настройки фильтрации, для которых осуществляется подписка.
Пример использования
<PASCAL>
  EventBus.Hook(Selection)); //подписка на все события передаваемые по шине.
  EventBus.Hook(Selection, CreateArgs(['EventName', 'TestEvent'])); //подписка на все события, ограниченные фильтром.
</PASCAL>
Subscribe(Selection: TbtkScriptSelectionObject; TopicName: String; FilterArgs: TbtkNamedArgs=nil)

Подписка на события для конкретного топика.

Parameters:
  • Selection (TbtkScriptSelectionObject) – Выборка для которой осуществляется подписка.
  • TopicName (String) – Имя подписки.
  • FilterArgs (TbtkNamedArgs) – Настройки фильтрации, для которых осуществляется подписка.
Пример использования
<PASCAL>
  //подписка на событие без дополнительных условий фильтрации
  EventBus.Subscribe(Selection, 'TopicX'));

  //подписка на событие с дополнительными условиями фильтрации
  EventBus.Subscribe(Selection, 'TestTopic', CreateArgs(['EventName', 'TestEvent']));
</PASCAL>
Post(TopicName, EventName: String; EventArgs: TbtkNamedArgs=nil)

Асинхронная отсылка сообщений.

Вызов обработчиков событий отправленных асинхронно, откладывается и выполняется с помощью асинхронных команд.

Parameters:
  • TopicName (String) – Имя подписки.
  • EventName (String) – Имя отправляемого события.
  • EventArgs (TbtkNamedArgs) – Аргументы события. Для создания и передачи аргументов можно использовать метод TatInternalObject.CreateArgs
Пример использования
<PASCAL>
  //отправка события без аргументов
  EventBus.Post('TopicName', 'EventName');

  //отправка события с аргументами
  EventBus.Post('TopicName', 'EventName', CreateArgs(['Arg1','Value1','Arg2','Value2']));
</PASCAL>
Send(TopicName, EventName: String; EventArgs: TbtkNamedArgs=nil)

Cинхронная отсылка сообщений.

Вызов обработчиков событий отправленных синхронно выполняется сразу при отправке.

Parameters:
  • TopicName (String) – Имя подписки.
  • EventName (String) – Имя отправляемого события.
  • EventArgs (TbtkNamedArgs) – Аргументы события. Для создания и передачи аргументов можно использовать метод TatInternalObject.CreateArgs
Пример использования
<PASCAL>
  //отправка события без аргументов
  EventBus.Send('TopicName', 'EventName');

  //отправка события с аргументами
  EventBus.Send('TopicName', 'EventName', CreateArgs(['Arg1','Value1','Arg2','Value2']));
</PASCAL>