Про переход от записи к связанным записям

В процессе эксплуатации BPM я понял, что если у меня есть реестр в детали или основной реестр в разделе, то перейти к "связанным" записям (например Договор - поле "Контрагент", "Контакт", и так далее) можно через контекстное меню "Перейти к..." только если в реестре отображается колонка с соответствующим полем.
А если полей-справочников много, все колонки мне видеть совершенно ни к чему, но переход к этим записям все же нужен? Понятно, что можно сделать свое контекстное меню с нужными пунктами:smile:
Но наверняка есть некий простой способ добиться отображения всех "связанных" объектов в штатном меню независимо от настроек реестра?

И сразу же второй вопрос - а от какого параметра/хитрого скрипта зависит то, что из детали раздела можно перейти к соответствующей записи в разделе? Скажем из детали "Продукты" в "Документах" перейти в раздел "Продукты"? Нет ведь такой возможности по-умолчанию.

Нравится

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

Здравствуйте, Александр!
Формирования списка меню "Перейти к" формируется в mainPage в обработчике события "PageLoadComplete", а если конкретнее, то начиная с 159 строки:

var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, "SysModule");
entitySchemaQuery.Cache = UserConnection.SessionCache.WithLocalCaching(TSConfiguration.CacheUtilities.WorkspaceCacheGroup);
EntitySchemaQueryColumn entitySchemaColumn = entitySchemaQuery.AddColumn("SysModuleEntity.SysEntitySchema");			
EntitySchemaQueryColumn pageSchemaColumn = entitySchemaQuery.AddColumn("SysPageSchema");
entitySchemaQuery.Filters.Add(entitySchemaQuery.CreateIsNotNullFilter("[SysModuleInSysModuleFolder:SysModule].Id"));
entitySchemaQuery.CacheItemName = "window.modules";
EntityCollection modulesCollection = entitySchemaQuery.GetEntityCollection(Page.UserConnection);
var modules = new Dictionary();
foreach(var module in modulesCollection) {
	var pageSchemaId = entitySchemaQuery.GetTypedColumnValue(module, pageSchemaColumn.Name);
	var schemaId = entitySchemaQuery.GetTypedColumnValue(module, entitySchemaColumn.Name);
	string key = "'"+schemaId.ToString()+"'";
	if ((pageSchemaId != Guid.Empty) && (schemaId != Guid.Empty) && (!modules.ContainsKey(key))) {
		modules.Add(key, pageSchemaId);
	}
}

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

Андрей, посмотрел данный код... результатом его является просто список некоторых реквизитов ВСЕХ модулей системы. Не вижу формирования элемента контекстного меню. Нет назначения элементу меню обработчика.
Формирование меню где-то глубже...

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

"Андрей Каспаревич" написал:
После консультации в отделе разработки сказали, что заполнение этого меню происходит в ядре и конфигурационно не получится добавить или удалить из него пункты.

Андрей, а можно ли уточнить принципы формирования - они совершенно не понятны. Примеры я привел - деталь Продукты в Документах, нет перехода к продукту (1). В реестре есть переход только к тем объектам, соответствующие которым колонки вынесены в реестр (2). Но, несмотря на (2), в детали продукты поле Продукт (справочник!) в реестр вынесено и перехода по-прежнему нет...
Можно сформулировать это как пожелание - чтобы в реестрах был всегда переход ко всем связанным объектам (как это всегда работало в продуктах линейки 3.х)
Переход из дочерней детали (пример 1) в раздел, допускаю что сделать сложнее, но опять же выскажу это пожелание...

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

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