Новое рабочее место на базе существующего раздела. Как сделать кастом колонки в реестре

Добрый день
Есть задача на основе существующего объекта "договоры" сделать новое рабочее место с разделом, где колонки будут другие в реестре по умолчанию.

Я как понял такая связь:
Рабочее место-Раздел-Реестр

Моя идея динамически подменять в разделе страницу реестра в зависимости от параметра.
Сейчас в private метода UpdateGrid есть:
Grid.PageSchemaUId = new Guid("dbb0c287-e452-4d51-99c1-6cd55f1fe1a8");
Хочу PageSchemaUId динамически ставить.

На какое событие лучше всего это делать?
Или есть проще варианты?

Нравится

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

Здравствуйте, Антон!
Подменять страницу реестра нужно в обработчике события "Init". Как вариант, можно создать новую страницу раздела, унаследовав ее от базовой страницы раздела договоров, в ней поменять страницу реестра на свою, и при регистрации раздела в рабочем месте уже использовать свою страницу раздела.

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

Антон, посмотрите "ScriptFindSelectedModuleSubProcess" в странице "MainPage". Там есть получение вкладки рабочего места:

var entitySchemaManager = Page.Schema.SchemaManagerProvider.GetManager("EntitySchemaManager") as Terrasoft.Core.Entities.EntitySchemaManager;
var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, "SysModule");
EntitySchemaQueryColumn pageColumn = entitySchemaQuery.AddColumn("SysPageSchema.Id");
entitySchemaQuery.Filters.Add(entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", SelectedModuleId.ToString()));
var modulesCollection =	entitySchemaQuery.GetEntityCollection(userConnection);
if (modulesCollection.Count > 0)
{
	var selectedPageSchemaId = modulesCollection[0].GetColumnValue(pageColumn.Name);
	var workspaceId = Page.MultiLevelTabs.ActiveTab.Tag.Split('|')[0];
....

Думаю, это должно подойти.

Спасибо, разобрался.
Еще один вопрос:
Пытаюсь настроить колонки в дизайнере у реестра DataSource, но в нем не отображаются подчиненные объекты, а мне нужна колонка из него.
При этом, когда делаю настройку реестра через настроить колонки, там они есть.
Как то можно отобразить подчиненные объекты в дизайнере у DataSource ? Или как можно добавить в DataSource колонку из подчиненного объекта?

Антон,
1:

2:

"Андрей Каспаревич" написал:

Антон,

1:

2:

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки


Это понятно, я не об этом)
У datasource нет выбора колонок подчиненных объектов (напр Мониторинг).

Елси я правильно понял посыл Ваших скриншотов, то Мониторинг - это колонка обратной связи, поэтому ее нельзя вытащить в реестр. Как Вы себе представляете должен выглядеть реестр, если для одной записи главного объекта будет 1000 записей связанного?

"Андрей Каспаревич" написал:

Елси я правильно понял посыл Ваших скриншотов, то Мониторинг - это колонка обратной связи, поэтому ее нельзя вытащить в реестр. Как Вы себе представляете должен выглядеть реестр, если для одной записи главного объекта будет 1000 записей связанного?

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки


Я предполагал поведение, как если настраивать не через дизайнер колонки, т.е. идет агрегация данных(max, min, avg и т.п.).

Антон, такого поведения не предусмотрено базовой логикой для источника данных страницы.
Если Вам нужно эти данные использовать в коде, то их можно легко получить с помощью EntitySchemaQuery, например, или класса Select.

"Андрей Каспаревич" написал:

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

Если Вам нужно эти данные использовать в коде, то их можно легко получить с помощью EntitySchemaQuery, например, или класса Select.

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки

А можете подсказать пример реестра в базовой конфигурации где DataSource определялся на основе EntitySchemaQuery?

Антон, источник данных не определяется на основе EntitySchemaQuery. С помощью EntitySchemaQuery Вы можете считать данные из БД. Зачем они Вам непосредственно в источнике данных?

Я думал у DataSource страницы на основе базовой страницы реестра как то можно привязать к EntitySchemaQuery.
Ок не будем углубляться) Сейчас я нашел решение на базе объектов-представлений и их уже к DataSource цепляю.

Спасибо.

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