Что такое FEEL?
Friendly Enough Expression Language — FEEL. Основная концепция этого языка заключается в том, чтобы создавать простые и понятные выражения как для представителей бизнеса, так и для разработчиков. Camunda 8 FEEL можно применять не только в DMN для создания выражений, но и для изменения входных и выходных данных в BPMN схемах. Начиная с версии 8.2, появилась возможность использовать скриптовые задачи (script tasks) с интерпретацией FEEL. В Camunda 7 для использования script task нужно было добавлять отдельные engine.
Входные/выходные данные в BPMN
При вводе выражения в редакторе схем необходимо убедиться, что кнопка «fx» включена. Если она отключена, то вместо вычисленного значения будет отображаться само выражение в виде строки. На представленном ниже скриншоте показан пример использования FEEL для вставки значения PHOTO_URL
из конфигурации, полученной ранее из DMN‑таблицы, чтобы отправить запрос по соответствующему адресу.
Чтобы обработать результат, а не хранить весь ответ в контексте процесса, в раздел output выделим только то, что нам нужно.
SCRIPT TASK
Далее может понадобиться отфильтровать результаты. Например, если мы хотим оставить только те результаты чекера, которые относятся к данному процессу. Без использования FEEL нам потребовалась бы отдельная сервисная задача.
for result in description_results[
item.model in split(conf.AVAILABLE_PHOTO_CHECKERS, ",")
] return {
"model": result.model,
"colour": result.colour,
}
DMN Decision Table
В Camunda «Unary‑tests» означает булевы выражения, где каждая строка содержит набор условий и соответствующий им результат. И тут получается довольно гибкий инструмент для принятия решений, потому что мы можем создать довольно гибкие выражения. По сути, любые операция с числами и строками нам доступны из коробки. Например есть набор данных и в качестве условий мы можем рассчитать среднее значение из набора, медиану, сумму, определить минимальное и максимальное значение.
Таблица решений (Decision Table) содержит настройку Hit Policy, которая позволяет изменять поведение при обработке результатов. Мы можем получать как одиночный результат, например, определять, является ли день будним или выходным, так и множественный, когда, скажем, нужно получить список ролей, которым разрешено редактирование определённого объекта исходя из его типа.
DMN Litteral Expression
Чтобы упростить формирование таблицы, можно добавлять новые переменные в контекст внутри DMN-схемы. Значение таких ключей можно задавать с помощью FEEL-выражений.
Производительность
FEEL исполняется на серверной стороне Camunda. В наших тестах, при выполнении простой операции умножения A * B мы достигаем производительности около 3000 RPS (за одну единицу считаем запуск схемы и получение из неё результата) на 10 узлах Zeebe. Этот показатель близок к максимальному значению, которое можно получить при использовании схемы, состоящей лишь из стартового и конечного событий. Исходя из этого, можно заключить, что интерпретация выражений FEEL происходит довольно быстро.
Выводы
FEEL является важным инструментом в арсенале разработчика, работающего с платформой Camunda. Его простота и интуитивность делают его доступным как для представителей бизнеса, так и для программистов. Возможность использования FEEL не только в DMN‑таблицах, но и в BPMN‑схемах, включая скриптовые задачи, открывает широкие перспективы для оптимизации и ускорения разработки процессов.