Тип object
Тип данных object
реализован DaJet Script для универсализации и интеграции между собой различных систем типов данных. При помощи object
можно моделировать практически любые структуры данных, в которых возникает необходимость в процессе обмена данными между узлами интеграции. Объект типа object
, помимо собственных свойств простых типов данных, может иметь вложенные объекты object
и массивы array
. Набор свойств объекта и их тип выводится статически или динамичеси из контекста использования object
. Таким образом, object
используется для отображения или формирования записей таблиц баз данных, объектов JSON, сообщений RabbitMQ и тому подобного.
- Создание простого объекта
- Создание сложного объекта
- Оператор APPEND команды SELECT
- Создание при помощи функции JSON
- Функции определения структуры объекта
- GET_PROPERTY
- PROPERTY_COUNT
- PROPERTY_EXISTS
Создание простого объекта
-- 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}