Коллеги, приветствую!
Нужна помощь, вопрос следующий:
Есть деталь с множественным выбором и редактируемым реестром. В схеме детали, в методах я создаю условие, чтобы появлялось всплывающее окно, после изменения на определенное значение справочника.
Но чтение происходит сразу всех записей в детали, и если справочник был заполнен определенным значением, то всплывающее окно появляется, хотя изменения поля не происходило.
Подскажите, как сделать, чтобы не считывались все записи в реестре, а только то,
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" }; } },
Я так понимаю проблема в том, что я не могу обратиться к данным на детали, через страницу редактирования раздела, где расположена деталь. Как это сделать?