Версионирование

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

Версионирование задается в поле "version" основной части меты классов. Чтобы изменить версию меты, необходимо добавить атрибут version(«version» : 2).

Механизм работы

При загрузке метаданных, если есть атрибут version («version» : 2) - будет закачена мета с версией, иначе версия = 1.

{
  "isStruct": false,
  "key": "id",
  "semantic": "caption",
  "name": "ion_filter",
  "caption": "Фильтры",
  "ancestor": null,
  "container": null,
  "creationTracker": "",
  "changeTracker": "",
  "version" : 2
}

При создании объектов к ним будет добавляться последняя версия метаданных из текущих в базе, а при редактировании объектов они будут редактироваться на основании сохраненной версии.

Пример сохраненных объектов с разными версиями в базе:

{
    "_id" : ObjectId("567cfa1eb869fc2833690ea4"),
    "id" : 24006,
    "class" : "ALL",
    "caption" : "11",
    "html" : "",
    "filter" : "[\"{\\\"property\\\":\\\"contact\\\",\\\"operation\\\":20,\\\"value\\\":\\\"11\\\",\\\"title\\\":\\\"Контактная информация содержит 11\\\",\\\"type\\\":7}\"]",
    "period" : "2015-12-08,2016-02-05",
    "version" : 1,
    "semanticTitle" : "11 "
}

{
    "_id" : ObjectId("56944e5cb73f51ec182c7369"),
    "class" : "ALL",
    "caption" : "fffffff",
    "filter" : "[\"{\\\"property\\\":\\\"class\\\",\\\"operation\\\":0,\\\"value\\\":\\\"fff\\\",\\\"title\\\":\\\"Класс фильтра равно fff\\\",\\\"type\\\":1}\"]",
    "version" : 2,
    "id" : NaN,
    "semanticTitle" : "fffffff "
}

Работа в коде

При считывании меты классов, данные разделяются по версиям. Имена версионированных классов имеют имена следующего вида “<имякласса><номер версии>”. Например, ion_filter_1, ion_filter_2 – Класс ion_filter версии 1 и 2 соответственно.

При выборке объектов, данные берутся с учётом версии. Версия объекта передаётся в виде параметра version запроса на открытие объекта.