Словарь

Словарь

Словарь ​

Словарь – это элемент системы, который хранит данные в формате "ключ – значение" или "ключ – массив значений". Ключ в словаре должен быть уникальным.

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

NOTE

Также, в системе существует особый тип словарей – словари для мониторинга .

NOTE

Словари не предназначены для хранения больших данных. Рекомендованный размер словаря – не больше 1000 записей. При этом, в системе данное значение ничем не контролируется и ограничений по размеру словаря нет.

Настраивать словари можно на экране конфигурации, в разделе Словари.

Словари можно объединять в Группы словарей.

Именованные поля ​

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

named fields

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

Присвоить названия полям можно только при импорте словаря из таблицы Excel. В текущей версии пользовательского интерфейса системы SmartDCIM функционал переименования столбцов недоступен.

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

НазваниеСерийный номерВвод в эксплуатацию
ПУЛЬСАР 1ш-1-5/60-0-1-0MKL68JLASKH824.03.2021
Инкотекс Меркурий 236GRY9RK635VQM16.09.2023
Инкотекс Меркурий 201.7AA8RQPVD3JL803.11.2024

Также, создать именованные поля можно через REST API при помощи запросов Создать словарь и Обновить словарь.

Зашифрованные поля ​

Поля в словарях могут быть зашифрованными. Для этого, название поля должно содержать слово password (не зависит от регистра). Для изменения значений зашифрованных полей нужно ввести значение заново в соответствующее поле. Расшифровать и использовать данные можно только на стороне сервера.

encrypted

В системе зашифрованные поля выглядят следующим образом:

json
{
    "content": "{\"john.doe\":\"<<crypt:8D0E4E0C1EFC3D4533005804379270C8:96CB2385E0E693D391DD69A156088C46ACAEBEF2C7266993509723F7ECA7DE42>>\",\"jane.doe\":\"<<crypt:280B6896DECF67A730AC1AE011B254FF:0BF81AAF0B206712967008CA9BC9367C>>\"}",
}

NOTE

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

Адресация полей ​

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

Словари используют следующую адресацию:

Индекс элементаЗначение
0Ключ
1 .. NЗначения словаря. N – количество полей в словаре.
N + 1, отрицательные значенияundefined.

Модель словаря ​

ПолеТипОписание
columnsObject
Названия столбцов (ключа и значений) словаря. Присутствует только словарях с именованными столбцами.

Определяется как объект JSON следующего вида:

"columns": { "0": { "name": "название ключа" }, "1": { "name": "название первого значения" }, "2": { "name": "название второго значения" }, ... },

Значения в объекте можно пропускать и оставлять столбцы неназванными.

| | Значения в объекте можно пропускать и оставлять столбцы неназванными. | | | Значения в объекте можно пропускать и оставлять столбцы неназванными. | | | | | content | String | Пары ключ-значение, где ключ – реальное значение метрики, а значение – отображаемое пользователю в виджетах. | | | | contentType | String | Строка, которая содержит тип значения словаря. В текущей реализации, всегда содержит object. | | | | comment | String | Пользовательский комментарий к словарю. | | | | description | String | Описание словаря. | | | | group | String | ID группы, к которой принадлежит словарь. | | | | id | String | Идентификатор словаря. | | | | key_auto_gen | Boolean | Включить автоматическую генерация ключей. Если true – система будет генерировать ключи в формате UUIDv4 для новых записей. | | | | name | String | Название словаря. | | |

Примеры ​

Одно значение ​

Ниже приведён пример словаря, который можно использовать, например, для датчика открытия двери.

Датчик присылает значения 0 и 1, которые соответствуют закрытию и открытию двери соответственно. При использовании словаря в виджете будут отображаться значения Closed и Open.

Значения и их представления указываются в виде JSON-строки в поле content.

json
{
    "name": "Door status",
    "content": "{\"0\":\"Closed\",\"1\":\"Open\"}",
    "description": "Transforms data from sensors in the human-readable form",
    "contentType": "object",
    "id": "66e40169029ed40f1105e599"
}

Набор значений ​

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

NOTE

Для создания зашифрованных полей, нужно задать нужному полю название, содержащее слово password в поле columns. Регистр строки не важен. Также, для шифрования строк, необходимо включить шифрование в поле encrypt серверной конфигурации. Без этих настроек поля не будут шифроваться, система будет просто скрывать их значение в пользовательском интерфейсе отображения словаря.

json
{
    "name": "Employees",
    "content": "{\"1\":[\"John Doe\",\"jdoe@example.com\",\"<<crypt:8E993700B6C8BE0CD3849016AF2EF808:0ECB4A66999D516BF80AF91042C7D577>>\"],\"2\":[\"Jane Doe\",\"jdoe@example.com\",\"<<crypt:704FBEF78BF89315840EAF72E9581508:9E984544669ACF7DBCD6C9455360CEB8>>\"]}",
    "description": "List of employees",
    "contentType": "object",
    "columns": {
        "0": {
            "name": "ID"
        },
        "1": {
            "name": "Name"
        },
        "2": {
            "name": "Email"
        },
        "0": {
            "name": "Password"
        }
    },
    "id": "66e411bf029ed40f1105e59a"
},