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

 

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

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

 

 

 

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

Спасибо!

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

Добрый день!

Хотелось бы узнать, возможно ли отключить кеширование данных для конкретного раздела(схемы)?

Например: мне нужно сбрасывать сортировку всех столбцов после перезагрузки раздела, однако, в данный момент вся сортировка сохраняется в кеше, возможно ли как-то решить данный вопрос?

Вот пример сортировки которая должна сбрасываться при обновлении страницы:

MyFunc: function() {
	return {
              "ModifiedOn": {path: "ModifiedOn", 
                  orderPosition: 0, 
                  orderDirection: Terrasoft.OrderDirection.DESC 
              }
	};
}

Нравится

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

Это сохраняется не в кеше, а в профиле пользователя.
Сохраняет метод setColumnsProfile в GridUtilitiesV2:
 

setColumnsProfile: function(viewColumnsSettingsProfile, notSaveToProfile) {
			const profile = this.get("Profile");
			if (notSaveToProfile !== true) {
				const gridName = this.getDataGridName();
				if (profile[gridName]) {
					const profileKey = profile[gridName].key;
					Terrasoft.utils.saveUserProfile(profileKey, viewColumnsSettingsProfile, false);
				}
			}
			this.set("Profile", viewColumnsSettingsProfile);
		},

Нужно просто на схеме раздела заместить данный метод, чтобы он ничего не делал:

setColumnsProfile: Terrasoft.emptyFn

 

Это сохраняется не в кеше, а в профиле пользователя.
Сохраняет метод setColumnsProfile в GridUtilitiesV2:
 

setColumnsProfile: function(viewColumnsSettingsProfile, notSaveToProfile) {
			const profile = this.get("Profile");
			if (notSaveToProfile !== true) {
				const gridName = this.getDataGridName();
				if (profile[gridName]) {
					const profileKey = profile[gridName].key;
					Terrasoft.utils.saveUserProfile(profileKey, viewColumnsSettingsProfile, false);
				}
			}
			this.set("Profile", viewColumnsSettingsProfile);
		},

Нужно просто на схеме раздела заместить данный метод, чтобы он ничего не делал:

setColumnsProfile: Terrasoft.emptyFn

 

Владислав Литвинчук,

Благодарю Владислав, да, это то что нужно. Переопределил метод без логики сохранения и всё заработало. Спасибо ещё раз!

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

Всем доброго времени суток!

Стоит задача настройки сортировки очереди не по существующему приоритету, а по числовому - http://prntscr.com/mf7dc3
Подскажите в какой схеме происходит сортировка что бы поправить на кастомную.
Заранее благодарен.

Нравится

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

Галка «Сортировать по приоритету» добавляется в схеме страницы QueueItemSection:

{
	"operation": "insert",
	"name": "AgentViewMode",
	"parentName": "LeftGridUtilsContainer",
	"index": 0,
	"propertyName": "items",
	"values": {
		"checked": {"bindTo": "UseAgentViewSorting"},
		"visible": {"bindTo": "getAreFixedFilterCheckboxesVisible"},
		"caption": {"bindTo": "Resources.Strings.AgentViewCheckboxCaption"},
		"labelButtonClick": {"bindTo": "onUseAgentViewLabelButtonClick"},
		"generator": "QueueItemSectionViewHelper.getFixedFilterCheckboxGenerator"
	}
},

Её значение UseAgentViewSorting учитывает логика:

/**
 * @inheritdoc Terrasoft.GridUtilities#initQueryColumns
 * @overridden
 */
initQueryColumns: function(esq) {
	this.mixins.GridUtilities.initQueryColumns.apply(this, arguments);
	if (this.get("UseAgentViewSorting")) {
		this.addQueueSortColumns(esq, this.get("QueueColumnsSortConfig"));
	}
},
 
/**
 * @inheritdoc Terrasoft.GridUtilities#initQuerySorting
 * @overridden
 */
initQuerySorting: function(esq) {
	this.mixins.GridUtilities.initQuerySorting.apply(this, arguments);
	if (this.get("UseAgentViewSorting")) {
		this.initQueueQuerySorting(esq, this.get("QueueColumnsSortConfig"));
	}
},

