В процессе эксплуатации BPM я понял, что если у меня есть реестр в детали или основной реестр в разделе, то перейти к "связанным" записям (например Договор - поле "Контрагент", "Контакт", и так далее) можно через контекстное меню "Перейти к..." только если в реестре отображается колонка с соответствующим полем.
А если полей-справочников много, все колонки мне видеть совершенно ни к чему, но переход к этим записям все же нужен? Понятно, что можно сделать свое контекстное меню с нужными пунктами
Но наверняка есть некий простой способ добиться отображения всех "связанных" объектов в штатном меню независимо от настроек реестра?
И сразу же второй вопрос - а от какого параметра/хитрого скрипта зависит то, что из детали раздела можно перейти к соответствующей записи в разделе? Скажем из детали "Продукты" в "Документах" перейти в раздел "Продукты"? Нет ведь такой возможности по-умолчанию.
Нравится
Здравствуйте, Александр!
Формирования списка меню "Перейти к" формируется в 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<string, Guid>(); foreach(var module in modulesCollection) { var pageSchemaId = entitySchemaQuery.GetTypedColumnValue<Guid>(module, pageSchemaColumn.Name); var schemaId = entitySchemaQuery.GetTypedColumnValue<Guid>(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) в раздел, допускаю что сделать сложнее, но опять же выскажу это пожелание...
Александр, действительно в данный момент переход формируется только для справочных полей, которые отображены в реестре.
Спасибо за обращение, я направлю Ваши пожелания в отдел разработки.