Skip to the content.

Начало

Тип object

Тип данных object реализован DaJet Script для универсализации и интеграции между собой различных систем типов данных. При помощи object можно моделировать практически любые структуры данных, в которых возникает необходимость в процессе обмена данными между узлами интеграции. Объект типа object, помимо собственных свойств простых типов данных, может иметь вложенные объекты object и массивы array. Набор свойств объекта и их тип выводится статически или динамичеси из контекста использования object. Таким образом, object используется для отображения или формирования записей таблиц баз данных, объектов JSON, сообщений RabbitMQ и тому подобного.

Создание простого объекта

-- 1. Создание простого объекта командой DECLARE

DECLARE @object object = SELECT Булево        = true
                              , Целое         = 1234
                              , Десятичное    = 12.34
                              , ДатаВремя     = '2024-01-01T12:34:56'
                              , Строка        = 'это строка текста'
                              , Идентификатор = '08ec109d-a06b-a1b1-11ee-ca472bff0a0d'

PRINT 'Свойство "Булево"        = ' + @object.Булево
PRINT 'Свойство "Целое"         = ' + @object.Целое
PRINT 'Свойство "Десятичное"    = ' + @object.Десятичное
PRINT 'Свойство "ДатаВремя"     = ' + @object.ДатаВремя
PRINT 'Свойство "Строка"        = ' + @object.Строка
PRINT 'Свойство "Идентификатор" = ' + @object.Идентификатор
PRINT 'Объект в формате JSON    = ' + JSON(@object)

-- Результат выполнения скрипта
[2024-10-04 15:31:05] Свойство "Булево"        = true
[2024-10-04 15:31:05] Свойство "Целое"         = 1234
[2024-10-04 15:31:05] Свойство "Десятичное"    = 12.34
[2024-10-04 15:31:05] Свойство "ДатаВремя"     = 2024-01-01 12:34:56
[2024-10-04 15:31:05] Свойство "Строка"        = это строка текста
[2024-10-04 15:31:05] Свойство "Идентификатор" = 08ec109d-a06b-a1b1-11ee-ca472bff0a0d

-- Результат выполнения в формате JSON
{
  "Булево": true,
  "Целое": 1234,
  "Десятичное": 12.34,
  "ДатаВремя": "2024-01-01T12:34:56",
  "Строка": "это строка текста",
  "Идентификатор": "08ec109d-a06b-a1b1-11ee-ca472bff0a0d"
}
-- 2. Создание простого объекта командой SET

DECLARE @object object

SET @object = SELECT Булево        = true
                   , Целое         = 1234
                   , Десятичное    = 12.34
                   , ДатаВремя     = '2024-01-01T12:34:56'
                   , Строка        = 'это строка текста'
                   , Идентификатор = '08ec109d-a06b-a1b1-11ee-ca472bff0a0d'

-- Далее всё аналогично первому варианту
-- 3. Создание простого объекта командой SELECT...INTO

DECLARE @object object

SELECT Булево        = true
     , Целое         = 1234
     , Десятичное    = 12.34
     , ДатаВремя     = '2024-01-01T12:34:56'
     , Строка        = 'это строка текста'
     , Идентификатор = '08ec109d-a06b-a1b1-11ee-ca472bff0a0d'
  INTO @object

-- Далее всё аналогично предыдущим вариантам

Наверх

Создание сложного объекта

DECLARE @message   object -- Результирующее сообщение
DECLARE @object    object -- Информация о товаре (объект)
DECLARE @array     array  -- Информация о ценах (массив)
DECLARE @КодТовара string = '00000001'

USE 'mssql://server/database'
   SET @object = SELECT TOP 1 Ссылка, Код, Наименование
                   FROM Справочник.Номенклатура
                  WHERE Код = @КодТовара

   SET @array = SELECT Период, Цена
                  FROM РегистрСведений.ЦеныНоменклатуры
                 WHERE Номенклатура = @object.Ссылка
END

SET @message = SELECT ТипСообщения = 'price.quote'
                    , Товар        = @object
                    , Цены         = @array

PRINT JSON(@message)

-- Результат выполнения скрипта в формате JSON
{
  "ТипСообщения": "price.quote",
  "Товар": {
    "Ссылка": "{36:08ec109d-a06b-a1b1-11ee-ca472bff0a0d}",
    "Код": "00000001",
    "Наименование": "Товар 1"
  },
  "Цены": [
    {
      "Период": "2024-03-01T00:00:00", "Цена": 1.00
    },
    {
      "Период": "2024-03-02T00:00:00", "Цена": 2.00
    },
    {
      "Период": "2024-03-03T00:00:00", "Цена": 3.00
    }
  ]
}

Наверх

Оператор APPEND команды SELECT

DECLARE @message   object -- Результирующая структура сообщения
DECLARE @product   object -- Тело сообщения: информация о товаре
DECLARE @КодТовара string = '00000001'

USE 'mssql://server/database'
   SELECT Ссылка       = UUIDOF(Ссылка)
        , Код          = RTRIM(LTRIM(Код))
        , Наименование = RTRIM(LTRIM(Наименование))
     INTO @product
     FROM Справочник.Номенклатура AS Товар
   APPEND (SELECT Период, Цена
             FROM РегистрСведений.ЦеныНоменклатуры
            WHERE Номенклатура = @product.Ссылка
            ORDER BY Период ASC) AS Цены
    WHERE Товар.Код = @КодТовара
END