QueueColumnsSortConfig берётся:

/**
 * Initializes sorting options.
 * @param {Function} callback The callback function.
 * @protected
 */
initQueueSortingConfig: function(callback) {
	this.queryColumnsSortConfig({
		callback: function(sortConfig) {
			this.set("QueueColumnsSortConfig", sortConfig);
			callback();
		}.bind(this)
	});
},

А вот и сортировка, но по имени:

/**
 * @inheritdoc Terrasoft.QueueSortUtilities#getInitialQueueSortConfig
 * @overridden
 */
getInitialQueueSortConfig: function() {
	var sortConfig = this.mixins.QueueSortUtilities.getInitialQueueSortConfig.apply(this, arguments);
	sortConfig.push({
		"name": "Queue.QueueEntitySchema.Name",
		"orderPosition": 4,
		"orderDirection": Terrasoft.OrderDirection.ASC
	});
	return sortConfig;
},

Логика включения-выключения галки:

/**
 * Handles Agent view Label 'click' event.
 * @protected
 */
onUseAgentViewLabelButtonClick: function() {
	this.set("UseAgentViewSorting", !this.get("UseAgentViewSorting"));
},
 
/**
 * Handles UseAgentView attribute value changed.
 * @param {Backbone.Model} model The model.
 * @param {Boolean} useAgentView The new attribute value.
 */
onUseAgentViewChanged: function(model, useAgentView) {
	if (useAgentView) {
		this.set("SortColumnIndex", -1);
		this.reloadGridData();
	}
	this.set("IsSortMenuVisible", !useAgentView);
	this.saveCheckboxAttributeInProfile("UseAgentViewSorting", useAgentView);
},

 

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

Благодарю. В целом помогло.

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

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

"lookupListConfig": {
                    columns: ["Number"],
                    orders: [
                        {
                            columnPath: "Number",
                            direction: Terrasoft.OrderDirection.ASC
                        }
                    ]
                },

Нравится

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

скорее всего Number просто текстовое поле, поэтому сортировка происходит некорректно

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

Реализовать сортировку справочного поля можно следующим образом:

"название колонки страницы": {
    dataValueType: Terrasoft.DataValueType.LOOKUP,
        lookupListConfig: {
            orders: [
                  { 
                        columnPath: "колонка справочника, которая сортируется", 
                        direction: Terrasoft.OrderDirection.ASC 
                  }
            ]
        } 
    }

Одеяненко Юлия,

 

Дополню твой ответ, что этот кусок кода должен быть размещен на странице в attributes {}

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

Добрый день Коллеги!

Появилась необходимость реализовать отдельную сортировку по умолчанию в Grid'е детали.

Итак немного отсылки о детали. Деталь содержит в себе записи относящиеся к справочной колонке "Объект администрирования". Грубо говоря есть 4ре отдела и есть неограниченное количество пользователей, которые так или иначе входят в эти отделы (отдел - организационный юнит).

Так вот при клике на + у детали всплывает справочник этих сущностей, где пользователь может выбрать как отделы так и других пользователей. 

После этого происходит стандартное добавление выбранных записей в деталь.

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

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

Так же что-то удалось найти в diff на BaseGridDetail который соответствует сортировке, но как-то это тоже ни к чему не привело.

Есть мысль что при загрузке коллекции в методе onGridDataLoaded получать коллекцию и при помощи underscore.js сортировать её как угодно, но вроде как это накладно и производительней было бы получить уже отсортированную коллекцию.

У кого какие предложения/идеи будут по данному посту?

Нравится

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

Добрый день. Не очень понял, а почему "я уперся в GridUtilites и решил дальше не лезть"? Можно же функцию из миксина переопределить в схеме самой детали, сославшись на родительскую, если нужно, через this.mixins.GridUtilitiesV2.... . На вскидку, вроде надо "допилить" initQuerySorting ???

типа такого:

 

initQuerySorting: function(esq) {

    this.mixins.GridUtilitiesV2.initQuerySorting(esq);

    /* далее какие-то ваши действия с esq */

}

 

