Разработка плагинов
storage
Интерфейс постоянного хранилища данных проекта: позволяет сохранить результаты работы плагина и прочитать их при следующих запусках (например, для истории показателей). Хранилище общее для всех плагинов проекта, поэтому ключи стоит делать уникальными, например "<ИмяПлагина>_<что храним>".
storage равен null внутри form() и в обработчиках событий бизнес-процессов. Каждый вызов выполняет запрос к серверу.- getAllKeys - получение всех ключей из Storage
- getProjectDataInfo - получение всех записей по ключу
- load - получение данных по идентификатору
- save - сохранение в Storage
Сведения о записи возвращаются объектом PluginStorageData с полями:
uuid- идентификатор записи (передаётся в load);dataKey- ключ;projectUuid- идентификатор проекта;createDate- дата создания (Instant);buildHash- хэш сборки проекта на момент сохранения.
getAllKeys - получение всех ключей из Storage
- storage.getAllKeys() →
Set<String>- все ключи, сохранённые в проекте
Пример использования:
def keys = storage.getAllKeys()
getProjectDataInfo - получение всех записей по ключу
- storage.getProjectDataInfo(String dataKey) →
Set<PluginStorageData>- сведения обо всех записях с этим ключом (без самих данных). Порядок записей в наборе не гарантирован; для ключа, который ещё не использовался, - пустой набор
Пример использования:
def dataInfo = storage.getProjectDataInfo("TEPHistory")
def last = dataInfo ? dataInfo.max { it.createDate } : null
load - получение данных по идентификатору
- storage.load(UUID dataUuid) →
Map- данные записи с указанным идентификатором (PluginStorageData.uuid)
Данные хранятся в JSON: после загрузки ключи карт - строки, числа приходят как
Integer, Double или BigDecimal - приводите их явно (as double).Пример использования:
def lastResult = last ? storage.load(last.uuid) : [:]
double total = (lastResult.total ?: 0) as double
save - сохранение в Storage
- storage.save(String dataKey, Map<String, Object> values) →
PluginStorageData- сохраняет данные под ключом
Для одного ключа хранится одна запись на каждое состояние (хэш сборки) проекта: повторное сохранение, пока модели проекта не менялись, перезаписывает данные этой записи, а после изменения моделей создаётся новая запись. Так по ключу накапливается история по версиям проекта. Удаления записей в API нет.
Значения должны сериализоваться в JSON:
Map, List, String, числа, Boolean. UUID и даты сохраняйте строками.Пример использования:
def currentValues = [total: 125.4, date: Instant.now().toString()]
def saved = storage.save("TEPHistory", currentValues)
console.info("Сохранено: " + saved.uuid)

