Событие по изменению записи в реестре детали
Коллеги, приветствую!
Нужна помощь, вопрос следующий:
Есть деталь с множественным выбором и редактируемым реестром. В схеме детали, в методах я создаю условие, чтобы появлялось всплывающее окно, после изменения на определенное значение справочника.
Но чтение происходит сразу всех записей в детали, и если справочник был заполнен определенным значением, то всплывающее окно появляется, хотя изменения поля не происходило.
Подскажите, как сделать, чтобы не считывались все записи в реестре, а только то,
define("UsrSchema3Detail", ["ConfigurationGrid", "ConfigurationGridGenerator",
"ConfigurationGridUtilities","LookupMultiAddMixin","UsrSchema3DetailResources"], function(Resources) {
return {
entitySchemaName: "UsrTest",
attributes: {
"IsEditable": {
dataValueType: Terrasoft.DataValueType.BOOLEAN,
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
value: true
},
// Колонка описания.
"UsrINSONumberDocument": {
// Тип отображения - длинный текст.
"contentType": Terrasoft.ContentType.LONG_TEXT
}
},
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
{
"operation": "merge",
"name": "DataGrid",
"values": {
"className": "Terrasoft.ConfigurationGrid",
"generator": "ConfigurationGridGenerator.generatePartial",
"generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
"changeRow": {"bindTo": "changeRow"},
"unSelectRow": {"bindTo": "unSelectRow"},
"onGridClick": {"bindTo": "onGridClick"},
"activeRowActions": [
{
"className": "Terrasoft.Button",
"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
"tag": "save",
"markerValue": "save",
"imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
},
{
"className": "Terrasoft.Button",
"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
"tag": "cancel",
"markerValue": "cancel",
"imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
},
{
"className": "Terrasoft.Button",
"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
"tag": "remove",
"markerValue": "remove",
"imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
}
],
"initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
"activeRowAction": {"bindTo": "onActiveRowAction"},
"multiSelect": false
}
}]/**SCHEMA_DIFF*/,
mixins: {
ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities",
LookupMultiAddMixin: "Terrasoft.LookupMultiAddMixin"
},
methods: {
init: function() {
this.callParent(arguments);
//Инициализация миксина.
this.mixins.LookupMultiAddMixin.init.call(this);
},
// Переопределение базового метода отображения кнопки добавления.
getAddRecordButtonVisible: function() {
//Отображать кнопку добавления если деталь развернута, даже если для детали не реализована страница редактирования.
return this.getToolsVisible();
},
// Переопределение базового метода.
// Обработчик события сохранения страницы редактирования детали.
onCardSaved: function() {
// Открывает справочное окно с множественным выбором записей.
this.openLookupWithMultiSelect();
//this.reloadGridData();
// this.updateDetail({reloadAll: true});
},
// Переопределение базового метода добавления записи на деталь.
addRecord: function() {
// Открывает справочное окно с множественным выбором записей.
this.openLookupWithMultiSelect(true);
},//loadGridData
// Метод, возвращающий конфигурационный объект для справочного окна.
getMultiSelectLookupConfig: function() {
return {
rootEntitySchemaName: "UsrContact1",
rootColumnName: "UsrINSOContact",
relatedEntitySchemaName: "UsrINSONameOfDocument",
relatedColumnName: "UsrINSONameOfDocument"
};
},
prepareResponseCollectionItem: function(item) {
window.console.log("test123");
// Вызов базового метода.
this.callParent(arguments);
item.customStyle = null;
// Определение статуса заказа.
var running = item.get("UsrINSONalichieDocumenta");
//Если состояние заказа "Выполнение", меняется стиль записи.
if (running.value === "ffb608da-c688-498a-8945-05f15306798b" || running.value === "02cab2b7-5a8a-4085-bb1c-e1ad08ab6c4e") {
item.customStyle = {
// Цвет текста — белый.
"color": "black",
// Цвет фона — зеленый.
"background": "#FADADD"
};
}
if (running.value === "01fa346e-8f38-469e-9dc1-9677e3be6b22"){
window.console.log("good");
var controlConfig = {
text: {
dataValueType: Terrasoft.DataValueType.TEXT,
caption: "Тестовый заголовок",
value: "тестовое значение" }
};
Terrasoft.utils.inputBox("TestInfo",
function(buttonCode, controlData) {
if (buttonCode === "ok") {
window.console.log("rabotaet");
}
},
["ok", "cancel"],
this,
controlConfig,
{defaultButton: 0}
);
}
},
},
};
});
которое меняем.
![]()
Нравится
Если нужно показать сообщение уже после сохранения записи на детали в базе, то можно создать БП на событии сохранения в объекте детали, где посылать в карточку информацию по ClientMessageBridge.
А есть другой вариант?
Просто считывать id именно изменненой записи в реестре?
Сейчас когда происходит изменение читаются все записи.
Если Ваш вариант работает лучше, можете использовать его. Возможно, нужная логика реализована в функции onActiveRowSave в схеме ConfigurationGridUtilities.
Зверев Александр,
Да, можете подсказать какой-нибудь вариант ловли события по сохранению записи, например.
Можно попробовать переопределить эту схему, добавив нужную свою логику. Или, если не переопределяется, сделать свой её аналог и использовать для этой детали.
Зверев Александр,
Коллеги, подскажите. Добавил на страницу редактирования (где расположена деталь) следующий код в деталь. Уточняю - деталь с множественным выбором и редактируемым реестром.
subscriber:function(){
this.updateDetail(
{
detail: "UsrSchema3Detail5a3ba026",
reloadAll: true
}
);
this.prepareResponseCollectionItem();
},
И теперь ловлю событие на конкретной записи в реестре. Но когда я хочу проверить условие по справочнику - консоль выдает следующую ошибку:
message: Cannot set property 'customStyle' of undefined
//схема детали на странице редактирования
"UsrSchema3Detail5a3ba026": {
"schemaName": "UsrSchema3Detail",
"entitySchemaName": "Test",
"filter": {
"detailColumn": "Test",
"masterColumn": "Id"
},
subscriber:function(){
this.updateDetail(
{
detail: "UsrSchema3Detail5a3ba026",
reloadAll: true
}
);
this.prepareResponseCollectionItem();
},
},
//функция, которую использую
prepareResponseCollectionItem: function(item) {
window.console.log("test777"); //тест срабатывает после сохранения записи в реестре
window.console.log("test123"); //тест срабатывает после сохранения записи в реестре
// Вызов базового метода.
item.customStyle = null;
var running = item.get("UsrTest");
if (running.value === "ffb608da-c688-498a-8945-05f15306798b" || running.value === "02cab2b7-5a8a-4085-bb1c-e1ad08ab6c4e") {
item.customStyle = {
"color": "black",
"background": "#FADADD"
};
}
},
Я так понимаю проблема в том, что я не могу обратиться к данным на детали, через страницу редактирования раздела, где расположена деталь. Как это сделать?