Grid
редактируемый
редактируемый реестр
Деталь
деталь с редактируемым реестром
Сортировка
справочник
лукап
Studio_Creatio
#7.18

Есть необходимость настроить сортировку в выпадающем списке редактируемого реестра. 

 

На обычной странице мы решаем эту проблему через атрибут:

"State": {

              lookupListConfig: {

                orders: [{columnPath: "SortCode"}]

              }

            },

 

однако очевидно на детали это не отрабатывает.

 

Вариант "добавить в название цифру чтобы сортировать по алфавиту" не подходит, т.к. значений в справочнике довольно много. Может быть у кого-то был опыт добавление подобного конфига для полей детали с редактируемым реестром? Заранее благодарю

Нравится

2 комментария
Лучший ответ

Если нужно сортировать список в колонке MyColumn по полю справочника SortCode, нужно описать такой метод в схеме детали

getGridRowViewModelConfig: function(config) {
                var result = this.callParent(arguments);
                if (result && result.rowConfig && result.rowConfig.MyColumn) {
                    result.rowConfig.MyColumn.lookupListConfig = {
                        orders: [{columnPath: "SortCode", direction: Terrasoft.OrderDirection.DESC}]
                    };
                }
                return result;
            },

 

 

 

Если нужно сортировать список в колонке MyColumn по полю справочника SortCode, нужно описать такой метод в схеме детали

getGridRowViewModelConfig: function(config) {
                var result = this.callParent(arguments);
                if (result && result.rowConfig && result.rowConfig.MyColumn) {
                    result.rowConfig.MyColumn.lookupListConfig = {
                        orders: [{columnPath: "SortCode", direction: Terrasoft.OrderDirection.DESC}]
                    };
                }
                return result;
            },

 

 

 

Вадим Курунов,

Спасибо!

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

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

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

И вопрос к поддержке: почему часть логики реализованной в карточке редактирования срабатывает, например, фильтрация, а другая нет? Какая логика из карточки редактирования будет работать в редактируемом реестре, а какая нет?

 

Нравится

2 комментария
Лучший ответ

Если ищете метод, который сработает в редактируемом реестре, то это initEntity (из странички редактирования). Мы Реализовывали заполнение так:

initEntity: function(callback, scope) {
                this.callParent(arguments);
                if (this.isAddMode()) {
                    var DefaultValuesArray = this.get("DefaultValues");
                    var price = this.Ext.Array.findBy(DefaultValuesArray, function(item) {
                        return item.name === "BCPrice";
                    }, this);
                    if (price) {
                        this.set("BCPrice", price.value);
                    }
                    this.calcAmount();
                }
            }

 

Если ищете метод, который сработает в редактируемом реестре, то это initEntity (из странички редактирования). Мы Реализовывали заполнение так:

initEntity: function(callback, scope) {
                this.callParent(arguments);
                if (this.isAddMode()) {
                    var DefaultValuesArray = this.get("DefaultValues");
                    var price = this.Ext.Array.findBy(DefaultValuesArray, function(item) {
                        return item.name === "BCPrice";
                    }, this);
                    if (price) {
                        this.set("BCPrice", price.value);
                    }
                    this.calcAmount();
                }
            }

 

Дмитрий А.,

Спасибо за ответ - получилось.

Показать все комментарии
7.16.1
sales
редактируемый реестр
редактируемый грид
DataView
7.16
Sales_Creatio_enterprise_edition

Привет. 

Нудно создать редактируемый грида в DataView (по аналогии с "Расписанием" в активностях) из отдельной таблицы.

Насколько я понимаю все сводиться к созданию своего аналога GridData, возможно с логикой из схема "Деталь с редактируемым реестром". Но опять же интересуют детали.

Есть идеи или примеры кода по реализации?

Нравится

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

Андрей, если интересуют детали, как создать деталь с редактируемым реестром, есть в статье. Также шаблоны разных деталей, как редактируемых, так и нет, есть в бесплатном дополнении.

