Добрый день, уважаемые знатоки BPMOnline!
С "вопросом от чайника" очередным стучусь я за советом и помощью к вам.
Есть раздел Документы. В нем имеется несколько типов документов и куча деталей в менеджере деталей. Очень надо сделать так, чтобы для каждого типа документа отображались только определенные детали (или прятались определенные детали, неважно).
Нет ли какого хитрого штатного механизма для привязки набора деталей к типу документа, мне неизвестного?
И если нету (боюсь, это так) - как проще реализовать скрытие "лишних" деталей и показ "нужных"? Наверняка попадалась уже всем такая задачка...
Нравится
Александр, Вы хотите отображать определенный список деталей только в карточке или в реестре тоже?
Про карточку я пока боюсь спрашивать: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: