BIMIT
Разработка плагинов

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)
Copyright © 2026