Или наоборот, сначала - ваша сортировка, потом - родительский метод.

Иванов Александр А.,

Да, спасибо. Мы уже разрешили проблему. Если интересно могу поделиться кодом.

Да, было бы неплохо. Посмотреть, к тому же, насколько отличается от моей мысли. ))

initQuerySorting: function(esq) {
	var createdOnColumn = esq.addColumn("KmName", "Name");
	createdOnColumn.orderDirection = this.Terrasoft.OrderDirection.ASC;
}

Всё свелось к тому что такой путь посоветовала Тех. поддержка. А у меня там уже простынка такая строчек на 100 была как коллекцию грида сортироватьlaugh

Кисловский Михаил Андреевич,

Ну да, только тут остальная сортировка "идёт лесом". Поддержка, как всегда, короче... smiley

Иванов Александр А.,

Ну с остальной сортировкой да. Но в целом можно выкрутиться думаю если захотеть) 

Я, наверное, тогда промолчу про 

getGridDataColumns: function() {
	return {
		"Id": {path: "Id"},
		"TmName": {path: "TmName"},
		"TmStartDate": {path: "TmStartDate", orderPosition: 0, orderDirection: Terrasoft.OrderDirection.DESC},
		"TmStudios": {path: "TmStudios", orderPosition: 1, orderDirection: Terrasoft.OrderDirection.DESC}
	};
},

где можно сортировку по каждой колонке настроить...

Варфоломеев Данила,

спасибо, что не промолчал ;)

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

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

Пытаюсь реализовать сортировку справочного поля типа ENUM.

attributes: {
			"LeadType": {"isRequired": false},
			"Stage": {
				"lookupListConfig": {
					"filters": [
						function() {
							var filterGroup = Ext.create("Terrasoft.FilterGroup"), {
								sortProperty: "Number"
							});
							filterGroup.add("ActiveStage",
								Terrasoft.createColumnFilterWithParameter(
									Terrasoft.ComparisonType.EQUAL,
										"UsrShowInMiniPage", "1"));
							filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
							filterGroup.add("Sort",
								Terrasoft.createColumnFilterWithParameter(
									Terrasoft.ComparisonType.GREATER_OR_EQUAL,
										"Number", "0"));
							return filterGroup;
 
						}
					]
				}
			}
		},

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

Нравится

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

А если вот так?

"Stage": {
	"lookupListConfig": {
		"filters": [
			function() {
				var filterGroup = Ext.create("Terrasoft.FilterGroup"), {
					sortProperty: "Number"
				});
				filterGroup.add("ActiveStage",
					Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL,
							"UsrShowInMiniPage", "1"));
				filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
				filterGroup.add("Sort",
					Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.GREATER_OR_EQUAL,
							"Number", "0"));
				return filterGroup;
 
			}
		],
		"columns": ["Number"]
	}
}

 

Добрый день.

Добавьте свойство orders в lookupListConfig. К примеру:

"Owner": {
    lookupListConfig: {
        columns: ["Name"],
        orders: [
            {
                columnPath: "Name",
                direction: Terrasoft.OrderDirection.DESC
            }
        ]
    }
},

Терещук Сергей,

Сортировка таким образом не работает. Ни при указании колонки "Name", ни при какой-либо другой колонки. Direction также не влияет на порядок отображения

Варфоломеев Данила,

Сортировка также не работает, тем не менее, колонка "Number" добавляется в ответ от сервера

Проблема в том, что Террасофт запилил поддержку orders только в BasePageV2. Если у вас мини-карточка или какая-то другая карточка, которая не наследуется от BasePageV2, то сортировка работать не будет. Но всегда можно заместить родителя и реализовать в нем сортировку по аналогии с базовой карточкой

Показать все комментарии
Доброго времени суток.Просьба на сайте добавить возможность сортировать "Идеи" и "Блоги" по проставленным лайкам / дате создания / популярности (кол-во комментов).
7 комментариев

А еще отменить возможность ставить лайки анонимным пользователям и наконец то разделить все разделы по платформам 3.Х, 5.Х и 7.Х :smile:

