Creatio development guide
PDF
Документация по разработке
Описание платформы

Сообщения. Свойство messages

Glossary Item Box

Общие сведения

Сообщения предназначены для организации обмена данными между модулями (см. "Sandbox. Обмен сообщениями между модулями").

Сообщение может быть двух режимов:

  • Адресное. Адресные сообщения принимаются только последним подписанным подписчиком. Для установки сообщения в адресный режим необходимо его свойству mode присвоить значение this.Terrasoft.MessageMode.PTP.
  • Широковещательное. Широковещательные сообщения принимаются всеми подписчиками. Для установки сообщения в широковещательный режим необходимо его свойству mode присвоить значение this.Terrasoft.MessageMode.BROADCAST.

Перечень доступных режимов сообщения представлен перечислением Terrasoft.MessageMode.

Кроме режимов, различают также направления сообщений:

  • Публикация — сообщение может быть только опубликовано, т.е. является исходящим. Для установки направления публикации сообщения необходимо его свойству direction присвоить значение this.Terrasoft.MessageDirectionType.PUBLISH.
  • Подписка — на сообщение можно только подписаться, т.е. оно является входящим. Для установки направления подписки на сообщение необходимо его свойству direction присвоить значение this.Terrasoft.MessageDirectionType.SUBSCRIBE.
  • Двунаправленное — позволяет публиковать и подписываться на одно и то же сообщение в разных экземплярах одного и того же класса или в рамках одной и той же иерархии наследования схем (см. "Sandbox. Двунаправленные сообщения"). Соответствует значению перечисления Terrasoft.MessageDirectionType.BIDIRECTIONAL.

ВАЖНО

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

Примеры использования сообщения

Публикация сообщения

В схеме, в которой нужно осуществить публикацию сообщения, должно быть объявлено сообщение с направлением "публикация":

messages: {
    // Имя сообщения.
    "GetColumnsValues": {
        // Режим сообщения — адресное.
        mode: this.Terrasoft.MessageMode.PTP,
        // Направление сообщения — публикация.
        direction: this.Terrasoft.MessageDirectionType.PUBLISH
    }
}

Публикация осуществляется вызовом метода publish у экземпляра класса sandbox.

// Метод получения результата публикации сообщения GetColumnsValues.
getColumnsValues: function(argument) {
    // Публикация сообщения.
    return this.sandbox.publish("GetColumnsValues", argument, ["key"]);
}

Здесь:

  • “GetColumnsValues” — имя сообщения;
  • argument — аргумент, передаваемый в функцию-обработчик подписчика. Объект, содержащий параметры сообщения;
  • ["key"] — массив тегов для фильтрации сообщений.

Свойство sandbox объявлено во всех схемах.

ВАЖНО

Публикация сообщения может возвращать результат работы функции-обработчика только при адресном режиме.

Подписка на сообщение

В схеме-подписчике должно быть объявлено сообщение с направлением "подписка":

messages: {
    // Имя сообщения.
    "GetColumnsValues": {
        // Режим сообщения — адресное.
        mode: this.Terrasoft.MessageMode.PTP,
        // Направление сообщения — подписка.
        direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
    }
}

Подписка осуществляется вызовом метода subscribe у экземпляра класса sandbox:

this.sandbox.subscribe("GetColumnsValues", messageHandler, context, ["key"]);

Здесь:

  • “GetColumnsValues” — имя сообщения.
  • messageHandler — функция-обработчик сообщения.
  • context — контекст выполнения функции-обработчика.
  • [“key”] — массив тегов для фильтрации сообщений.

При адресном режиме метод messageHandler должен возвращать объект, который обрабатывается как результат публикации сообщения.

methods: {
    messageHandler: function(args) { 
    //Возвращение объекта который обрабатывается как результат публикации сообщения.
    return { }; 
    }
}    

При широковещательном режиме метод messageHandler ничего не возвращает.

methods: {
    messageHandler: function(args) { 
    }
}    
© Terrasoft 2002-2019.

Был ли данный материал полезен?

Как можно улучшить эту статью?