Добрый день, уважаемые знатоки BPMOnline!

С "вопросом от чайника" очередным стучусь я за советом и помощью к вам.
Есть раздел Документы. В нем имеется несколько типов документов и куча деталей в менеджере деталей. Очень надо сделать так, чтобы для каждого типа документа отображались только определенные детали (или прятались определенные детали, неважно).
Нет ли какого хитрого штатного механизма для привязки набора деталей к типу документа, мне неизвестного?
И если нету (боюсь, это так) - как проще реализовать скрытие "лишних" деталей и показ "нужных"? Наверняка попадалась уже всем такая задачка...

Нравится

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

Александр, Вы хотите отображать определенный список деталей только в карточке или в реестре тоже?

Про карточку я пока боюсь спрашивать:smile: хотя бы в реестре

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

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

Набор деталей раздела формируется действием процесса InitializeDetails, которое вызывается в BaseModulePage. Соответственно, для изменения набора деталей следует перезагрузить всю страницу.

Так что в данном случае предложенное Ольгой решение оптимальное - добавить необходимые детали в карточку.

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

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

Мне внедренцы в ТЗ прописали именно детали в менеджере деталей, и в карточке заодно... поэтому с реестром что-то делать придется
Начну с деталей в карточке...

"Alimova Anna" написал:Для этого следует в настройках рабочих мест снять галочку наследования деталей карточки из деталей раздела, и сформировать отдельный список.

Нашел эту настройку, попробую, спасибо!

"D.T." написал:Вот мне кажется, что нелогично отображать ограниченное кол-во деталей в карточке редактирования, и не делать этого же в реестре. Ведь, очень часто если нужно отредактировать только содержимое детали, карточку даже не открывают.

На данном этапе скрывать детали - очень трудоемкая задача. Мы обязательно учтем пожелание на будущее.

Возможно кто-то уже решал подобную задачу... в продолжение темы о скрытии деталей.
Есть реестр в детали "Продукты". Пусть деталь и соответственно реестр "Продукты в документе" будет одинаков для всех типов документа. Но! Хотелось бы выводить для разных типов документа (выбираем документ в реестре раздела) разную карточку записи "Продукта в документе" в детали!
Пробовал сделать так: создал (некрасиво с т.з. базы данных, да лишь бы работало) в объекте "Продукт в документе" поле "Тип документа" (заполняется автоматом при создании записи типом документа родителя) и через рабочие места для этой детали зарегистрировал разные карточки редактирования в зависимости от "типа документа". Работает так - первый раз при обращении к детали после запуска системы показывает правильную карточку, а потом после смены документа в реестре уже не показывает другую карточку, использует всегда ту, что первый раз попалась... не хватает где-то какой-то "инициализации", но в скриптах базового реестра с непривычки "сломал мозг" и так и не смог добиться смены карточки редактирования... :cry:
Рад буду любым идеям

Здравствуйте, Александр!

Пример реализации подобной функциональности есть в реестре Активностей: в параметр editPageId подставляется идентфифкатор нужной страницы в зависимости от типа записи под курсором.

Пример кода:

			var ActivityTypeAndEditPageDictionary = new Dictionary<string,string>() {
	{"fbe0acdc-cfc0-df11-b00f-001d60e938c6", "f2bf397b-8fa3-48ba-b691-57360871967a"},
	{"e1831dec-cfc0-df11-b00f-001d60e938c6", "a2036c88-ca04-4744-967b-5b8a46612d83"},
	{"e2831dec-cfc0-df11-b00f-001d60e938c6", "dcdda065-321b-4560-aacb-05f6cc72cd80"}
};
 
var selectedActivitiesTypes = (Dictionary<string, object>)(OpenActivityTypeLookupUserTask.GetSelectedValues(UserConnection));
var selectedActivityTypeId = string.Empty;
var activityEditPageId = string.Empty;
foreach (KeyValuePair<string, object> item in selectedActivitiesTypes) {
	selectedActivityTypeId = item.Key;
}
foreach (var item in ActivityTypeAndEditPageDictionary) {
	if (item.Key == selectedActivityTypeId) {
		activityEditPageId = item.Value;
		break;
	} 

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

Конкретно вот этот - из схемы CreateActivityProcessCloneForAccount

"Alimova Anna" написал:

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

Набор деталей раздела формируется действием процесса InitializeDetails, которое вызывается в BaseModulePage. Соответственно, для изменения набора деталей следует перезагрузить всю страницу.


Может быть есть более-менее простой способ если не скрывать детали, то хотя бы делать их неактивными/недоступными для редактирования?

Добрый день.

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

Анна, а можно немного подробнее?
Идея ясна, но как сделать не очень понятно. Причем делать это нужно будет дважды, насколько я понимаю, - для открытой карточки и для выделенной записи в реестре.

Примеры динамической генерации объектов страницы можно например, например, в продукте Realty - Там создаются вкладки в карточке в зависимости от типа.

Пример инициализации детали есть в юзертаске InitializeDetails.

Что касается вопроса, в какой момент выполнять скрытие, рекомендую посмотреть пример подписки на разные окна редактирования в реестре активностей для Единого окна

Считаю, что скрывать детали в зависимости от выбранной записи в реестре раздела неверно, т.к. создает неудобство для пользователя.
Я выбрал деталь D в разделе для записи с типом T1, перехожу на запись с типом T2 - деталь D скрывается и активной становится деталь "Включено в группы" (?). Затем перехожу на запись с типом Т1 - остается деталь "Включено в группы" (ибо система не помнит про то, что я когда-то раньше выбирал деталь D). В итоге мне снова придется находить и делать активной деталь D. Мне бы так работать было бы неудобно.
Что можно сделать - это управлять активностью/видимостью панели с кнопками детали. Для этого существует базовый метод BaseGridPage - ActivateButtons, который можно переопределить для нужной детали (анализировать параметры записи раздела и скрывать элемент управления панели кнопок).

"Репко Артём" написал:Мне бы так работать было бы неудобно.

Мне тоже:smile:
Полностью поддерживаю насчет скрытия кнопок...
Главное, чтобы авторы технических заданий также прониклись этой идеологией и не предлагали прятать детали:smile:

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