Получить данные с детали с редактируемым реестром для блокировки редактирования полей по условию
Доброго времени суток.
С тем, как со страницы запретить редактирование полей на детали с редактируемым реестром я разобрался, то как туда же прикрутить дополнительное условие затрудняюсь. Задача следующая, нужно разрешить редактировать одно поле на детали при условии, что редактирует пользователь, указанный в поле ответственный на странице редактирования объекта, где находится деталь или ответственный, что указан в самой детали. Как донести до детали ответственного со страницы разобрался, а вот как выполнить вторую половину, не могу понять.
Меняю доступность поля так:
generateActiveRowControlsConfig: function(id, columnsConfig, rowConfig) { this.columnsConfig = columnsConfig; var gridLayoutItems = []; var currentColumnIndex = 0; this.Terrasoft.each(columnsConfig, function(columnConfig) { var cellConfig = this.getActiveRowCellConfig(columnConfig, currentColumnIndex); var columnName = columnConfig.key[0].name.bindTo; if (columnName === "UsrOwner") { cellConfig.enabled = this.$IsOwner && this.$IsNewStage; // Это атрибуты, проставляются с помощью сообщения с карточки } if (!cellConfig.hasOwnProperty("isNotFound")) { gridLayoutItems.push(cellConfig); } currentColumnIndex += cellConfig.layout.colSpan; }, this); this.applyBusinessRulesForActiveRow(id, gridLayoutItems); var viewGenerator = this.Ext.create(this.getRowViewGeneratorClassName()); viewGenerator.viewModelClass = this; var gridLayoutConfig = viewGenerator.generateGridLayout({ name: this.name, items: gridLayoutItems }); rowConfig.push(gridLayoutConfig); }
В строку "cellConfig.enabled = ..." нужно дописать условие, для этого нужно взять информация с записи детали. Как это можно сделать?
Нравится
Добрый вечер.
В редактируемом гриде применяются бизнес-правила, настроенные в карточке редактирования для данной детали.
Если Вы сможете настроить нужные бизнес-правила в карточке редактирования, то для редактируемого грида ничего дополнительно прописывать не нужно.
Правила работают, но, не знаю почему, отрабатывают некорректно. Например, если сравнивать поля ответственный с карточки детали и с карточки объекта, со связкой или, то почему-то на карточке детали можно редактировать поле, а в реестре нельзя. Также затирается разрешение на редактирование, что написано кодом
Есть такой баг в редактируемом реестре, что бизнес правила не работают, если сравнивать из вложенной записи (т.е. ваш случай, что в правиле пытаемся прочитать значение из родительской карточки).
Коллеги из террасофт обещали с этим разобраться, но воз и ныне там. Если что обращение SR-0978724
Кажется я нашел, как боролся с данным багом.
Нужно добавить в схему детали такой метод. Тогда бизнесс-правила в редактируемом реестре увидят значение из колонки родителя.
getGridDataColumns: function() { var baseGridDataColumns = this.callParent(arguments); var gridDataColumns = { "UsrParent.Owner": {path: "UsrParent.Owner"}, }; return Ext.apply(baseGridDataColumns, gridDataColumns); },
Vladimir,
UsrParent - это название колонки родителя, т.к если это продукт в счете, то UsrParent - будет колонка Invoice.
После этого бизнес правила начнут работать. И можно написать правило, что если Ответственный в счете равен текущему контакту, то сделать поле редактируемым. Но возможно это не то, что вам требуется.
Тогда получить ответственный со страницы можно через код, обратившись в var parent = item.get("UsrParent"), а затем parent.Owner;
Но опять предварительно "добавить" эту колонку в таблицу, через метод getGridDataColumns
Но вот только куда встроить эту проверку не подскажу.
Трефилов Павел Сергеевич
Cпасибо за пояснение, но у меня всё равно не работает, что колонку связи с родителем указывал, что название схемы родителя.
Получается, надо из детали вызвать метод getGridDataColumns в нём указать колонку: "<колонка связи с родителем>.<Необходимая колонка>": {path: "<колонка связи с родителем>.<Необходимая колонка>"}, правильно? или как-то подругому?
Да, это для того, что бы бизнес правила со связями заработали, конечно может быть у Вас старая версия и это действительно не работает.
Vladimir пишет:
getGridDataColumns в нём указать колонку: "<колонка связи с родителем>.<Необходимая колонка>": {path: "<колонка связи с родителем>.<Необходимая колонка>"},