Всем привет!

Стоит следующая задача: заменить фильтр, на основании которого отображается список в виджете "Мои обращения" (Список обращений пользователя портала) на Главной странице портала?

Учитывая, что

1. замещение клиентских модулей запрещено

2. хочется обойтись "малой кровью"

3. делать свой модуль скопировав базовый не рационально для задачи

4. список формируется на основании подгружаемого config

хотелось бы подложить модулю свой конфиг с нужным фильтром, но никак не могу понять, как это сделать. Может кто сталкивался?

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

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

Нравится

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

Эта логика реализована в схеме «Список обращений пользователя портала» (UserCasesListModule) в функции initConfig: function(). Вероятно, проще действительно не трогать базовый, а скопировать, сделать в отдельной схеме свой аналог с нужным фильтром, а затем в дизайнере  панели итогов «Главная страница портала» указать его в свойствах блока.

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

благодарю за ответ

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

Всем доброго дня. Версия 7.13.2.

Добавил на страницу раздела быстрый фильтр, наподобие того, который реализован в разделе активностей. Фильтрация не по ответственному, по другой колонке, но не суть..

var fixedFilterConfig = {
                    entitySchema: this.entitySchema,
                    filters: [
                        {
                            name: "CategoryServiceVirtual",
                            appendCurrentContactMenuItem: false,
                            caption: "Категория услуги",
                            addNewFilterCaption: "Выбрать категорию услуги",
                            columnName: "CategoryService",
                            // Укажем значение по умолчанию
                            defValue: this.get("CategoryServiceVirtual"),
                            dataValueType: this.Terrasoft.DataValueType.LOOKUP,
                            appendFilter: function(filterInfo) {                            	
								console.log(filterInfo)
							}
                        }
                    ]
                };

Однако нужно чтобы при открытии раздела уже была указана одна из категорий по умолчанию. 

CategoryServiceVirtual - виртуальная колонка со значением в формате {value: guid, displayValue: "Название"}. Но при попытке подставить её значение (а значение точно есть) в defValue фильтра, фильтр остаётся незаполненным.

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

Как правильно задать значение по умолчанию?

Нравится

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

Могу ошибаться, но попробуйте добавить в CategoryServiceVirtual свойство - primaryImageValue, присвойте ему просто нулевой guid.

Могу ошибаться, но попробуйте добавить в CategoryServiceVirtual свойство - primaryImageValue, присвойте ему просто нулевой guid.

Показать все комментарии
Автогенерируемая страница
7.14_()
service

Добрый день!

Можно ли открывать автогенерируемую страницу до создания записи в разделе или сразу после выбора значения в справочном поле?

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

Так что думал решить этот момент за счет автогенерируемой страницы.

Один нюанс - логика должна отрабатывать до сохранения записи в разделе.

Нравится

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

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

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

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

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

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

Есть корпоративная почта, права к которой настроены только для учетки Supervisor. Создал бизнес-процесс который при определенных условиях (Пользователь добавляет в деталь запись) должен отправлять письмо с корпоративной почты. Вот когда пользователь добавляет запись, БП запускается под этим пользователем, но так как у пользователя доступа к корпоративной почте нет, БП ломается.

Как сделать так, чтобы процесс запускался всегда под учеткой Supervisor?

Нравится

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

Как вариант, чтобы в вашем бизнес процессе кодом стартовал новый (второй) бизнес процесс уже от имени супервизора. 

Как вариант, чтобы в вашем бизнес процессе кодом стартовал новый (второй) бизнес процесс уже от имени супервизора. 

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

Есть два справочника, Города (базовый) и Районы (Custom). В справочнике районов при добавлении записей, заполняется поле Город. Но возник вопрос, как в карточке редактирования (например в контактах), при выборе города проживания, наложить фильтр на справочник Районов? 

Нравится

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

Добрый день!

Можно при помощи бизнес правил: кодом или редактором 

Добрый день!

Можно при помощи бизнес правил: кодом или редактором 

Спасибо за помощь. Все работает как надо.

Показать все комментарии
xml
7.14_()
DataService
Бизнес-процессы
веб-сервис
service

Доброго дня, коллеги!

Стоит следующая задача - необходимо считать и отправить данные из объекта на удаленный веб-сервис. Удаленный веб-сервис принимает данные в формате XML. Подскажите пожалуйста, каким образом лучше всего это реализовать - используя бизнес-процессы, DataService или каким-либо другим способом? Заранее благодарю за развернутые ответы. 

Нравится

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

Добрый день!

Бизнес процесс, в котором скрипт С# с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Добрый день!

