Формирование цветовой окраски в реестре

Добрый день,
помогите решить задачу!

Необходимо формировать цветовую окраску в реестре продаж соответственно стадиям.
В справочнике "Стадии продаж" добавлено поле выбора цвета. Однако при попытке отобразить это поле в реестре (Вид/Настроить колонки), подтягивается не сам цвет, а его текстовое значение.

Подскажите пожалуйста, как подтянуть цвет?
Версия 7.4, скриншот прилагаю

Нравится

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

Здравствуйте, Дмитрий.

Выделять записи цветом в реестре возможно с помощью параметра customStyle строки реестра.

Параметр должен содержать стили в виде объекта, который может обработать Ext.DomHelper.generateStyles (http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.DomHelper-method-generate…).
Пример (метод на странице раздела):

                onGridLoaded: function () {
                    this.callParent(arguments);
                    var gridData = this.get('GridData');
                    var items = gridData.getItems();
                    var loadedObject = {};
                    Terrasoft.each(items, function (item) {
                        item.customStyle = {
                            backgroundColor: 'red'
                        };
                    });
                }

Т.е. базовым функционалом это не реализовать, только конфигурационной доработкой.

Ваш метод работает, спасибо за ответ!

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

Обнаружил что описанным выше способом можно применить стили только к записям первой страницы(
При прокрутке вниз записи грузятся без стилей

Подскажите, как применить стили ко всем записям

Дмитрий,

используйте css-стили для страницы:

http://www.community.terrasoft.ru/blogs/11575

Добрый день

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

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

<pre>define("OpportunitySectionV2", ["VisaHelper", "LookupUtilities", "css!VisaHelper", "OpportunityPageV2"],
		function(VisaHelper, LookupUtilities, OpportunityPageV2) {
	return {
		entitySchemaName: "Opportunity",
		attributes: {},
		methods: {
			init: function() {
				this.callParent(arguments);
				var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "OpportunityStage"
					});
				esq.addColumn("Id");
				esq.addColumn("UsrStageColor");
				esq.getEntityCollection(function(result){
					var res = result.collection.collection.items;
					var record = {};
					Terrasoft.each(res, function(item) {
						var id = item.values.Id;
						var color = item.values.UsrStageColor;
						record[item.values.Id] = item.values.UsrStageColor;
					});
					Terrasoft.SysValue.CURRENT_COLORS = record;
				}, this);	
			},
 
			onGridLoaded: function() {
				this.callParent(arguments);
				this.colorize();
			},
 
			colorize: function() {
				var gridData = this.get('GridData');
				var items = gridData.getItems();
				var loadedObject = {};
				Terrasoft.each(items, function (item) {
					var stage = item.get('Stage');
					item.customStyle = {
						backgroundColor: Terrasoft.SysValue.CURRENT_COLORS[stage.value]
					};
				});
			}
		},
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	}
});</pre>

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

"Олейников Владимир Владимирович" написал:

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

Если можно, приведите пожалуйста пример кода.
Заранее благодарен.

"Безродный Андрей" написал:

Здравствуйте, Дмитрий.

Выделять записи цветом в реестре возможно с помощью параметра customStyle строки реестра.

Параметр должен содержать стили в виде объекта, который может обработать Ext.DomHelper.generateStyles (http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.DomHelper-method-generateStyles).

Пример (метод на странице раздела):

                onGridLoaded: function () {

                    this.callParent(arguments);

                    var gridData = this.get('GridData');

                    var items = gridData.getItems();

                    var loadedObject = {};

                    Terrasoft.each(items, function (item) {

                        item.customStyle = {

                            backgroundColor: 'red'

                        };

                    });

                }

Т.е. базовым функционалом это не реализовать, только конфигурационной доработкой.

Попробуйте этот же код запихнуть в метод Render, только сначала вызовите функцию CallParent()

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