Шина Событий ---------------------------------------------------------------------- .. pas:attribute:: EventBus: TbtkScriptEventBusObject Объект, реализующий методы для работы с шиной событий. Атрибут только для чтения :rtype: TbtkScriptEventBusObject TbtkScriptSelectionEventObject `````````````````````````````````````````````````````````````````````` .. pas:class:: TbtkScriptSelectionEventObject Класс события выборки. Экземпляр этого объекта автоматически создаётся для каждого события, и автоматически разрушается после обработки во всех обработчиках. .. warning:: |not_supported| .. pas:attribute:: Representation: String Отображение выборки, из которой отправили сообщение. Присваивается автоматически. Атрибут только для чтения :rtype: String .. pas:attribute:: EntityName: String Системное имя выборки, из которой отправили сообщение. Присваивается автоматически. Атрибут только для чтения :rtype: String .. pas:attribute:: SelectionId: String ID выборки, из которой отправили сообщение. Присваивается автоматически. Атрибут только для чтения :rtype: String .. pas:attribute:: TopicName: String Имя подписки. Указываются при отсылке для персонализации получателя. Атрибут только для чтения :rtype: String .. pas:attribute:: Args: TbtkNamedArgs Набор именованных аргументов данного события. Может быть указано при отсылке. :rtype: TbtkNamedArgs .. attention:: Значения аргументов свойства *Args*, доступны на запись. Это связано с особенностями реализации этого свойства. Настоятельно не рекомендуется использовать эту особенность в прикладной логике, т.к. изменения этих аргументов могут повлиять на работу ещё не вызванных обработчиков этого события. Кроме того поддержка описанного поведения не гарантируется с выходом новых версий Global. .. pas:attribute:: Name: String Системное имя события. Указывается при отсылке. Атрибут только для чтения :rtype: String TbtkScriptEventBusObject `````````````````````````````````````````````````````````````````````` .. pas:class:: TbtkScriptEventBusObject .. rubric:: Основные положения - Шина событий предназначена для обмена сообщениями между выборками, в том числе не связанными отношением мастер-деталь. - Шина событий является единой для всего приложения. - Шина событий позволяет обеспечивать взаимодействие между выборками по принципам: один к одному, один ко многим, многие к одному и многие ко многим. - Шина событий обеспечивает только однонаправленное взаимодействие, предназначенное, прежде всего, для оповещения о происходящих событиях и передачи связанных с этими событиями каких-либо данных. - У каждого события передаваемого по Шине событий может быть как множество обработчиков, так и не быть ни одного обработчика вовсе. - Обработчики событий не могут прерывать, отменять или изменять порядок вызова других обработчиков этих событий. - Порядок вызова обработчиков событий не зависит от порядка их регистрации или каких-либо свойств обработчиков, и не может изменяться каким-либо образом. При отправке событий по Шине необходимо быть уверенным в том, что порядок вызова обработчиков не играет никакой роли, и не будет сказываться на работоспособности приложения. - Возникновение исключений в обработчиках события не прерывает процесс вызова других обработчиков этого события. - Шина событий не предоставляет возможности получить информацию об обработчиках подписанных на какое-либо событие и их количестве. .. pas:method:: Unhook(Selection: TbtkScriptSelectionObject; FilterArgs: TbtkNamedArgs=nil) Отписка от всех событий, ограниченных фильтром. :param TbtkScriptSelectionObject Selection: Выборка для которой осуществляется отписка. :param TbtkNamedArgs FilterArgs: Настройки фильтрации, для которых необходимо осуществить отписку. .. code-block:: delphi :caption: Пример использования EventBus.Unhook(Selection); //отписка от всех событий передаваемых по шине. EventBus.Unhook(Selection, CreateArgs(['EventName', 'TestEvent'])); //отписка от всех событий, ограниченные фильтром. .. pas:method:: Unsubscribe(Selection: TbtkScriptSelectionObject; TopicName: String; FilterArgs: TbtkNamedArgs=nil) Отписка от событий, по топику и фильтрам. :param TbtkScriptSelectionObject Selection: Выборка для которой осуществляется отписка. :param String TopicName: Имя подписки. :param TbtkNamedArgs FilterArgs: Настройки фильтрации, для которых осуществляется отписка. .. code-block:: delphi :caption: Пример использования //отписка от события без дополнительных условий фильтрации. EventBus.Unsubscribe(Selection, 'TopicX'); //отписка от события с дополнительными условиями фильтрации. EventBus.Unsubscribe(Selection, 'TestTopic', CreateArgs(['EventName', 'TestEvent'])); .. pas:method:: Hook(Selection: TbtkScriptSelectionObject; FilterArgs: TbtkNamedArgs=nil) Подписка на все события, ограниченные фильтром. :param TbtkScriptSelectionObject Selection: Выборка для которой осуществляется подписка. :param TbtkNamedArgs FilterArgs: Настройки фильтрации, для которых осуществляется подписка. .. code-block:: delphi :caption: Пример использования EventBus.Hook(Selection); //подписка на все события передаваемые по шине. EventBus.Hook(Selection, CreateArgs(['EventName', 'TestEvent'])); //подписка на все события, ограниченные фильтром. .. seealso:: :ref:`События шины, отправляемые клиентом Global`. .. pas:method:: Subscribe(Selection: TbtkScriptSelectionObject; TopicName: String; FilterArgs: TbtkNamedArgs=nil) Подписка на события для конкретного топика. :param TbtkScriptSelectionObject Selection: Выборка для которой осуществляется подписка. :param String TopicName: Имя подписки. :param TbtkNamedArgs FilterArgs: Настройки фильтрации, для которых осуществляется подписка. .. code-block:: delphi :caption: Пример использования //подписка на событие без дополнительных условий фильтрации EventBus.Subscribe(Selection, 'TopicX'); //подписка на событие с дополнительными условиями фильтрации EventBus.Subscribe(Selection, 'TestTopic', CreateArgs(['EventName', 'TestEvent'])); .. seealso:: :ref:`События шины, отправляемые клиентом Global`. .. pas:method:: Post(TopicName, EventName: String; EventArgs: TbtkNamedArgs=nil) Асинхронная отсылка сообщений. Вызов обработчиков событий отправленных асинхронно, откладывается и выполняется с помощью асинхронных команд. :param String TopicName: Имя подписки. :param String EventName: Имя отправляемого события. :param TbtkNamedArgs EventArgs: Аргументы события. Для создания и передачи аргументов можно использовать метод :pas:class:`TatInternalObject.CreateArgs` .. code-block:: delphi :caption: Пример использования //отправка события без аргументов EventBus.Post('TopicName', 'EventName'); //отправка события с аргументами EventBus.Post('TopicName', 'EventName', CreateArgs(['Arg1','Value1','Arg2','Value2'])); .. pas:method:: Send(TopicName, EventName: String; EventArgs: TbtkNamedArgs=nil) Синхронная отсылка сообщений. Вызов обработчиков событий отправленных синхронно выполняется сразу при отправке. :param String TopicName: Имя подписки. :param String EventName: Имя отправляемого события. :param TbtkNamedArgs EventArgs: Аргументы события. Для создания и передачи аргументов можно использовать метод :pas:class:`TatInternalObject.CreateArgs` .. code-block:: delphi :caption: Пример использования //отправка события без аргументов EventBus.Send('TopicName', 'EventName'); //отправка события с аргументами EventBus.Send('TopicName', 'EventName', CreateArgs(['Arg1','Value1','Arg2','Value2']));