Сейчас мы создадим в BPMonline 5.X поле справочника со множественным выбором. В отличие от обычного справочника, в нём можно выбрать как одно, так и несколько значений. Технически это реализуется как скрытая деталь для связи «многие ко многим».
Так выглядит поле с выбранными вариантами на карточке:
А так — окно выбора вариантов. Сверху — возможные, снизу — выбранные:
Выбор вариантов осуществляется кнопками со стрелочками между верхним и нижним реестрами.
Для поддержки множественного выбора была разработана библиотека MultiSelectLookupUtilities.md, её нужно загрузить в конфигурацию и опубликовать.
Далее мы рассмотрим пример. На карточке контакта нужно разместить поле множественного выбора из справочника «Виды недвижимости» (FacilitySubtype).
Создаём на странице поле справочника FacilitySubtypesEdit с такими свойствами:
Обратите внимание на заполненные и пустые свойства, помеченные красным.
Затем создаём обработчики событий в бизнес-процессе карточки. Все эти обработчики после базовых:
Для хранения результатов выбора в БД должна быть создана схема-объект вроде FacilitySubtypeInContact с двумя полями-справочниками. В нашем случае это Contact и FacilitySubtype. Оба поля с галкой «каскадная связь». Первый справочник — раздел, в который добавляется поле. Второй — справочник, из которого будут выбираться значения. Он должен быть уже создан.
Используя инструкцию, не забудьте заменить в вызовах функций параметры на свои: название объекта-развязки, объекта-справочника, объекта-раздела и поля ввода на карточке.
Спасибо, что сообщили о проблеме.
Да, похоже в 5.2 этого поля в классе ещё нет.
Вы можете избавиться от функции MultiSelectLookupPrepare. Без неё всё будет работать, но при открытии окна выбора в нём список выбранных значений снизу будет пустым, а не браться с карточки. Если это не устроит, нужно будет искать другой механизм передачи параметров в окно выбора.
Вы хотите перенести в 5.2 схемы из конфигурации 5.4?
Не уверен, что такое возможно без обновления ядра. Там используется свойство ParametersValue контрола «поле справочника», которое в 5.2 ещё не появилось.
Илья, реализация данного функционала в том виде, в котором он здесь предоставлен потребует внесения изменений в ядро версии 5.2. Так как развитие версии 5.2 прекращено, данная доработка ядра произведена не будет.
в принципе забил много костылей.
Общая идея - открывать справочник через действие процесса, в действии формировать передавать список SelectedValues (которые передаются в дейтвии) в LookUpGrid
и в окне справочника на PageLoadComplete заполнять SelectedDataSource значениями полученными из действия.
Спасибо за статью, полезно.
Возник один вопрос: при открытии справочника для выбора неск. значений, предыдущие выбранные значения не отображаются (т.е. ранее сохраненные напр).
Можете подсказать "куда капать"?
"Илья Т." написал:Добрый день.
Может ктонибудь реализовал передачу выделенных значений в множественный справочник? Уже бьюсь неделю и ничего не выходит.
BPMOnline Версия 5.2.0.658
Оказалось, что мой вопрос уже был.. Тоже бьюсь с этой проблемой.
Видимо придется тоже свою кнопку добавлять
В таком случае должно работать нормально. У Ильи ошибка проявляется в 5.2.
За отображение ранее выбранных значений в справочнике отвечает функция MultiSelectLookupPrepare на событии Init. Она у вас вызывается?
Антон, для предоставления решения потребуется бэкап Вашей БД, либо выгруженные метаданные используемых схем.
Просьба обратиться в тех. поддержку с данным вопросом и предоставить бэкап, либо метаданные.
Спасибо!
У меня версия 5.4. хочу в INIT процесса страницы редактиврования Инцидента включить : Terrasoft.Configuration.MultiSelectLookupUtilities.MultiSelectLookupPrepare(Page.AdresatiEdit);
при этом при опубликовании у меня возникает ошибка, MultiSelectLookupUtilities в конфигурации не найдена. Ранее здесь писали, что в версии 5.4 эта библиотека должна уже быть. Как мне ее загрузить ?
Сделала все как описано, но при выборе нескольких значений в поле на странице и в таблицу ничего не пишется (окно выбора у меня выглядит как во вложении lookupgridpage.png).
Если выбирать двойным щелчком в верхнем реестре, то в поле выбора и в базу сохраняется одна запись. Но даже в этом случае при повторном открытии страницы выбора в реестре выбранных записей пусто (lookupGridPage2.png)
Здравствуйте.
Добавила множественное поле на карточке, сделала все вышеописанные шаги.
В итоге: при повторном сохранении карточки выходит ошибка, что поле не заполнено(хотя оно заполнено и выбранные значения перечислены через ; ). Кликаю на это поле, ничего не меняю, сохраняю карточку, карточка сохраняется, ошибки уже нет. Как устранить такое поведение? Знаю, что при разработке проекта, разработчики с таким сталкивались тоже и как-то исправляли.
Антонина, возможно раньше это поле на карточке было обычным полем единичного выбора и в объекте осталось такое же поле, причём обязательное? А на карточке случайно не забыли очистить связь контрола с полем объекта (надо как на рис. 2)?
Да, это поле ранее было единичным и оно есть в объекте, но в поле обязательность заполнения стоит значение нет. На карточке тоже стоит так, как указана на представленном скрине.
у кого не работает, обратите внимание, что в статье опечатка, в имени события пропущена буква "p". PageLoadComlete -> PageLoadComplete
и прикладываю очень полезный файл по описанию событий.
Есть опыт создания поля множественного выбора в версии 7.4, кому интересно - пишите
(исправлены ошибки в MultiSelectLookupUtilities + нужно заместить LookupGridPage)
Попытка использовать LookupGripPage из комментария #37 неудачна - в версии отсутствует параметр TreeGridDblClickDisabled и при компиляции зависимые объекты дают ошибки (8 штук)
Нужна более поздняя по времени версия, в которой уже есть данная функциональность
Добрый день! Стоит задача заполнения детали Города для раздела Контрагенты. Хочется сделать это с использованием окна множественного выбора wnd_MultiSelectData. Подскажите, пожалуйста, как это можно сделать, куда копать?