Вопрос

Получить данные с детали с редактируемым реестром для блокировки редактирования полей по условию

Доброго времени суток.

С тем, как со страницы запретить редактирование полей на детали с редактируемым реестром я разобрался, то как туда же прикрутить дополнительное условие затрудняюсь. Задача следующая, нужно разрешить редактировать одно поле на детали при условии, что редактирует пользователь, указанный в поле ответственный на странице редактирования объекта, где находится деталь или ответственный, что указан в самой детали. Как донести до детали ответственного со страницы разобрался, а вот как выполнить вторую половину, не могу понять.

 

Меняю доступность поля так:
 

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 = ..." нужно дописать условие, для этого нужно взять информация с записи детали. Как это можно сделать?

Нравится

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

Добрый вечер.

 

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

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

Правила работают, но, не знаю почему, отрабатывают некорректно. Например, если сравнивать поля ответственный с карточки детали и с карточки объекта, со связкой или, то почему-то на карточке детали можно редактировать поле, а в реестре нельзя. Также затирается разрешение на редактирование, что написано кодом

Есть такой баг в редактируемом реестре, что бизнес правила не работают, если сравнивать из вложенной записи (т.е. ваш случай, что в правиле пытаемся прочитать значение из родительской карточки).

 

Коллеги из террасофт обещали с этим разобраться, но воз и ныне там. Если что обращение SR-0978724

Кажется я нашел, как боролся с данным багом.

Нужно добавить в схему детали такой метод. Тогда бизнесс-правила в редактируемом реестре увидят значение из колонки родителя.

 

            getGridDataColumns: function() {
                var baseGridDataColumns = this.callParent(arguments);
                var gridDataColumns = {
                    "UsrParent.Owner": {path: "UsrParent.Owner"},
                };
                return Ext.apply(baseGridDataColumns, gridDataColumns);
            },

 

Трефилов Павел Сергеевич,

а что значит "UsrParent"? Я вернулся к задаче, не могу понять, почему не работает? Возможно, вопросы глупые, учусь)

Vladimir,

UsrParent - это название колонки родителя, т.к если это продукт в счете, то UsrParent - будет колонка Invoice.

 

После этого бизнес правила начнут работать. И можно написать правило, что если Ответственный в счете равен текущему контакту, то сделать поле редактируемым.  Но возможно это не то, что вам требуется.

Тогда получить ответственный со страницы можно через код, обратившись в var parent = item.get("UsrParent"), а затем parent.Owner;

 

Но опять предварительно "добавить" эту колонку в таблицу, через метод getGridDataColumns

 

Но вот только куда встроить эту проверку не подскажу.

Трефилов Павел Сергеевич

Cпасибо за пояснение, но у меня всё равно не работает, что колонку  связи с родителем указывал, что название схемы родителя. 

Получается, надо из детали вызвать метод getGridDataColumns в нём указать колонку: "<колонка связи с родителем>.<Необходимая колонка>": {path: "<колонка связи с родителем>.<Необходимая колонка>"}, правильно? или как-то подругому?

Да, это для того, что бы бизнес правила со связями заработали, конечно может быть у Вас старая версия и это действительно не работает.

Vladimir пишет:
getGridDataColumns в нём указать колонку: "<колонка связи с родителем>.<Необходимая колонка>": {path: "<колонка связи с родителем>.<Необходимая колонка>"},

На версии 7.16.1 не работает, общались с тех. поддержкой.
Такой кейс реализовать не возможно в этой версии

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