JSON-схемы

JSON-схемы описывают различные типы объектов системы: типы сущностей модели DWH (типы источников и получателей), типы правил ККД, схемы документов, параметры и описание отчетов, схемы уведомлений. При добавлении и настройке объектов системы JSON-конструктор на основе JSON-схемы предлагает формы для ввода данных для построения json.

Создание JSON-схемы

В обычном режиме работы добавление новых JSON-схем не требуется. Но в случае необходимости их можно добавить через форму управления JSON-схемами. Для перехода на форму необходимо выбрать подпункт «JSON- схемы» пункта «Администрирование» левого меню.

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

2.На открывшейся форме, заполнить поля:

  • Наименование: задать наименование схемы, поле является обязательным
  • Код: задать код схемы, уникальный идентификатор
  • Ссылка: в случае необходимости, можно указать ссылку на схему (не поддерживается)
  • Расположение: в случае необходимости, для схемы можно указать расположение
  • Провайдер: оставить пустым, при работе с моделями и правилами ККД заполняется автоматически.
  • Статус: выбрать из списка значение «Активна»
  • Схема: редактор json, позволяет добавлять json схему, автоматически валидирует и позволяет менять представление ( в виде строки или дерева)

4.И нажать кнопку «Создать»

Новая схема появится в спиcке JSON-схем

Дополнения к схеме для использования в конструкторе

В большинстве случаев для построени объектов в json используется конструктор в режиме "Мастер".

Для визуального отображения объекта в конструкторе доступны задания в схеме дополнительных параметров для отображения:

Скрытие

Задается на уровне описания ключа, испольуется для скрытия элементов в Карточке объектов конструктора.

Описание:

    "hints": {
        "hidden": true
    }

Пример:

   "label": {
                  "hints": {
                    "hidden": true
                  },
                  "title": "Наименование",
                  "type": "string"
                }

Получение атрибута объектов

Объект системы описывается под отдельным ключом swatch

Пример описания источника атрибута (swatch):

    "swatch": {
        "sources": {
            "providers": {
                "attribute": "code",// указывает какой атрибут объекта необходимо получить
                "objectType": "PROVIDER",// указывает на тип объекта
                "title": "Провайдеры"
            }
        }
    }

Пример описания в схеме:

    "code": {
        "hints": {
            "source": {
                "path": "#/swatch/sources/providers"
            }
        },
        "title": "Код",
        "type": "string"
    }

Окрашивание карточки объекта

Для карточек объектов (имеют "type": "object" в схеме) доступно окрашивание.

Настройка задается в "hints" объекта следующим образом

            "hints": {
              "style": {
                "background-color": "#6e3b1a"// нужный вам цвет
              }
            }

Табличное представление списков

Для списка объектов, которые могут принимать только одно значение. Доступен для "type": "array"

Пример описания в схеме:

        "table": {
            "title": "Таблица",
            "type": "array",
            "unevaluatedItems": false,
            "hints": {
                "role": "TABLE"// указывает, что объекты списка отображаются как строки таблицы
            },
            "items": {
                "properties": {
                    "name": {
                        "title": "Атрибут",
                        "type": "string"
                    },
                    "label": {
                        "title": "Наименование",
                        "type": "string"
                    },
                    "type": {
                        "default": "text",
                        "title": "Тип",
                        "type": "string"
                    }
                },
                "required": [
                    "name"
                ],
                "title": "Строка таблицы",
                "type": "object",
                "unevaluatedProperties": false,
                "additionalProperties": false
            }
        }

Представление DAG

Описывается также через ключ role, дополнитель в swatch описывается тип связи. Доступен для "type": "array"

Описание в схеме:

        "nodes": {
            "hints": {
                "relations": "units",// указывает какой тип связи использовать
                "role": "DAG" // указывает тип представления
            },
            "items": {
                "oneOf": [
                    {
                        "properties": {
                            "id": {
                                "title": "Наименование",
                                "type": "string"
                            },
                            "name": {
                                "title": "Наименование",
                                "type": "string"
                            },
                            "parentKeys": {
                                "items": {
                                    "type": "string"
                                },
                                "title": "Связи",
                                "type": "array",
                                "unevaluatedItems": false
                            },
                            "type": {
                                "const": "pipeline",
                                "title": "Пайплайн",
                                "type": "string"
                            }
                        },
                        "title": "Пайплайн"
                    }
                ],
                "required": [
                    "type",
                    "id"
                ],
                "title": "Узел",
                "type": "object",
                "unevaluatedProperties": false
            },
            "logicalKeys": [
                "/type"
            ],
            "title": "Узлы",
            "type": "array",
            "unevaluatedItems": false,
            "uniqueKeys": [
                "/id"
            ]
        }

Описание swatch

    "swatch": {
        "relations": { 
            "units": {
                "foreign": "parentKeys", //определяет где храниться связь
                "primary": "name",// ключ по которому осцществялется связь, значение должно быть уникальным
                "type": "hierarchy" // тип связи
            }
        }
    }

CDG представление

Описывается также через ключ role, дополнитель в swatch описывается тип связи. Доступен для "type": "array" Используется в моделях для описания ER-диаграмм

Описание в схеме

            "hints": {
                "relations": "entities",
                "role": "CDG"
            }
  "relationships": [
    {
      "$type": "SingleKeyRelationship",
      "fromAttribute": {
        "entityName": "r_equipproducer_{{ AF_USER_VARIABLE }}",
        "attributeName": "id"
      },
      "toAttribute": {
        "entityName": "r_equipmodel_{{ AF_USER_VARIABLE }}",
        "attributeName": "id"
      }
    }
  ]

Описание swatch

        "relations": {
            "entities": {
                "type": "entity2entity", // тип связи
                "primary": {
                    "anchor": "/attributes",// откуда получаем список атрибутов
                    "entity": "/name", // какой атрибут записывается в связь
                    "attribute": {
                        "key": "/attributes::?[attributesFilter]::}/name", // Путь к ключу name с заданным фильтром
                        "attributesFilter": "/annotations::[annotationsFilter]", // фильтрация для атрибутов с применением фильтра для массива annotations 
                        "annotationsFilter": "/name=primaryKey&&/value=true||/name=role&&/value=id||/name=role&&/value=code" // фильтр или, что атрибут является первичным ключом, поведение атрибута как id или поведение атрибута как код
                    }
                },
                "foreign": {
                    "anchor": "/attributes",
                    "entity": "/name",
                    "attribute": {
                        "key": "/attributes::?[attributesFilter]::}/name",
                        "attributesFilter": "/annotations::[annotationsFilter]",
                        "annotationsFilter": "/name=foreignKey&&/value=true||/name=role&&/value=fk"
                    }
                },
                "link": {
                    "list": "#/relationships",// указывает в каой объект записывается связь
                    "item": {
                        "filter": ":::/$type=SingleKeyRelationship", // указывает какие типы связей доступны
                        "const": {
                            "$type": "SingleKeyRelationship"
                        },
                        "title": "/name",
                        "primary": { // указывает как заполнять объект списка relationships
                            "key": "/toAttribute",
                            "attributes": {
                                "entity": "/entityName",
                                "attribute": "/attributeName"
                            }
                        },
                        "foreign": {
                            "key": "/fromAttribute",
                            "attributes": {
                                "entity": "/entityName",
                                "attribute": "/attributeName"
                            }
                        }
                    }
                }
            }
        }