Вопрос

Добрый день, коммьюнити,

делаю публикацию сообщения (this.sandbox.publish без параметров, тег "test1") из схемы детали "Продукт в лиде" на странице "Лид". затем по нажатию пользователем кнопки открывается страница раздела "Продукт", на которой я это сообщение пытаюсь прочитать (this.sandbox.subscribe в функции вывод сообщения в консоль, тег "test1"), но ничего не происходит.

ошибок в консоли нет, но функция внутри subscribe не отрабатывает.

подскажите, проблема в том, что я пытаюсь получить сообщение на другой странице или в чем-то другом?)

У меня такой же вопрос

2 комментария

Если открываете новый раздел в другом окне или вкладке браузера, то sandbox между ними не передаёт, нужно отправлять при помощи ClientMessageBridge. Если всё в одной вкладке и не работает, возможно, не тот sandbox.id (как его смотреть, см. тут). Также см. следующие статьи по обмену сообщениями, может что-то ещё не учли.

Зверев Александр,

Спасибо за ответ!

Дополнение к ответу на собственный вопрос: кроме указанных Александром моментов есть еще один важный - сначала нужно подписаться на сообщение, а потом его отправлять (иначе сообщение некому получать)

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

 

Можете подсказать , я хочу через sandbox взаимодействовать двух деталей. Имеется ввиду при выборе запись в  первой детали , должен отобразиться  второй деталь с фильтрованной переданной от первой значение.

В первом детале создал сообщение, и зарегистрировал в методе init.

init: function() {
                    this.callParent(arguments);
                    window.console.log("begin finance come here to show where error");
                    var messages = {
                        "GetFinanceBlock": {
                            mode: Terrasoft.MessageMode.BROADCAST,
                            direction: this.Terrasoft.MessageDirectionType.PUBLISH
                        }
                    };
                    this.sandbox.registerMessages(messages);
                    window.console.log("end finance come here to show where error");
}

 И при выборе запись из таблицы, вызывается метод  rowSelected, где публикуется сообщение:

rowSelected: function(primaryColumnValue) {
                    this.sandbox.publish("GetFinanceBlock", {arg1 : primaryColumnValue}, ["key"]);
                    window.console.log("end publish");
}

 

Во второй деталь метод init добавил subscribe для данного сообщение:

init: function() {
                    this.callParent(arguments);
                    window.console.log(" child come here to show where error");
                    var message={
                        "GetFinanceBlock": {
                            mode: Terrasoft.MessageMode.PTP,
                            direction: Terrasoft.MessageDirectionType.SUBSCRIBE
                        }
                    };
                    this.sandbox.registerMessages(message);
                    this.sandbox.subscribe("GetFinanceBlock", this.onMessageSubscribe, this, ["key"]);
                    window.console.log(" child end subscribe");
                },
                onMessageSubscribe: function(args) {
                    window.console.log("child call method subscribe args " + args + " " + JSON.stringify(args));
                },

И добавил метод обработчик onMessageSubscribe для анализа передачи данные из первого модуля.

 

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

 

Можете подсказать чем связано такая проблема.

 

С уважием, Асылан.

 

Заранее благодарю!

 

 

У меня такой же вопрос

5 комментариев

Если я правильно вас понял, то у вас на странице находится 2 детали.
При выборе определенного значения на Детали №1, должна отобразиться деталь №2.
Сообщение вы публикуете в Детали №1, но принять это сообщение, вы должны на странице, где находятся обе эти детали.
Создайте атрибут, например, в который устанавливайте значение true, когда получено сообщение. А видимость детали повесьте на этот атрибут.

Литвинко Павел,

Да, вы все правильно поняли. Спасибо , попробую . 

Литвинко Павел,

Попробовал анологичная ситуация. Сообщение отправляется, но подписчик не получает.

 

Асылан,

А как вы подписываетесь на сообщение?

Асылан, инструкция по работе с механизмом Sandbox есть в Академии.Возможно, что-то не было учтено, например, в одной указано BROADCAST, а в другой PTP.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Мне необходимо сделать кнопку, которая бы открывала диаграмму процесса. В обработчик нажатия кнопки пишу скрипт:

var requestUrl = "?vm=SchemaDesigner#processLog/" + process.value;
this.sandbox.publish("PushHistoryState", {
                                hash: requestUrl,
                            });

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

http://bpmonline.com/0/Nui/ViewModule.aspx#?vm=SchemaDesigner#processLog/933722a3-f4ca-4e4d-9bbb-2160c57bebee

Но ссылка не совсем корректна, так как this.sandbox.publish("PushHistoryState") возвращает строку с символом # на конце:

http://bpmonline.com/0/Nui/ViewModule.aspx#

Как можно исключить этот символ? Чтобы ссылка выглядела так:

http://bpmonline.com/0/Nui/ViewModule.aspx?vm=SchemaDesigner#processLog/933722a3-f4ca-4e4d-9bbb-2160c57bebee

 

 

У меня такой же вопрос

1 комментарий

Добрый день, Антон.
Вам стоит смотреть в сторону использования  метода showProcessDiagram модуля ProcessModuleUtilities, который используется в схеме SysProcessLogSectionV2. В своей реализации метод использует window.open.

Войдите или зарегистрируйтесь, чтобы комментировать