Бизнес процесс, в котором скрипт С# с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

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

Всем добрый день. Версия 7.12.

Подскажите, а есть ли какой-нибудь аналог такой конструкции:

esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "PrimaryDisplayColumnValue");

на бекенде, для указания в коде задания-сценария бизнес-процесса?

Т.е. получение значения строковой колонки, имеющей отметку как "Отображаемая" при условии, что мы не знаем кода этой колонки?

Нравится

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

Добрый день!

У Entity есть поле PrimaryDisplayColumnValue

Использую вот такую конструкцию:

var esqLookup = new EntitySchemaQuery(UserConnection.EntitySchemaManager, objectId);
var idLookup = esqLookup.AddColumn("Id"); //Id
//var idLookupName = esqLookup.GetPrimaryDisplayColumn();
var lookup= esqLookup.GetEntity(UserConnection, new Guid(guidCode.ToString()));
 
var lookupId = lookup.GetTypedColumnValue<Guid>(idLookup.Name);
var lookupName = lookup.PrimaryDisplayColumnValue;

И получаю в lookupName пустоту. При этом значение id вытаскивается верное.

Можно при помощи GetPrimaryDisplayColumnName:

entitySchemaQuery = new EntitySchemaQuery(typeSchema);
var typePrimaryColumnName = entitySchemaQuery.AddColumn(typeSchema.GetPrimaryColumnName()).Name;
var typeDisplayColumnName = entitySchemaQuery.AddColumn(typeSchema.GetPrimaryDisplayColumnName()).Name;

 

Смородинов Денис,

А Entity Вы получаете?

Попробуйте таким образом:

EntitySchema entitySchema = userConnection.EntitySchemaManager.GetInstanceByName(entityName);
Entity entity = entitySchema.GetEntity(userConnection, idValue);
var primaryColumnValue = entity.PrimaryColumnValue;
var primaryDisplayColumnValue = entity.PrimaryDisplayColumnValue;

 

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

typeSchema

А можно уточнить вопрос? typeSchema - это то, что у меня в скобках ?

var esqLookup = new EntitySchemaQuery(UserConnection.EntitySchemaManager, objectId);

У ESQ есть несколько разных конструкторов. В моём примере typeSchema — переменная типа EntitySchema. Получить схему по названию можно так:

var manager = UserConnection.EntitySchemaManager;
var schema = manager.GetInstanceByName("Dashboard");

 

Смородинов Денис,

А у вашего объекта установлена колонка для отображения?

Показать все комментарии
7.x
поле справочника
Режим отображения дерево - список
дерево
7.14_()
service

Добрый день!

В коробке в карточке "Сотрудник" есть поле "Подразделение" типа Справочник.

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

Есть ли возможность в отдельном поле типа Справочник создать аналогичный формат поиска записи?

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

Нравится

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

Добрый день!

Нужно на странице объявить атрибут:

"OrgStructureUnit": {
	"lookupConfig": {
		"hierarchical": true
	},
	"lookupListConfig": {
		"columns": ["FullName", "Head", "Parent.Head"]
	}
},

И ваш справочник должен поддерживать иерархичность: иметь ссылку Parent на себя.

Подробнее можно посмотреть на странице EmployeePage

Добрый день!

Нужно на странице объявить атрибут:

"OrgStructureUnit": {
	"lookupConfig": {
		"hierarchical": true
	},
	"lookupListConfig": {
		"columns": ["FullName", "Head", "Parent.Head"]
	}
},

И ваш справочник должен поддерживать иерархичность: иметь ссылку Parent на себя.

Подробнее можно посмотреть на странице EmployeePage

Сидоров Александр В.,

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

Выбор система предлагает делать в виде дерева. Это заработало. 

Только в результате в поле указывается не "FullName", а "Name".

Требуется ли прописывать дополнительный код или FullName должно заполняться сразу?

Вот пример кода (по сути тут указаны все те же настройки, что и для коробочного поля):

"UsrDep": {

                    "lookupConfig": {

                        "hierarchical": true

                    },

                    "lookupListConfig": {

                        "columns": ["FullName", "Head", "Parent.Head"]

                    }

                }

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

Коллеги, спасибо!

Вопрос решен. Ранее уже про правку кода нашел примеры в логике, на которую Сидоров Александр ссылался.

Показать все комментарии
Мобильное приложение
реестр
справочник
7.13_()
service

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

Возник следующий вопрос.

Необходимо в реестр справочника, например Статусы обращения, вывести значения колонки IsFinal аналогично методу setSubtitleColumns согласно SDK

