Здравствуйте.
Есть следующая ситуация:
Заходим в деталь карточки раздела, добавляя туда запись отрабатывает БП который меняет значение поля в Entity, но при возвращении в карточку остается старое значение.
Поэтому возникает необходимость актуализировать данные в карточке, к примеру, при помощи метода this.reloadEntity(), но непонятно как отправить message из БП в схему карточки и там уже запустить обновление.
Есть идеи?
Нравится
На сервере через Элемент скрипты делаете так:
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.PostMessageToAll(sender, messageText);Так как объект MsgChannelUtilities отсутствует в данном контексте.
Да, задание сценарий
Андреев Андрей Сергеевич пишет:
Литвинко Павел,
Спасибо, попробую.
А зачем эта функция?afterPublishMessage: function( sandboxMessageName, webSocketBody, result, publishConfig) { if (sandboxMessageName === "NeedUpdatedGrid") { var name = webSocketBody.name; } }И модуль этой же функции должен от кого-то наследоваться?
https://academy.terrasoft.ua/documents/technic-sdk/7-13/clientmessagebr…;