Вынос параметров
Last updated
Last updated
Выносите статичные параметры сценариев автоматизации за их пределы.
Паттерн вынос параметров обязывает выносить все или часть статичных параметров сценария в отдельные записи внутри системы.
Статичными параметрами могут быть любые переменные сценария, которые на данный момент однозначно определены, но потенциально могут измениться в будущем.
В случае вынесения таких параметров в интерфейс системы не будет необходимости перенастраивать сценарий в случае их изменения: нужно будет изменить значение поля, которое отвечает за конкретный параметр.
Также вынесение параметров в интерфейс системы позволяет автоматически актуализировать их, если параметры имеют свойство “устаревать”. Например, это относится к токенам доступа сторонних сервисов с ограниченным сроком жизни.
В качестве примера рассмотрим настроенный каталог “Организации”, в записях которого фиксируется ИНН и другой перечень полей для заполнения.
В своей работе сотрудники не заполняют все поля вручную. Вручную заполняется только ИНН, а остальная информация подставляется автоматически при нажатии на соответствующую кнопку (пример такой автоматизации описан в статье Автозаполнение данных по ИНН).
При нажатии на кнопку отправляется запрос сервису, который возвращает все необходимые данные по введенному ИНН. В качестве данных отправляемого запроса сервис ожидает ИНН в теле сообщения и токен доступа, передаваемый в заголовке запроса.
Спустя некоторое время сотрудники пытаются получить данные по очередной организации, но что-то идет не так:
Отображается системная ошибка выполнения сценария типа “Изменено поле во время редактирования”. В контексте рассматриваемого примера такое может произойти, если авторизационный токен сервиса стал недействительным.
Теперь рассмотрим сценарий, который производит получение данных по организации. Видим, что в компоненте “Назначение переменных” есть переменная “token” с фиксированным значением:
Следствием подобной реализации могут быть следующие проблемы:
Корректировка сценария при изменении фиксированных значений
Невозможность автоматической актуализации
Рассмотрим проблему корректировок сценария на реализации, описанной выше.
Ряд сторонних сервисов выдает токен с ограниченным сроком жизни - то есть токен действует только определенное время. После окончания срока жизни токена его необходимо обновить - выпустить новый.
В примере выше, если у токена есть ограниченный срок жизни, то после его истечения сценарий просто перестанет работать. Нужно будет редактировать сценарий и в нужном компоненте заменять строку с токеном.
Как правило задача редактирования сценариев перекладывается на разработчика системы: каждый раз ему необходимо корректировать сценарий(а в некоторых случаях даже несколько сценариев), так как остальные сотрудники системы могут не иметь доступа к его редактированию или могут быть не обучены этому.
При этом сам процесс с поиском сценария, нужного компонента и тестирования занимает некоторое время.
Суть проблемы именно в необходимости ручной замены данных внутри сценария. В качестве данных может выступать как токен, так и любые другие фиксированные параметры, которые могут измениться в будущем.
Из-за того, что в реализации выше токен по сути “зашит” в сам сценарий, его невозможно автоматически актуализировать. Это некоторое статичное значение, изменить которое может только сотрудник.
Задача с автоматической актуализацией в такой реализации становится невозможной. При истечении срока жизни текущего токена разработчику системы в любом случае придется вручную перевыпускать его и редактировать сценарий.
Решить обе проблемы можно используя паттерн выноса параметров.
Для примера выше необходимо добавить новый каталог “Токены” с перечнем полей, содержащим сам токен и данные, необходимые для его обновления:
В созданный каталог нужно добавить запись с актуальным на данный момент токеном и данными, необходимыми для его актуализации:
Далее в сценарии для заполнения данных по ИНН нужно добавить компонент “Получить запись” и вместо “зашитого” в сценарий токена использовать значение из поле “Токен” созданной в каталоге записи.
Таким образом для замены токена в дальнейшем не будет необходимости редактировать сценарий. Если токен устареет, то достаточно перейти в запись, где он хранится и заменить строку на другую. В этом случае процесс замены токена можно не перекладывать на разработчика системы: заменить токен сможет любой сотрудник, работающий в ней.
В такой реализации также становится возможным решить проблему с автоматическим обновлением токена. В системе может быть настроен сценарий, запускаемый по механизму “Планировщика задач”, который будет получать данные для обновления токена из его записи и самостоятельно выпускать новый. Выпущенный токен сценарий самостоятельно запишет в поле “Токен”, заменив устаревшее значение.
В этом случае в момент получения данных по ИНН токен сервиса всегда будет актуальным, а возникновение ошибок по недействительному токену станет невозможным.