Зверев Александр,

Создание редактируемой детали на странице не проблема, проблема доставание этого грида и помещение его в схему раздела (Section) по соседству с основным.

По соседству — это как? Он должен выводить с фильтром по записи в основном реестре? Так такое уже есть в любом разделе с редактируемой деталью, если в карточке слева открыть панель с вертикальным реестром. Например, раздел «Заказы»:

Зверев Александр,

по соседству с базовым DataView, а именно на новом(DataView), мной созданным.

Пример что имею ввиду под этим показано на скрине, это раздел Активности: 

 

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

Андреев Андрей Сергеевич,

Возможно, раздел "Планирование" похож на ваши задачи?

Андрей, таких не видел. Есть разные дополнения, добавляющие в разделы ещё одну кнопку, включающую режим с каким-то необычным видом, например, бесплатное «Канбан-доска» или два вида «Диаграммы Гантта» (но те платные). Установив, можно увидеть, как происходит добавление компонента и работа в нём с данными в таблице раздела.

Владимир Соколов пишет:

Возможно, раздел "Планирование" похож на ваши задачи?

На него не стоит сходу ориентироваться в качестве образца, это новый интерфейс на Angular, возможности доработки в конфигурации и документация разработчика по нему пока не столь широки, как для обычных разделов.

Зверев Александр пишет:

Кстати, планируется в интерфейсе пользователя появление новых контролов на Angular? Или всё останется в конфигураторе? 

А есть какие-то конкретные пожелания по недостающим компонентам в мастере раздела или главное, чтобы новые и именно на Angular?

Показать все комментарии
редактируемый реестр
права
права доступа
7.15_()
-Sales_Creatio
enterprise_edition_()

При попытке изменить запись в детали с редактируемым реестром возникает ошибка

https://yadi.sk/d/5HXBicLNQI3h5Q

Роли пользователя:

https://yadi.sk/d/rjuN-gR2MMK3qA

Права настроены следующим образом:

https://yadi.sk/d/SFqa8x2djEVUTA

Причем при попытке изменить в консоле видно следующее:

https://yadi.sk/d/eYJZ5dd1Fb_Inw

т.е. как я понимаю, система считает изменяемую запись новой и не дает изменить так как нет прав на добавление. Если в консоле изменять флаг isNew на false, то запись изменяется нормально.

З.Ы. Причем записи получается редактировать через страницу редактирования, значит проблема в редактируемом реестре.

Собственно вопрос: это баг или я не верно настраиваю права?

 

Нравится

3 комментария

У вас не выдано пользователям прав создавать записи в этом разделе

http://prntscr.com/qc9uae

Владимир Соколов,

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

Здравствуйте, Айдар!

Действительно, на стандартной детали с редактируемым реестром тоже такое наблюдается. Передали информацию о шагах воспроизведения команде разработки для анализа и исправления в будущих версиях продукта.

Показать все комментарии
редактируемый реестр
деталь с редактируемым реестром
7.13_()

Добрый день.

Необходимо в редактируемом реестре добавить свойство enabled для поля по условию.

Атрибут условия вычисляется в методе onEntityInitialized Схемы редактирования детали.

Но при загрузке редактируемого реестра ни метод init, ни onEntityInitialized  ни бизнес-правила не отрабатывают.

Как быть в такой ситуации?

 

Нравится

2 комментария
Лучший ответ

Игорь, привет!

Была подобная ситуация - нужно было забиндить enabled поля на поле в связанном справочнике. Делал примерно так:

1. На странице редактирования добавил attribute с именем "{Имя_справочного_поля}.{Имя_колонки_в_справочнике}". Значение его проставлял в onEntityInitialized, и enebled колонки завязал бизнес-правилом на этот аттрибут.

2. На странице детали детали в методе addGridDataColumns добавлял колонку с таким же именем как и аттрибут на странице редактирования (у меня там было bool) и вауля.

 

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

Костыль, конечно, но попробовать стоит. Если есть более правильный способ - тоже интересно)

Игорь, привет!

Была подобная ситуация - нужно было забиндить enabled поля на поле в связанном справочнике. Делал примерно так:

1. На странице редактирования добавил attribute с именем "{Имя_справочного_поля}.{Имя_колонки_в_справочнике}". Значение его проставлял в onEntityInitialized, и enebled колонки завязал бизнес-правилом на этот аттрибут.

2. На странице детали детали в методе addGridDataColumns добавлял колонку с таким же именем как и аттрибут на странице редактирования (у меня там было bool) и вауля.

 

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

Костыль, конечно, но попробовать стоит. Если есть более правильный способ - тоже интересно)

Ну всё правильно, вы же не открываете страницу редактирования, поэтому и ваши методы не отрабатывают. Бизнес правила описанные на странице редактирования для соответствующих полей должны отрабатывать, попробуйте сделать через них.

Показать все комментарии
Мобильное приложение
редактируемый реестр
7.10

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

Нравится

1 комментарий

Здравствуйте! 

В базовой версии предусмотрена работа только с цифровыми, дробными и булевскими полями. Ниже базовый метод схемы EditListItem: 

createEditComponentByColumnName: function(columnName) {

        var model = this.getModel();

        var columnConfig = model.ColumnConfigs.get(columnName);

        var config = {

            name: columnName,

            markerValue: columnName

        };

        switch (columnConfig.columnType) {

            case Terrasoft.ColumnTypes.number:

                config.xtype = "tsintegerfield";

                break;

            case Terrasoft.ColumnTypes.decimal:

                config.xtype = "tsfloatfield";

                break;

            case Terrasoft.ColumnTypes.bool:

                config.xtype = "tstoggle";

                break;

            default:

                return null;

        }

        return this.createFieldComponent(config);

    },

 

Мы зафиксируем Ваше пожелание для рассмотрения аналитиками продукта.

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

Создал редактируемый реестр согласно документации. 

"imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}

Мне нужно сменить иконку корзины на крестик. Не важно как. Готов, даже загрузить свою.

Но не получается ее правильно подключить. Как это сделать правильно?

Нравится

1 комментарий

Добрый день.

В детали нужно добавить "activeRowActions", в котором переопределить иконку. Реализацию можно посмотреть в ProductDetailV2UIv2.

                        

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

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

 

Я создал деталь с редактируемым реестром и страницу для нее.

 

Мне нужно либо скрыть в активной записи на конкретном справочнике, либо повесить обработчик на событие нажатия на эту кнопку.  И получить в обработчике  информацию на какой записи и справочнике был клик.

https://academy.terrasoft.ru/jscoresdk/source/clearicon.html

По ссылке нашел некоторые методы, но не знаю как их использовать.

Нравится

2 комментария

Вооружаемся напильником и в схеме детали прописываем что-то вроде

getDefaultCellControlsConfig: function(columnName, params) {
	var config = {
		itemType: Terrasoft.ViewItemType.MODEL_ITEM,
		name: columnName,
		labelConfig: {visible: false}
	};
	//columnName - название колонки из объекта
	if (columnName === 'ContainerType') {
		config.hasClearIcon=false;
	}
	return this.Ext.apply(config, params);
},

 

 Добрый день.

Если вы хотите поставить свой обработчик, то в таком случае нужно заместить модуль ConfigurationGrid, в нем переопределить метод renderRowControls. В этом методе происходит генерация моделей полей. Вам нужно в модели нужного поля подписаться на событие “cleariconclick “. Например viewModel.on(“cleariconclick “, myHandler).

Показать все комментарии
редактируемый реестр
заблокировать колонку
7.11
marketing

Нужно в редактируванном реестре заблокировать некоторые колонки для редактирования, нигде не нашел ничего подобно, такое вообще возможно?

