Вопрос

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

Есть следующая ситуация:

Заходим в деталь карточки раздела, добавляя туда запись отрабатывает БП который меняет значение поля в Entity, но при возвращении в карточку остается старое значение.
Поэтому возникает необходимость актуализировать данные в карточке, к примеру, при помощи метода this.reloadEntity(), но непонятно как отправить message из БП в схему карточки и там уже запустить обновление.

Есть идеи?

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

5 комментариев
Лучший ответ

На сервере через Элемент скрипты делаете так:
 

string messageText = "{\"любой текст, если хотите\"}";
string sender = "NeedUpdatedGrid";
MsgChannelUtilities.PostMessageToAll(sender, messageText);

Затем создаете клиентский модуль, такого содержания:
 

define("ClientMessageBridge", ["ConfigurationConstants"],
function(ConfigurationConstants) {
    return {
        messages: {
            "NeedUpdatedGrid": {
                "mode": Terrasoft.MessageMode.BROADCAST,
                "direction": Terrasoft.MessageDirectionType.PUBLISH
            }
        },
        methods: {
            init: function() {
                this.callParent(arguments);
                this.addMessageConfig({
                    sender: "NeedUpdatedGrid",
                    messageName: "NeedUpdatedGrid"
                });
            },
            afterPublishMessage: function(
                sandboxMessageName,
                webSocketBody,
                result,
                publishConfig) {
                if (sandboxMessageName === "NeedUpdatedGrid") {
                    var name = webSocketBody.name;
                }
            }
        }
    };
});

А там, где хотите обновить грид, делаете так:

init: function() {
  this.callParent(arguments);
  this.sandbox.subscribe("NeedUpdatedGrid", this.myNameMethod, this);
},
myNameMethod: function(args) {
    this.reloadEntity();
}

Ну и соответственно не забудьте в схеме дописать 
блок messages, сообщение можете принимать как BROADCAST
 

На сервере через Элемент скрипты делаете так:
 

string messageText = "{\"любой текст, если хотите\"}";
string sender = "NeedUpdatedGrid";
MsgChannelUtilities.PostMessageToAll(sender, messageText);

Затем создаете клиентский модуль, такого содержания:
 

define("ClientMessageBridge", ["ConfigurationConstants"],
function(ConfigurationConstants) {
    return {
        messages: {
            "NeedUpdatedGrid": {
                "mode": Terrasoft.MessageMode.BROADCAST,
                "direction": Terrasoft.MessageDirectionType.PUBLISH
            }
        },
        methods: {
            init: function() {
                this.callParent(arguments);
                this.addMessageConfig({
                    sender: "NeedUpdatedGrid",
                    messageName: "NeedUpdatedGrid"
                });
            },
            afterPublishMessage: function(
                sandboxMessageName,
                webSocketBody,
                result,
                publishConfig) {
                if (sandboxMessageName === "NeedUpdatedGrid") {
                    var name = webSocketBody.name;
                }
            }
        }
    };
});

А там, где хотите обновить грид, делаете так:

init: function() {
  this.callParent(arguments);
  this.sandbox.subscribe("NeedUpdatedGrid", this.myNameMethod, this);
},
myNameMethod: function(args) {
    this.reloadEntity();
}

Ну и соответственно не забудьте в схеме дописать 
блок messages, сообщение можете принимать как BROADCAST
 

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

Спасибо, попробую.
А зачем эта функция?

afterPublishMessage: function(
                sandboxMessageName,
                webSocketBody,
                result,
                publishConfig) {
                if (sandboxMessageName === "NeedUpdatedGrid") {
                    var name = webSocketBody.name;
                }
                }

И модуль этой же функции должен от кого-то наследоваться?

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

На сервере через Элемент скрипты делаете так:

Под - "...Элемент скрипты..." , вы имели ввиду элемент задание сценарий?
Если это так, то следующий код там неприменим:

MsgChannelUtilities.PostMessageToAll(sender, messageText);

Так как объект MsgChannelUtilities отсутствует в данном контексте.

Андреев Андрей Сергеевич пишет:

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

На сервере через Элемент скрипты делаете так:

Под - "...Элемент скрипты..." , вы имели ввиду элемент задание сценарий?
Если это так, то следующий код там неприменим:

MsgChannelUtilities.<span>PostMessageToAll</span><span>(</span>sender, messageText<span>)</span><span>;</span>

Так как объект MsgChannelUtilities отсутствует в данном контексте.

ЕщеСвернуть

Да, задание сценарий 

Андреев Андрей Сергеевич пишет:

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

Спасибо, попробую.
А зачем эта функция?


 
afterPublishMessage: function(
                sandboxMessageName,
                webSocketBody,
                result,
                publishConfig) {
                if (sandboxMessageName === "NeedUpdatedGrid") {
                    var name = webSocketBody.name;
                }
                }

И модуль этой же функции должен от кого-то наследоваться?

https://academy.terrasoft.ua/documents/technic-sdk/7-13/clientmessagebr… 

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

Добрый день.
Подскажите пожалуйста, есть ли возможность отправлять сообщение из процесса объекта на клиент?
Например: перед сохранением выполнить проверку и выдать предупреждение пользователю.
Такой вариант предпочтительнее чем проверка на клиенте (с которой проблем нет), потому что записи могут добавляться тремя различными способами.
Версия BPM 7.6

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

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

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

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

:biggrin:
throw new Exception("Сообщение пользователю")

Дмитрий спасибо, то что нужно!

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

Добрый день!
По аналогии с Счетчиком активности, подписываюсь на сообщение от БП.
В коде страницы читаю сообщение, но функция обработки сообщения начинает вызываться циклично, в Body сообщения текст не изменяется.
В чем может быть проблема?

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

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

Эмин, думаю, без среды, в которой можно воспроизвести и провести анализ, тут не разобраться.

"Maxim Gritsenko" написал:

Эмин, думаю, без среды, в которой можно воспроизвести и провести анализ, тут не разобраться.


Хорошо. Пока, поставил "костыль": сохраняю текст сообщения (в тексте id, поэтому повторов быть не может) и если это повтор - выхожу из функции обработки.
Любом случае, спасибо за помощь и поддержку!

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