"Александр Свистунов" написал:А еще отменить возможность ставить лайки анонимным пользователям

И правда можно же, эх накручу :cool:

"Александр Кудряшов" написал:эх накручу

Говорят, 99,9% мыслей уже кому то приходили в голову: 1, 2.
Однажды я сам удивился такой популярности, не знаю кому это надо было:smile: - 3

Понятно, что такого разрыва быть не может.

"Александр Свистунов" написал:Понятно, что такого разрыва быть не может
Ничего себе там голосов :)

"Александр Кудряшов" написал:Ничего себе там голосов :)

накручивают

У меня еще один крик души. Статус Идеи. Почему-то все рассматриваются. Причём, годами. Причём, некоторые уже реализовали, но еще рассматривают. А некоторые никогда не реализуют, но еще рассматривают.

Инициативу лучше всего убивать равнодушием..

"Владимир Соколов" написал:

У меня еще один крик души. Статус Идеи. Почему-то все рассматриваются. Причём, годами. Причём, некоторые уже реализовали, но еще рассматривают. А некоторые никогда не реализуют, но еще рассматривают.

Инициативу лучше всего убивать равнодушием..


Крутая идея

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

Добрый день!
Столкнулся с такой проблемой:
В элементе чтение данных процесса необходимо выбрать последнюю запись по дате(Дата окончания подписки).
Эксперименты с галкой "читать первые при указанной сортировке" и указание различных порядков по сортировке показали, что результат независимо от настроек всегда такой же как и без сортировки.
Вопрос: как все таки установить сортировку по убыванию?
Версия 7.2.0.942

Нравится

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

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

Здравствуйте, Иван.
Данная проблема действительно присутствует в данной сборке. Ошибка исправлена в более старших версиях приложения. Для исправления ошибки в Вашей версии приложения Вам необходимо в разделе "Конфигурация" открыть метаданные, вкладку "Пакет разницы" схемы "ReadDataUserTask" и вставить в нее код вложенного документа readdatausertask.txt затем выполнить сохранение метаданных и компиляцую измененного.

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

Есть поле LookupDataControl, которое в датасете установлено как выпадающий список (галочка "Отображать как выпадающий список в карточках")

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

В профайлере тоже отображает выборку из базы без указания сортировки.

Terrasoft 3.4.1.106

Нравится

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

Виктор, добрый день!

По умолчанию LookupDataControl с включенным simple select не использует ORDER BY.

Но можно добавить: для контрола в функции OnPrepareSelectWindow пропишите:

var Dataset = LookupDataControl.DataField.LookupDataset;
Dataset.DataFields.ItemsByName('Name').OrderType = otDesc;

либо otAsc.

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

Например, при выборе города требуется отобразить не только колонку "Название", но и колонку "Страна", а также отсортировать сначала по стране, а потом по названию.
Как правильно это сделать в 7-ке?
Сейчас обычно список содержит одну колонку с первичным полем для отображения.

Нравится

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

Валерий,

Теоретически, можно полностью переопределить LookupPage, чтобы при выборе из объекта городов, в реестре отображались две колонки.
В 7.2 настройка колонок, в карточке выбора из справочника, реализована пользовательски, возможно, есть смысл дождаться релиза новой версии.

Смысл, может, и есть :smile:, но:
- когда планируется релиз новой версии?
- насколько просто будет перенести из 7.1 свои настройки - достаточно ли будет сохранить и загрузить новые и замещенные схемы?

Валерий, обращался к коллегам из департамента разработки. Релиз планируется выпустить в ближайшее время, январь-февраль. И заодно попросил рекомендаций о том, как реализовать карточку выбора из справочника с несколькими колонками и получил ответ, что с текущим ядром (7.1) - никак.

Максим, спасибо!
Подождем... А если "припечет", попробуем заместить LookupPage :smile:

От вывода нескольких колонок пока отказались, а с сортировкой оказалось просто - добавили в заменяющей схеме страницы такой код:

	var City = this.find('City');
	if (City) {
		City.orders = [{
			columnPath: 'Country'
		}, {
			columnPath: 'Name'
		}];
	}
Показать все комментарии