Вопрос

Событие по изменению записи в реестре детали

Коллеги, приветствую!

Нужна помощь, вопрос следующий:

Есть деталь с множественным выбором и редактируемым реестром. В схеме детали, в методах я создаю условие, чтобы появлялось всплывающее окно, после изменения на определенное значение справочника. 

Но чтение происходит сразу всех записей в детали, и если справочник был заполнен определенным значением, то всплывающее окно появляется, хотя изменения поля не происходило.



Подскажите, как сделать, чтобы не считывались все записи в реестре, а только то,

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}
);
                }
            },
 
 
	},
	};
});

которое меняем.

Изображение удалено.

Нравится

7 комментариев

Если нужно показать сообщение уже после сохранения записи на детали в базе, то можно создать БП на событии сохранения в объекте детали, где посылать в карточку информацию по 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"
                    };
                }
             },

 

Я так понимаю проблема в том, что я не могу обратиться к данным на детали, через страницу редактирования раздела, где расположена деталь. Как это сделать?

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