Нравится

3 комментария

1) с помощью бизнес правил. прописать их в странице редактирования карточки этой детали

2) там есть кусок, в котором формируется контрол. можно для определённых полей прописать enabled: false (прям в коде детали)

getDefaultCellControlsConfig: function(columnName, params) {
	var config = {
		itemType: Terrasoft.ViewItemType.MODEL_ITEM,
		name: columnName,
		labelConfig: {visible: false}
	};
	if (columnName === "TmName") {
		config.enabled = false;
	}
}

+можно попробовать в объекте сделать режим использования нужной колонки - никогда (в этом способе я не уверен)

Добрый день! Попробуйте в модуле детали (который от BaseDetailV2 наследуется) определить isEditableColumn(columnName). Чтобы он заработал, в методе на детали generateActiveRowControlsConfig, в конфиге поля задать свойству enabled соответствие методу isEditableColumn

generateActiveRowControlsConfig: function(id, columnsConfig, rowConfig) {
                this.columnsConfig = columnsConfig;
                var gridLayoutItems = [];
                var currentColumnIndex = 0;
                this.Terrasoft.each(columnsConfig, function(columnConfig) {
                    var columnName = columnConfig.key[0].name.bindTo;
                    var column = this.getColumnByColumnName(columnName);
                    var cellConfig = column ? this.getCellControlsConfig(column)
                        : this.getNotFoundCellControlsConfig(columnName);
                    cellConfig = this.Ext.apply({
                        layout: {
                            colSpan: columnConfig.cols,
                            column: currentColumnIndex,
                            row: 0,
                            rowSpan: 1
                        }
                    }, cellConfig);
 
                    cellConfig.enabled = this.isEditableColumn(columnName);
 
                    if (!cellConfig.hasOwnProperty("isNotFound")) {
                        gridLayoutItems.push(cellConfig);
                    }
                    currentColumnIndex += columnConfig.cols;
                }, this);
                var gridData = this.getGridData();
                var activeRow = gridData.get(id);
                var rowClass = {prototype: activeRow};
                BusinessRulesApplier.applyRules(rowClass, gridLayoutItems);
                var viewGenerator = this.Ext.create("Terrasoft.ViewGenerator");
                viewGenerator.viewModelClass = this;
                var gridLayoutConfig = viewGenerator.generateGridLayout({
                    name: this.name,
                    items: gridLayoutItems
                });
                rowConfig.push(gridLayoutConfig);
            }

 

Благодарю! Помогло! Рекомендую!

Показать все комментарии
Деталь
редактируемый реестр
информация
колонка
7.10

Добрый день.

У меня есть деталь с редактируемым реестром, в реестре выведено 3 колонки:

1) колонка-справочник: выбирается запись из раздела Контакт

2) колонка-справочник: выбирается вручную из созданного справочника

3) текстовое поле, заблокировано: в данное поле должно подставляться значение из определенной колонки (UsrColumn1) из карточки Контакта

Подскажите, как мне автоматически подтянуть информацию в 3 колонку, при выборе значения в 1 колонке?

Нравится

1 комментарий

Здравствуйте, для РР работают подписки на события, следовательно на странице карточки детали (да хоть она уже и не отображается, часть логики с нее работает, а именно подписки, некоторые методы и бизнес-правила) необходимо доработать атрибуты одноименные нужным вам колонкам, в зависимостях указать при изменении каких колонок тригерить метод, и имя самого метода, а в методе уже через esq читать данные первой колонки, и писать их в 3ю, как-то так:



 

"UsrColumn3": {
	"dependencies": [
		{
			"columns": ["UsrColumn1"],
			"methodName": "onChange1Column"
		}
	]
},
 
....
 
onChange1Column: function() {
	// читаем нужные данные через esq из первой this.get("UsrColumn1") колонки
	и устанавливаем их в 3ю this.set("UsrColumn3", data);
},

 

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