Всем привет!
Наши любимые флоу очень часто подкидывают преинтереснейшие задания, и сами по себе являются (и наверняка еще очень долго будут) одним из любимейших “out-of-the-box tool”-ов для заказчиков по ту сторону девелоперских баррикад. Но, как вы наверное уже знаете, незаменимый и полезный инструмент для введения новой информации, Screen Flow, начинает вести себя достаточно непредсказуемо в случае, если требованиями определено, что информация должна не столько добавляться, сколько, скорее, редактироваться. И в этом случае флоу могут подкинуть несколько не очень приятных (во всех отношениях) сюрпризов. Одним из таких сюрпризов является функциональность стандартного элемента “Picklist”, настраиваемые параметры которого мы видим на рисунке:
В полной уверенности, что стандартные компоненты уж должны бы поддерживать редактирование записей из коробки, мы можем попытаться использовать данный компонент в нашей реализации. И с удивлением обнаружить, что все, что нам доступно — это функция Default Value, которая сама по себе “хардкодного” типа, и мало чем полезна в ситуации “Отобразить значения пиклиста с текущим выбранным значением на сохраненной ранее записи”.
Какие у нас есть “workarounds”?
-
Убедить заказчика не использовать флоу там, где он решил уже это делать, и собрал 100-500 апрувов и подписей на 1000 митингов. (долго, иногда неприменимо).
-
Убедить заказчика воспользоваться Freeware пакетом компонентов для флоу и заинсталить его с Appexchange (на все сэндбоксы по продакшен включительно).
-
Выпилить собственный компонент с поддержкой Edit mode для пиклистов.
Поскольку в большинстве случаев первые два варианта мало применимы, попробуем сделать небольшой гайд для случая номер три (кастомизация под свои задачи приветствуется и является необходимой). Сделаем это на основе Aura components, — просто так исторически сложилось.
В качестве готового подспорья в наших изысканиях — дополнительно можем воспользоваться библотекой лайтнинга.
И попробуем достичь максимальной универсальности нашей поделки DIY для будущих целей:
Интерфейс lightning:availableForFlowScreens делает наш компонент видимым в контексте флоу билдера, но для того, чтобы компонент был настраиваемым — без design в нашем bundle не обойтись:
И конечно же контроллер:
Также, неотъемлемой частью данного решения должен быть Apex контроллер, обеспечивающий нас необходимой информацией о текущей метадате (описание что это за зверь такой - пиклист).
Собственно целевой метод:
Теперь все готово к полевым испытаниям. Для начала создадим переменную в нашем флоу, которую и будем подвергать редактированию:
Дальше добавим наш компонент Picklist на один из экранов нашего флоу и попробуем настроить вынесенные в design параметры:
Выбранное пользователем новое значение для пиклиста будет находиться в незаполненном поле, которое стоит использовать в элементах Assign перед апдейтом нашей записи, где-то так:
Элементы, в целом, могут следовать такому принципу (не настаиваю, это будет вашим решением):
В качестве возможных импрувментов (и фактически использованных идей) для дальнейшего апгрейда компонента, можно рассмотреть следующие:
-
поддержка фильтрации по рекорд-тайпам
-
поддержка events
-
возможность исключения определенных значений на уровне флоу билдера
-
поддержка стилей (если ваш флоу “вдруг” окажется где-нибудь на коммьюнити пейдж)
-
поддержка всего того, что “очень нужно” вашему заказчику
Stay calm and Have fun!