https://academy.terrasoft.ru/documents/technic-sdkmob/7-12/sdk-reestra

В коробочном решении грид справочника выглядит следующим образом:

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

 

 

 

 

 

Пример необходимой реализации, колонка контакт:

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

 

 

 

 

 

 

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

Попытки задания Subtitle через дополнительный модуль, подключённый в манифесте для раздела Case, не дал результата. Что-то делаю не так.

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

Спасибо!

 

Нравится

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

Примеры использования этого свойства есть в «коробке» в схемах MobileLookupGridPageConfig, MobileLookupGridOpportunityPageConfig, MobileCaseMessageHistoryModuleConfig и MobileCaseMessageHistoryModuleConfig. Судя по названию, вторая схема как раз может использоваться для окна выбора из справочника. Её код:

Terrasoft.sdk.LookupGridPage.setSubtitleColumns("Opportunity", ["Account"]);

 

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

Изображение удалено.Добрый день, подскажите как реализовать данную задачу.

В разделе создал пользовательские фильтры Улица, Дом , Квартира. Значения в фильтре Дом зависят от Улицы, а значения в фильтре Квартира от значения Дом.

Если нажимать на "лупу" то фильтрация успешно отрабатывает. Но если вводить значения в поле - фильтр в выпадающем списке не срабатывает.

Как реализовать фильтрацию выпадающего списка в разделе?

Код схемы раздела:

define("VcApartments1Section", ["BaseFiltersGenerateModule", "css!VcMyFilterStyle"], 
function(BaseFiltersGenerateModule) {
	return {
		entitySchemaName: "VcApartments",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "MyFilterGroupContainer",
				"parentName": "LeftGridUtilsContainer",
				"propertyName": "items",
				"index": 0,
				"values": {
					"id": "MyFilterGroupContainer",
					"itemType": this.Terrasoft.ViewItemType.CONTAINER,
					"items": []
				}
			},
			{
				"operation": "insert",
				"name": "MyFilterContainer",
				"parentName": "MyFilterGroupContainer",
				"propertyName": "items",
				"index": 0,
				"values": {
					"id": "MyFilterContainer",
					"itemType": this.Terrasoft.ViewItemType.CONTAINER,
					"items": []
				}
			},
			{
				"operation": "insert",
				"parentName": "MyFilterContainer",
				"propertyName": "items",
				"name": "VcStreetFilter",
				"values": {
					"bindTo": "VcStreetFilter",
					"caption": "Улица"
				}
			},
			{
				"operation": "insert",
				"name": "MyFilterContainer2",
				"parentName": "MyFilterGroupContainer",
				"propertyName": "items",
				"index": 1,
				"values": {
					"id": "MyFilterContainer2",
					"itemType": this.Terrasoft.ViewItemType.CONTAINER,
					"items": []
				}
			},
				{
				"operation": "insert",
				"parentName": "MyFilterContainer2",
				"propertyName": "items",
				"name": "VcHouseFilter",
				"values": {
					"bindTo": "VcHouseFilter",
					"caption": "Дом"
					// "controlConfig": {
					// 	"prepareList": {
	    //                         "bindTo": "VcHouseFilter"
	    //                     }
					// // "contentType": Terrasoft.ContentType.ENUM
					// }
				}
			},
			{
				"operation": "insert",
				"name": "MyFilterContainer3",
				"parentName": "MyFilterGroupContainer",
				"propertyName": "items",
				"index": 2,
				"values": {
					"id": "MyFilterContainer3",
					"itemType": this.Terrasoft.ViewItemType.CONTAINER,
					"items": []
				}
			},
			{
				"operation": "insert",
				"parentName": "MyFilterContainer3",
				"propertyName": "items",
				"name": "VcNameFilter",
				"values": {
					"bindTo": "VcNameFilter",
					"caption": "Квартира"
				}
			}
			]/**SCHEMA_DIFF*/,
		attributes: {
			"VcStreetFilter": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP,
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				isLookup: true,
				caption: "VcStreet",
				referenceSchemaName: "VcStreet"
			},
			"VcHouseFilter": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP,
				"lookupListConfig": {
					// Массив фильтров, применяемых к запросу для формирования данных поля-справочника.
					"filters": [
						function() {
							var filterGroup = Ext.create("Terrasoft.FilterGroup");
							var VcStreetFilter = this.get("VcStreetFilter");
							if (VcStreetFilter && VcStreetFilter.value) {
							filterGroup.add("VcStreetFilter",Terrasoft.createColumnFilterWithParameter
							(Terrasoft.ComparisonType.EQUAL, "[VcHouses:Id].VcStreet", VcStreetFilter.value));
							} else {
								filterGroup.removeByKey("VcStreetFilter");
							}
							return filterGroup;
						}
					]
				},
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				isLookup: true,
				caption: "VcHouse",
				referenceSchemaName: "VcHouses"
			},
			"VcNameFilter": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP,
				"lookupListConfig": {
					// Массив фильтров, применяемых к запросу для формирования данных поля-справочника.
					"filters": [
						function() {
							var filterGroup = Ext.create("Terrasoft.FilterGroup");
							var VcHouseFilter = this.get("VcHouseFilter");
							if (VcHouseFilter && VcHouseFilter.value) {
							filterGroup.add("VcHouseFilter",Terrasoft.createColumnFilterWithParameter
							(Terrasoft.ComparisonType.EQUAL, "[VcApartments:Id].VcHouse", VcHouseFilter.value));
							} else {
								filterGroup.removeByKey("VcHouseFilter");
							}
							return filterGroup;
 
						}
					]
				},
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				isLookup: true,
				caption: "VcName",
				referenceSchemaName: "VcApartments"
			}
		},
		mixins: {
			LookupQuickAddMixin: "Terrasoft.LookupQuickAddMixin"
		},
		methods: {
			onLookupChange: function(newValue, columnName) {
				this.callParent(arguments);
				if (columnName === "VcStreetFilter") {
					this.set("VcStreetFilter", newValue);
					this.onVcStreetFilterChanged();
				}
				if (columnName === "VcHouseFilter") {
					this.set("VcHouseFilter", newValue);
					this.onVcHouseFilterChanged();
				}
				if (columnName === "VcNameFilter") {
					this.set("VcNameFilter", newValue);
					this.onVcNameFilterChanged();
				}
			},
 			// Обновляет грид
			onVcStreetFilterChanged: function() {
				this.reloadGridData();
			},
 
			onVcHouseFilterChanged: function() {
				this.reloadGridData();
			},
 
 			onVcNameFilterChanged: function() {
				this.reloadGridData();
			},
			// Инициализирует фиксированные фильтры
			initQueryFilters: function(esq) {
				this.callParent(arguments);
			// Фильтр по Улице
				var VcStreetFilter = this.get("VcStreetFilter");
 
				if (VcStreetFilter && VcStreetFilter.value) {
					esq.filters.add("VcStreetFilter", this.Terrasoft.createColumnFilterWithParameter(
						this.Terrasoft.ComparisonType.EQUAL, "[VcApartments:Id].VcStreet", VcStreetFilter.value));
				} else {
					esq.filters.removeByKey("VcStreetFilter");
				}
			// Фильтр по Дому
				var VcHouseFilter = this.get("VcHouseFilter");
 
				if (VcHouseFilter && VcHouseFilter.value) {
					esq.filters.add("VcHouseFilter", this.Terrasoft.createColumnFilterWithParameter(
						this.Terrasoft.ComparisonType.EQUAL, "[VcApartments:Id].VcHouse", VcHouseFilter.value));
				} else {
					esq.filters.removeByKey("VcHouseFilter");
				}
			// Фильтр по названию
				var VcNameFilter = this.get("VcNameFilter");
 
				if (VcNameFilter && VcNameFilter.value) {
					esq.filters.add("VcNameFilter", this.Terrasoft.createColumnFilterWithParameter(
						this.Terrasoft.ComparisonType.EQUAL, "[VcApartments:Id].Id", VcNameFilter.value));
				} else {
					esq.filters.removeByKey("VcNameFilter");
				}
			}
		}
	};
});

 

Нравится

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

