В своих докладах я делился прекрасной функцией autonumber, которая сама нумерует шаги, сколько их не добавляй. Однако коллега в сообществе столкнулся с интересной потребностью: динамически высчитывать номер шага под конкретный интересующий его вызов.
🦶 Порассуждаем на примере. Допустим, у меня описана сложная и многокомпонентная интеграция, детали вызовов постоянно уточняются, добавляются новые шаги, какие-то упраздняются. Т.е. порядковый номер для конкретного интересующего нас вызова из A в B будет постоянно "скакать". Как же быть, если мы хотим далее ссылаться на тот самый вызов? Руками прописывать в ссылке номер шага? Тогда придётся постоянно следить, чтобы при обновлении диаграммы он был актуальным. Велика вероятность ошибки. Т.о. осознаём, что нам нужно динамически понимать, какой же номер сам plantUML присваивает важному вызову. Здесь я нашёл 3 способа:
1️⃣ Простой. Сохранять автономер в переменную
!$autonum = "%autonumber%"И добавлять такую метку в каждый интересующий нас вызов (создаём аналог якоря в Confluence).
Ограничение в том, что тип параметра
autonum останется string, и никаким %intval это не сконвертировать в int. Т.е. записывать значение в итератор не получится. Каждая операция i++ будет вызывать конкатенацию строк, а не сложение.2️⃣ Явный. Создать функцию инкремента, чтобы итератор был целочисленным
!function $step($a)В таком случае придётся вызывать её после каждого вызова, чтобы увеличивать самописный счётчик шагов. Можно делать это и без функции, напрямую:
!return $a + 1
!endfunction
!$i = $i + 13️⃣ Изящный. Создать и вызывать процедуру, которая номер шага и увеличит, и вернёт его значение
Тогда не придётся повторять инкремент в коде после каждого вызова:
!procedure $stepper($a)
$step($a)
!global $i = $i+1
!endprocedure
Полный код и диаграмма в посте ниже. Я был удивлён, что на форуме планта никто явно такие решения не предлагал, хотя вопрос возникал не раз. Если знаете ещё более наглядный или изящный способ — делитесь в комментариях.#лайфхаки | Analyst Boost