Создание дополнительного представления реестра раздела

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

Версия 7.7.0.2325

Нужно реализовать дополнительный реестр, с сохранением всех функций раздела (вариант из https://community.terrasoft.ru/blogs/12682 не подходит). Принцип работы такой же как в разделе активности, только место расписания должны отображаться отфильтрованные данные, также для пользователя должен сохраняться выбор реестра с которым он закончил работать, т.е. стандартный функционал - если зашел в аналитику раздела, следующий раз при переходе в раздел из основного меню попадаешь не в реестр а в аналитику.

Создал новый раздел и работаю в нем(код раздела в приложении).
Переход между представлениями работает нормально, скрывается стандартное GridDataView и отображаеться новое WarehouseDataView и наоборот(одноименные скриншоты в приложении).

При переходе в новое представления данные не загружаются в грид, подскажите пожалуйста что нужно добавить\изменить что бы загружались данные?
Насколько я понял WarehouseDataGrid хоть и добавляется но не инициализируеться полностью, т.к. у элемента не хватает классов в отличие от стандартного грида (видно на скринах).

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

Нравится

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

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

Попробуйте переопределить в своём разделе метод getCurrentGrid таким образом, чтобы он возвращал корректный реестр (по примеру аналогичного метода в SysAdminUnitSectionV2).

Также необходимо решить проблему получения всех нужных данных из профиля при генерации схемы раздела. Базовый метод getProfileKey из SectionModuleV2 возвращает ключ только для профиля представления GridDataView:

getProfileKey: function() {
	var parentKey = this.callParent(arguments);
	return parentKey + "GridSettingsGridDataView";
}

Если просто заменить возвращаемое значение на ключ своего профиля, то потеряется профиль для базового представления. Поэтому необходимо добиться, чтобы при инициализации профиля в SchemaBuilderV2 свойство profile схемы содержало все необходимые профили (например, путём переопределения метода initSchemaProfile в SchemaBuilderV2).

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

Здравствуйте, примеров, к сожалению, в системе нет. Но вы можете попробовать пойти обходным путем. Создать схему раздела на основании базовой схемы, по аналогию с основным разделом.
Тогда в ней по умолчанию будут работать настройка колонок.
И, к примеру, заходя по ссылке:
…/0/Nui/ViewModule.aspx#SectionModuleV2/UsrContactSectionV2Type2

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

А заходя по ссылке:
…/0/Nui/ViewModule.aspx#SectionModuleV2/ContactSectionV2
Будет работать настройка колонок стандартной, собственно ContactSectionV2, и обрабатываться все будет ей.

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

Илья, ваш способ пробовал, есть тема с этим способом, но у него есть недостатки, он не походит.

Хотелось бы добить способом который предложил Олег.
Сейчас поведение такое: при переходе на новую вкладку информация не отображаеться, если зайти в настройку колонок и просто сохранить(в мастере уже добавлены текущие колонки т.е. профиль закладки сохраняется по своему ключу), данные появляются, при новой загрузке пропадают.

Подскажите? что такого происходит при открытии и сохранении настроек колонок. Возможно получиться это повторить.

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

Также интересует, как можно получить профиль по ключу аналогично его получению в SchemaBuilderV2, в разделе сделать это не получилось, возвращает undefined.

Еще один момент:
Путем переопределения SchemaBuilderV2 и подстановкой нужного ключа профиля:

initSchemaProfile: function(callback, config) {
	var profileKey = config.profileKey;
	if (profileKey == "UsrImplSectionGridSettingsGridDataView") {
		profileKey = "UsrImplSectionGridSettingsWarehouseDataView";
		config.profileKey = profileKey;
	}
	this.getProfile(profileKey, function(profile) {
		config.schemaResponse.profile = profile;
		callback(config);
	}, this);
},

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

Актуальный скрипт раздела в приложении.

Данный ключ генерируется в "SectionModuleV2" в методе getProfileKey :

getProfileKey: function() {
      var parentKey = this.callParent(arguments);
      return parentKey + "GridSettingsGridDataView";
},

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

getProfileKey: function() {
      return this.schemaName;
},

Илья, этот метод переопределен(также пробовал фиксированно задавать ключ нового представления), и с помощью точке останова установил что SchemaBuilderV2.initSchemaProfile вызывается раньше SectionModuleV2.getProfileKey

initSchemaProfile вызывается раньше именно потому что использует getProfileKey в своей работе. Я не совсем понимаю, почему не получается использовать getProfileKey, для получения ключа как предложил Илья
getProfileKey: function() {
var currentTabName = this.getActiveViewName();
var schemaName = this.name;
return schemaName + this.entitySchemaName + "GridSettings" + currentTabName;
}

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