Вынос параметров

Описание

Выносите статичные параметры сценариев автоматизации за их пределы.

Паттерн вынос параметров обязывает выносить все или часть статичных параметров сценария в отдельные записи внутри системы.

Статичными параметрами могут быть любые переменные сценария, которые на данный момент однозначно определены, но потенциально могут измениться в будущем.

В случае вынесения таких параметров в интерфейс системы не будет необходимости перенастраивать сценарий в случае их изменения: нужно будет изменить значение поля, которое отвечает за конкретный параметр.

Также вынесение параметров в интерфейс системы позволяет автоматически актуализировать их, если параметры имеют свойство “устаревать”. Например, это относится к токенам доступа сторонних сервисов с ограниченным сроком жизни.

Вместо указания переменных в сценариях
Выносите их в интерфейс системы

Проблематика

В качестве примера рассмотрим настроенный каталог “Организации”, в записях которого фиксируется ИНН и другой перечень полей для заполнения.

В своей работе сотрудники не заполняют все поля вручную. Вручную заполняется только ИНН, а остальная информация подставляется автоматически при нажатии на соответствующую кнопку (пример такой автоматизации описан в статье Автозаполнение данных по ИНН).

При нажатии на кнопку отправляется запрос сервису, который возвращает все необходимые данные по введенному ИНН. В качестве данных отправляемого запроса сервис ожидает ИНН в теле сообщения и токен доступа, передаваемый в заголовке запроса.

Спустя некоторое время сотрудники пытаются получить данные по очередной организации, но что-то идет не так:

Отображается системная ошибка выполнения сценария типа “Изменено поле во время редактирования”. В контексте рассматриваемого примера такое может произойти, если авторизационный токен сервиса стал недействительным.

Теперь рассмотрим сценарий, который производит получение данных по организации. Видим, что в компоненте “Назначение переменных” есть переменная “token” с фиксированным значением:

Следствием подобной реализации могут быть следующие проблемы:

  • Корректировка сценария при изменении фиксированных значений

  • Невозможность автоматической актуализации

Корректировка сценария при изменении фиксированных значений

Рассмотрим проблему корректировок сценария на реализации, описанной выше.

Ряд сторонних сервисов выдает токен с ограниченным сроком жизни - то есть токен действует только определенное время. После окончания срока жизни токена его необходимо обновить - выпустить новый.

В примере выше, если у токена есть ограниченный срок жизни, то после его истечения сценарий просто перестанет работать. Нужно будет редактировать сценарий и в нужном компоненте заменять строку с токеном.

Как правило задача редактирования сценариев перекладывается на разработчика системы: каждый раз ему необходимо корректировать сценарий(а в некоторых случаях даже несколько сценариев), так как остальные сотрудники системы могут не иметь доступа к его редактированию или могут быть не обучены этому.

При этом сам процесс с поиском сценария, нужного компонента и тестирования занимает некоторое время.

Суть проблемы именно в необходимости ручной замены данных внутри сценария. В качестве данных может выступать как токен, так и любые другие фиксированные параметры, которые могут измениться в будущем.

Невозможность настройки автоматической актуализации

Из-за того, что в реализации выше токен по сути “зашит” в сам сценарий, его невозможно автоматически актуализировать. Это некоторое статичное значение, изменить которое может только сотрудник.

Задача с автоматической актуализацией в такой реализации становится невозможной. При истечении срока жизни текущего токена разработчику системы в любом случае придется вручную перевыпускать его и редактировать сценарий.

Применение паттерна

Решить обе проблемы можно используя паттерн выноса параметров.

Для примера выше необходимо добавить новый каталог “Токены” с перечнем полей, содержащим сам токен и данные, необходимые для его обновления:

В созданный каталог нужно добавить запись с актуальным на данный момент токеном и данными, необходимыми для его актуализации:

Далее в сценарии для заполнения данных по ИНН нужно добавить компонент “Получить запись” и вместо “зашитого” в сценарий токена использовать значение из поле “Токен” созданной в каталоге записи.

Таким образом для замены токена в дальнейшем не будет необходимости редактировать сценарий. Если токен устареет, то достаточно перейти в запись, где он хранится и заменить строку на другую. В этом случае процесс замены токена можно не перекладывать на разработчика системы: заменить токен сможет любой сотрудник, работающий в ней.

В такой реализации также становится возможным решить проблему с автоматическим обновлением токена. В системе может быть настроен сценарий, запускаемый по механизму “Планировщика задач”, который будет получать данные для обновления токена из его записи и самостоятельно выпускать новый. Выпущенный токен сценарий самостоятельно запишет в поле “Токен”, заменив устаревшее значение.

В этом случае в момент получения данных по ИНН токен сервиса всегда будет актуальным, а возникновение ошибок по недействительному токену станет невозможным.

Last updated