Сталкивался с подобной проблемой. Пришлось заместить данные методы на странице редактирования (в моем случае) InvoiceSectionV2

			/**
			 * @inheritdoc Terrasoft.BaseViewModel#onLookupDataLoaded
			 * @override
			 */
			onLookupDataLoaded: function(config) {
				this.callParent(arguments);
				this.mixins.LookupQuickAddMixin.onLookupDataLoaded.call(this, config);
			},
			getLookupListConfig: function() {
				return this.mixins.LookupQuickAddMixin.getLookupListConfig.apply(this, arguments);
			},
 
			/**
			 * @inheritdoc Terrasoft.BaseViewModel#getLookupQuery
			 * @override
			 */
			getLookupQuery: function(filterValue, columnName) {
				var esq = this.callParent(arguments);
				this.applyColumnsOrderToLookupQuery(esq, columnName);
				var filterGroup = this.getLookupQueryFilters(columnName);
				esq.filters.addItem(filterGroup);
				return esq;
			},
			/**
			 * Applies order information to lookup entity schema query.
			 * @protected
			 * @param {Terrasoft.EntitySchemaQuery} esq Entity schema query.
			 * @param {String} columnName Lookup column name.
			 */
			applyColumnsOrderToLookupQuery: function(esq, columnName) {
				var lookupColumn = this.getColumnByName(columnName);
				var lookupListConfig = lookupColumn.lookupListConfig;
				if (!lookupListConfig || !lookupListConfig.orders) {
					return;
				}
				var columns = esq.columns;
				this.Terrasoft.each(lookupListConfig.orders, function(order) {
					var orderColumnPath = order.columnPath;
					if (!columns.contains(orderColumnPath)) {
						esq.addColumn(orderColumnPath);
					}
					var sortedColumn = columns.get(orderColumnPath);
					var direction = order.direction;
					sortedColumn.orderDirection = direction ? direction : Terrasoft.OrderDirection.ASC;
					var position = order.position;
					sortedColumn.orderPosition = position ? position : 1;
					this.shiftColumnsOrderPosition(columns, sortedColumn);
				}, this);
			},
			/**
			 * Shift columns order position.
			 * @private
			 * @param {Array} columns Entity columns.
			 * @param {Object} sortedColumn Entity sorting column.
			 */
			shiftColumnsOrderPosition: function(columns, sortedColumn) {
				var sortedColumnOrderPosition = sortedColumn.orderPosition;
				if (Ext.isNumber(sortedColumnOrderPosition)) {
					columns.each(function(column) {
						if (column !== sortedColumn && Ext.isNumber(column.orderPosition) &&
							column.orderPosition >= sortedColumnOrderPosition) {
							column.orderPosition += 1;
						}
					});
				}
			},

 

Сталкивался с подобной проблемой. Пришлось заместить данные методы на странице редактирования (в моем случае) InvoiceSectionV2

			/**
			 * @inheritdoc Terrasoft.BaseViewModel#onLookupDataLoaded
			 * @override
			 */
			onLookupDataLoaded: function(config) {
				this.callParent(arguments);
				this.mixins.LookupQuickAddMixin.onLookupDataLoaded.call(this, config);
			},
			getLookupListConfig: function() {
				return this.mixins.LookupQuickAddMixin.getLookupListConfig.apply(this, arguments);
			},
 
			/**
			 * @inheritdoc Terrasoft.BaseViewModel#getLookupQuery
			 * @override
			 */
			getLookupQuery: function(filterValue, columnName) {
				var esq = this.callParent(arguments);
				this.applyColumnsOrderToLookupQuery(esq, columnName);
				var filterGroup = this.getLookupQueryFilters(columnName);
				esq.filters.addItem(filterGroup);
				return esq;
			},
			/**
			 * Applies order information to lookup entity schema query.
			 * @protected
			 * @param {Terrasoft.EntitySchemaQuery} esq Entity schema query.
			 * @param {String} columnName Lookup column name.
			 */
			applyColumnsOrderToLookupQuery: function(esq, columnName) {
				var lookupColumn = this.getColumnByName(columnName);
				var lookupListConfig = lookupColumn.lookupListConfig;
				if (!lookupListConfig || !lookupListConfig.orders) {
					return;
				}
				var columns = esq.columns;
				this.Terrasoft.each(lookupListConfig.orders, function(order) {
					var orderColumnPath = order.columnPath;
					if (!columns.contains(orderColumnPath)) {
						esq.addColumn(orderColumnPath);
					}
					var sortedColumn = columns.get(orderColumnPath);
					var direction = order.direction;
					sortedColumn.orderDirection = direction ? direction : Terrasoft.OrderDirection.ASC;
					var position = order.position;
					sortedColumn.orderPosition = position ? position : 1;
					this.shiftColumnsOrderPosition(columns, sortedColumn);
				}, this);
			},
			/**
			 * Shift columns order position.
			 * @private
			 * @param {Array} columns Entity columns.
			 * @param {Object} sortedColumn Entity sorting column.
			 */
			shiftColumnsOrderPosition: function(columns, sortedColumn) {
				var sortedColumnOrderPosition = sortedColumn.orderPosition;
				if (Ext.isNumber(sortedColumnOrderPosition)) {
					columns.each(function(column) {
						if (column !== sortedColumn && Ext.isNumber(column.orderPosition) &&
							column.orderPosition >= sortedColumnOrderPosition) {
							column.orderPosition += 1;
						}
					});
				}
			},

 

Спасибо, все получилось!

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