SELECT ТипСообщения  = 'price.quote'
     , ТелоСообщения = @product
  INTO @message

PRINT JSON(@message)

-- Результат выполнения скрипта в формате JSON
{
  "ТипСообщения": "price.quote",
  "ТелоСообщения": {
    "Ссылка": "08ec109d-a06b-a1b1-11ee-ca472bff0a0d",
    "Код": "00000001",
    "Наименование": "Товар 1",
    "Цены": [
      {
        "Период": "2024-03-01T00:00:00", "Цена": 1.00
      },
      {
        "Период": "2024-03-02T00:00:00", "Цена": 2.00
      },
      {
        "Период": "2024-03-03T00:00:00", "Цена": 3.00
      }
    ]
  }
}

Наверх

Создание при помощи функции JSON

DECLARE @object object
DECLARE @json string = '{
  "Булево": true,
  "Целое": 1234,
  "Десятичное": 12.34,
  "ДатаВремя": "2024-01-01T12:34:56",
  "Строка": "это строка текста",
  "Идентификатор": "08ec109d-a06b-a1b1-11ee-ca472bff0a0d"
}'

SET @object = JSON(@json) -- Преобразование JSON в object

PRINT 'Свойство "Булево"        = ' + @object.Булево
PRINT 'Свойство "Целое"         = ' + @object.Целое
PRINT 'Свойство "Десятичное"    = ' + @object.Десятичное
PRINT 'Свойство "ДатаВремя"     = ' + @object.ДатаВремя
PRINT 'Свойство "Строка"        = ' + @object.Строка
PRINT 'Свойство "Идентификатор" = ' + @object.Идентификатор
PRINT 'Объект в формате JSON    = ' + JSON(@object) -- Преобразование object в JSON

-- Результат выполнения скрипта
[2024-10-04 16:38:44] Свойство "Булево"        = true
[2024-10-04 16:38:44] Свойство "Целое"         = 1234
[2024-10-04 16:38:44] Свойство "Десятичное"    = 12.34
[2024-10-04 16:38:44] Свойство "ДатаВремя"     = 2024-01-01 12:34:56
[2024-10-04 16:38:44] Свойство "Строка"        = это строка текста
[2024-10-04 16:38:44] Свойство "Идентификатор" = 08ec109d-a06b-a1b1-11ee-ca472bff0a0d

-- Результат выполнения в формате JSON
{
  "Булево": true,
  "Целое": 1234,
  "Десятичное": 12.34,
  "ДатаВремя": "2024-01-01T12:34:56",
  "Строка": "это строка текста",
  "Идентификатор": "08ec109d-a06b-a1b1-11ee-ca472bff0a0d"
}

Наверх

Функции определения структуры объекта

DaJet Script реализует вспомогательные функции программного исследования структуры объекта. Это может быть необходимо в разных ситуациях, например, в процессе тестирования или динамического определения наличия нужных свойств объекта, когда он принимается на вход скрипта в качестве пользовательского параметра.

Таблица функций типа object

Функция Возврат Параметры Описание Команда USE Запрос СУБД Выражение
DaJet Script
GET_PROPERTY object object
number
Функция принимает первым параметром object, информацию о свойстве которого нужно получить. Второй параметр - целое число, индекс свойства в составе переданного значения объекта.
Возвращаемый объект имеет следующую структуру:
1. Name (string) - имя свойства.
2. Type (string) - имя типа данных значения свойства.
3. Value - текущее значение свойства.
нет нет да
PROPERTY_COUNT number object Функция принимает первым параметром значение object. Возвращает количество (целое число) свойств, которое данный объект содержит. нет нет да
PROPERTY_EXISTS boolean object
string
Функция принимает первым параметром значение object. Вторым параметром является имя свойства, наличие которого в этом объекте необходимо выяснить.
Возвращает булево: TRUE - объект содержит указанное свойство, FALSE - свойство с таким имененм в данном объекте отсутствует.
нет нет да

Пример использования вспомогательных функций object

DECLARE @object object
DECLARE @json   string = '{
  "Булево": true,
  "Целое": 1234,
  "Десятичное": 12.34,
  "ДатаВремя": "2024-01-01T12:34:56",
  "Строка": "это строка текста",
  "Идентификатор": "08ec109d-a06b-a1b1-11ee-ca472bff0a0d"
}'

SET @object = JSON(@json)

DECLARE @count number = 0
DECLARE @index number = 0
-- NOTE: Определяем схему переменной @property типа object !!!
DECLARE @property object = SELECT Name = '', Type = '', Value = NULL

SET @count = PROPERTY_COUNT(@object)

WHILE @index < @count

   SET @property = GET_PROPERTY(@object, @index)

   IF PROPERTY_EXISTS(@object, @property.Name) THEN
      PRINT '[' + @property.Name + '] (' + @property.Type + ') {' + @property.Value + '}'
   END

   SET @index = @index + 1 -- take next property
END

-- Результат работы скрипта
[2024-10-04 16:38:44] [Булево] (boolean) {true}
[2024-10-04 16:38:44] [Целое] (number) {1234}
[2024-10-04 16:38:44] [Десятичное] (number) {12.34}
[2024-10-04 16:38:44] [ДатаВремя] (datetime) {2024-01-01 12:34:56}
[2024-10-04 16:38:44] [Строка] (string) {это строка текста}
[2024-10-04 16:38:44] [Идентификатор] (uuid) {08ec109d-a06b-a1b1-11ee-ca472bff0a0d}

Наверх