Хочу рассказать о Low Code Platform, которой пришлось воспользоваться буквально на днях – Power Automate от Microsoft. Мне, как разработчику ПО, никогда не нравились подобные системы для “программирования мышкой”. Казалось, что с их помощью сложно добиться хоть сколько-нибудь приемлемого результата.
Причин несколько:
- бесишься из-за неудобности и глючности “интефрейса” – хочется бросить и переключиться в любимый текстовый редактор и написать там “пару строчек кода” вместо накликивания условий и выбора элементов из списка
- сетуешь на ограничения платформы, из-за невозможности смоделировать простейшие операции: нельзя “обновить” значение переменной используя текущее значение, такая вот борьба с рекурсией
- удивляешься тому как тебе придется поддреживать настроенный “бизнес процесс” – буквально смотря на его блок-схему, отвыкли от такого программисты еще со школьных времен.
Прорвавшись через начальную пелену отрицания, удалось посмотреть на все с другой стороны – постойте-ка, это же Low Code Platform – она и не предназначена для использования программистами… Все вдруг становится на свои места, если представить себя бизнес-аналитиком или менеджером. Суть алгоритмов отраженных в визуализированном виде – проста и понятна, знаний программирования для моделирования бизнес процессов не требуется, везде подсказки и автодополнение – красота!
Рассмотрим три случая использования – один без кода совсем, два остальных – с небольшим его количеством.
Автоматизация создания проектных карт
Решение “без кода” автоматизирует процесс сбора данных для создания новой проектной карты. Для этого в Microsoft Forms создан опросник, подобный тому что используется в ежегодном корпоративном опросе. Power Automate реагирует на заполнение формы и запускает первый сценарий, в процессе которого из полей формы формируется письмо. Power Automate услужливо подсказывает, что есть переменные “Responders’ email” (так как в форме мы указали, что заполнять ее могут тоьлко сотрудники организации), позволяет накликивать другие поля из формы (причем редактирование полей в форме не ломает сценарий – на самом деле используются GUID-ы). Если сильно хочется – можно и выраженьице составить несложное – с таким справится человек и без навыков программирования.
Следующий сценарий реагирует на отосланное письмо и создает задачи со встречами. Решение не концентрировать все шаги в одном сценарии осознанное - хочется, чтобы бизнес процесс мог начаться не только с заполнения формы, но и с получения письма от живого человека. Людям без навыков программирования обязательно понравятся возможности отладки – на каждом шаге видно данные на входе и выходе, время работы и даже циклы удобно пролистывать.
Обновление размеров проектов
Второе и третье использование Power Automate тоже касается проектных карт.
В ходе работы CTO/PMO Office, мы мониторим состояние проектов. Хочется концентрировать больше внимания на стартующих, ранжируя проекты на основании даты старта и количества трудозатрат. Существует табличка в Office 365, где мы ведем список дел, строим планы и т.д. В ней отмечено количество трудозатрат по данным проектной карты. Но время-то идет, проекты растут и развиваются, каждый раз сверяться с данными из JIRA – устанет рука. Мы создали Power Automate flow, который может реагировать на получение HTTP запроса извне. Сам endpoint создается автоматически, вам остается задать json schema входящих данных и настроить их использование. На скриншоте видно, что на входе – список названий проектов с их трудозатратами, которые используются для обновления строк таблицы. Endpoint есть, дело за малым – настроить еще один flow, запускающийся по расписанию (можно стартовать и вручную), который собирает все названия проектов из Excel таблицы и дергает простенький микросервис на kotlin.
(env[TOTAL_EFFORTS_FIELD]).associateBy { it.summary }.let { mapping ->
projectCards(ClientCIO) { install(JsonFeature) }
HttpClient.post<Any>(env[CALLBACK_URL]) {
= call.receive<Array<Summary>>()
body .sortedBy { it.summary }.mapNotNull { project ->
[project.summary]?.getField(env[TOTAL_EFFORTS_FIELD])?.value?.let { efforts ->
mapping(project.summary, (efforts as Double / 168).roundTo(2))
Effort}
}
}
}
Таким образом, каждый день в Excel файле будут свежие данные о “размере” проекта.
Работа с качеством данных в проектных картах
В проектных картах сменился формат поля Customer region. Теперь оно с автодополнением, стандартизированного формата. Но всего не предусмотришь, кто-то может и адрес в него вписать. Как же блюсти качество данных, реагировать чтоли на почтовые нотификации об изменении значения этого поля от джиры?.. Решением стал скрипт автоматизации в Excel 365, который “ходит” за данными, добавляет их в таблицу, строит Pivot table и даже добавляет Pie chart. Даже тут Microsoft делает все возможное для того, чтобы такой автоматизацией могли пользоваться не только программисты – крутой intelli-sense, возможность записи макросов и просмотр получившегося кода, консоль отладки. За данными скрипт ходит в небольшой микросервис на kotlin.
(env[CUSTOMER_REGION_FIELD]).let { cards ->
projectCardsval regions = cards.mapNotNull { it.getField(env[CUSTOMER_REGION_FIELD])?.value?.toString() }
val map = regions.groupingBy { it }.eachCount()
val size = regions.maxOf { it.split(", ").size }
.respond(Statistics(size, regions.distinct().map { region ->
call(region.split(", ").plus(generateSequence { "" }.take(10)).take(size), map.getValue(region))
Region}))
}
Да, решение “наколеночное”, масшабировать его будет затруднительно. Однако прелесть в том, что для быстрой автоматизации для “проверки идеи” Power BI не нужен, достаточно и такого “наколенника”.
Выводы
Смело могу советовать Power Automate как средство для автоматизации мелких процессов как внутри проекта, так и на уровне компании. Vendor-lock максимальный, но мы же не программную систему на нем строим, а только решаем мелкие прикладные задачи. Возможности всей Power Platform сильно шире скриншотов из этой заметки. Вот классная статья на эту тему.