Вопрос

Обновление реестра детали после БП

Добрый день!



Стал вопрос об обновлении реестра детали в конце работы БП. 



В чем суть:



1) На детали, в редактируемом реестре, изменяются значения (кол-во работ) или добавляется новая строка

2) БП ловит добавление/изменение и высчитывает сумму (кол-во работ * стоимость) и записывает это в поле, отображающееся в реестре детали



3) Требуется обновление этого реестра



И если первые 2 пункта выполняются на "ура" и без проблем, то с реализацией 3 пункта у меня появились проблемы. При этом хотелось бы выполнить все в одном БП, возможно поможет элемент процесса [Задание-сценарий]? Был бы благодарен за предоставленную помощь.

Нравится

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

Опишу более подробно 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();
                }
 
            }
        };
    });

 

Григорий Чех 

добрый день! сделал все по вашему совету, коды один в один но почему то деталь не обновляется( что может быть? где искать? в консоле ошибка на 

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