Здравствуйте!

 

Столкнулся с проблемой вызова sandbox из детали т.е. заходя из раздела на страницу подписка срабатывает, но если на страницу зайти из детали то нет.

Нравится

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

Поясните пожалуйста где находятся подписки?

Кисловский Михаил Андреевич,

вызывают из схемы детали "Schema5Detail", передают в схему открываемой страницы "...1Page"

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

Показать все комментарии

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



делаю публикацию сообщения (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.

Показать все комментарии