Добрый день!
Стал вопрос об обновлении реестра детали в конце работы БП.
В чем суть:
1) На детали, в редактируемом реестре, изменяются значения (кол-во работ) или добавляется новая строка
2) БП ловит добавление/изменение и высчитывает сумму (кол-во работ * стоимость) и записывает это в поле, отображающееся в реестре детали
3) Требуется обновление этого реестра
И если первые 2 пункта выполняются на "ура" и без проблем, то с реализацией 3 пункта у меня появились проблемы. При этом хотелось бы выполнить все в одном БП, возможно поможет элемент процесса [Задание-сценарий]? Был бы благодарен за предоставленную помощь.
Нравится
Опишу более подробно 2й варинат
1) в конце БП добавить скрипт таск и в нем
//ваше сообщение
string sender = "MyBpFinish";
//Доп. информация
string messageText
// Публикация сообщения по WebSocket.
MsgChannelUtilities.PostMessageToAll(sender, messageText);2) Создать замещающий клиентский модуль , задав родительский объект схему ClientMessageBridge
define("ClientMessageBridge", ["ConfigurationConstants"],
function(ConfigurationConstants) {
return {
// Сообщения.
messages: {
//Имя сообщения.
"MyBpFinish": {
// Тип сообщения — широковещательное, без указания конкретного подписчика.
"mode": Terrasoft.MessageMode.BROADCAST,
// Направление сообщения — публикация.
"direction": Terrasoft.MessageDirectionType.PUBLISH
}
},
methods: {
// Инициализация схемы.
init: function() {
// Вызов родительского метода.
this.callParent(arguments);
// Добавление нового конфигурационного объекта в коллекцию конфигурационных объектов.
this.addMessageConfig({
// Имя сообщения, получаемого по WebSocket.
sender: "MyBpFinish",
// Имя сообщения с которым оно будет разослано внутри системы.
messageName: "MyBpFinish"
});
},
// Метод, выполняемый после публикации сообщения.
afterPublishMessage: function(
// Имя сообщения с которым оно было разослано внутри системы.
sandboxMessageName,
// Содержимое сообщения.
webSocketBody,
// Результат отправки сообщения.
result,
// Конфигурационный объект рассылки сообщения.
publishConfig) {
if (sandboxMessageName === "MyBpFinish") {
var name = webSocketBody.name;
window.console.info("Опубликовано сообщение: " + sandboxMessageName +
". Данные: name: " + name );
}
}
}
};
});3) Подписаться на получение сообщений MyBpFinish в любой клиентской схеме
define("AccountSectionV2", [],
function(BusinessRuleModule, ConfigurationConstants) {
return {
//entitySchemaName: "Contact",
messages: {
//Имя сообщения.
"MyBpFinish": {
"mode": Terrasoft.MessageMode.BROADCAST,
"direction": Terrasoft.MessageDirectionType.SUBSCRIBE
}
},
methods: {
// Инициализация схемы.
init: function() {
this.callParent(arguments);
this.sandbox.subscribe("MyBpFinish", this.onMyBpFinish, this);
},
// Обработчик события получения сообщения NewUserSet.
onMyBpFinish: function(args) {
//Обновим грид
this.refreshGridData();
}
}
};
});
При запуске БП передавай callback который вызовется после отработки БП
Примерно так
ProcessModuleUtilities.executeProcess({
"sysProcessName": ProcessName,
"parameters": {
UsrParam1: paramValue
},
"callback": this.greadReloadProcessCallback(),
scope: this
}
Григорий Чех,
Немного не понимаю где и как указать этот самый callback и как его потом вызвать, буду признателен за пояснение. Не приходилось работать еще с такой процедурой.
Не внимательно прочел ваше предложение, предложил вариант по запуск БП вручную из клиентского модуля.
Посмотри действие процесса Обновить запись в реестре
Второй вариант отправить по вєб сокету сообщение и подписатся в реестре на него и по приходу сообщения обновить реестр.
Третий вариант убрать БП и по изминению поля или добавлению записи в детали пересчитывать в клиентском модуле сумму.
Опишу более подробно 2й варинат
1) в конце БП добавить скрипт таск и в нем
//ваше сообщение
string sender = "MyBpFinish";
//Доп. информация
string messageText
// Публикация сообщения по WebSocket.
MsgChannelUtilities.PostMessageToAll(sender, messageText);2) Создать замещающий клиентский модуль , задав родительский объект схему ClientMessageBridge
define("ClientMessageBridge", ["ConfigurationConstants"],
function(ConfigurationConstants) {
return {
// Сообщения.
messages: {
//Имя сообщения.
"MyBpFinish": {
// Тип сообщения — широковещательное, без указания конкретного подписчика.
"mode": Terrasoft.MessageMode.BROADCAST,
// Направление сообщения — публикация.
"direction": Terrasoft.MessageDirectionType.PUBLISH
}
},
methods: {
// Инициализация схемы.
init: function() {
// Вызов родительского метода.
this.callParent(arguments);
// Добавление нового конфигурационного объекта в коллекцию конфигурационных объектов.
this.addMessageConfig({
// Имя сообщения, получаемого по WebSocket.
sender: "MyBpFinish",
// Имя сообщения с которым оно будет разослано внутри системы.
messageName: "MyBpFinish"
});
},
// Метод, выполняемый после публикации сообщения.
afterPublishMessage: function(
// Имя сообщения с которым оно было разослано внутри системы.
sandboxMessageName,
// Содержимое сообщения.
webSocketBody,
// Результат отправки сообщения.
result,
// Конфигурационный объект рассылки сообщения.
publishConfig) {
if (sandboxMessageName === "MyBpFinish") {
var name = webSocketBody.name;
window.console.info("Опубликовано сообщение: " + sandboxMessageName +
". Данные: name: " + name );
}
}
}
};
});3) Подписаться на получение сообщений MyBpFinish в любой клиентской схеме
define("AccountSectionV2", [],
function(BusinessRuleModule, ConfigurationConstants) {
return {
//entitySchemaName: "Contact",
messages: {
//Имя сообщения.
"MyBpFinish": {
"mode": Terrasoft.MessageMode.BROADCAST,
"direction": Terrasoft.MessageDirectionType.SUBSCRIBE
}
},
methods: {
// Инициализация схемы.
init: function() {
this.callParent(arguments);
this.sandbox.subscribe("MyBpFinish", this.onMyBpFinish, this);
},
// Обработчик события получения сообщения NewUserSet.
onMyBpFinish: function(args) {
//Обновим грид
this.refreshGridData();
}
}
};
});
Григорий Чех
добрый день! сделал все по вашему совету, коды один в один но почему то деталь не обновляется( что может быть? где искать? в консоле ошибка на 