Releases: zhichkin/dajet
DaJet 3.8.7
Приведение реализации в соответствие с актуальной документацией DaJet Script
DaJet 3.8.6
DaJet 3.8.5
Приведение реализации в соответствие с актуальной документацией DaJet Script
Расширения 1С:Предприятие 8
Добавлена возможность использования расширений 1С:Предприятие 8 в DaJet Script. Для этого следует добавить параметр mdex в строку подключения к базе данных: USE '<provider>://<url>?mdex'
.
DECLARE @table array
-- Включение поддержки расширений
USE 'mssql://server/database?mdex'
SELECT Ссылка, Код, Наименование, Расш_Реквизит1
INTO @table
FROM Справочник.Тестовый
END
RETURN @table
Заголовки сообщений RabbitMQ
Исправлены ошибки сериализации заголовков сообщений RabbitMQ, имеющих тип данных datetime
и uuid
.
DaJet 3.8.4
Приведение реализации в соответствие с актуальной документацией DaJet Script
dajet-3.8.3
Добавлена возможность формирования произвольных заголовков сообщений RabbitMQ и работа с ними в DaJet Script, в том числе при приёмке сообщений из брокера. Примеры скриптов, как работать с заголовками, прилагаются (смотри ниже в артефактах релиза).
Добавлены функции динамического определения структуры значений типа object
:
- GET_PROPERTY - получает описание свойства по его индексу в виде
object
, имеющего следующие свойства:- Name (string) - имя свойства
- Type (string) - тип свойства
- Value (union) - значение свойства
- PROPERTY_COUNT - возвращает количество свойств объекта данных
- PROPERTY_EXISTS - определяет наличие свойства по его имени
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: Define @property object schema !!!
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
RETURN @object
-- Результат работы скрипта
[Булево] (boolean) {true}
[Целое] (number) {1234}
[Десятичное] (number) {12.34}
[ДатаВремя] (datetime) {2024-01-01 12:34:56}
[Строка] (string) {это строка текста}
[Идентификатор] (uuid) {08ec109d-a06b-a1b1-11ee-ca472bff0a0d}
DaJet 3.8.2
Приведение реализации в соответствие с актуальной документацией DaJet Script
DaJet 3.8.1
Приведение реализации в соответствие с актуальной документацией DaJet Script
DaJet 3.8.0
Приведение реализации в соответствие с актуальной документацией DaJet Script
DaJet 3.7.0
Структурированная обработка ошибок
Синтаксис новой команды DaJet Script
TRY <statements>
CATCH <statements>
FINALLY <statements>
END [TRY]
Блок TRY - в этом блоке выполняется код, который может вызвать возникновение исключительной ситуации (ошибки).
<statements> - блок кода, состоящий из одной или более команд.
Блок CATCH выполняется только в случае возникновения ошибки в блоке TRY. Для получения описания ошибки следует использовать функцию ERROR_MESSAGE, которая возвращает строковое значение. Использование этой функции имеет смысл только в блоке CATCH. Использование этой функции в любом другом месте скрипта возвращает пустую строку.
Блок FINALLY выполняется всегда и только один раз сразу же после выполнения блока TRY или CATCH.
Маркер END устанавливает границу завершения команды. Может для удобства или большей наглядности дополняться необязательным ключевым словом TRY.
Обязательно должен использоваться, либо блок CATCH, либо блок FINALLY, либо оба вместе. Это значит, что допустимы следующие виды использования команды структурированной обработки ошибок:
- TRY <statements> CATCH <statements> END [TRY]
- TRY <statements> FINALLY <statements> END [TRY]
- TRY <statements> CATCH <statements> FINALLY <statements> END [TRY]
Пример использования команды
TRY
EXECUTE './полезный_скрипт.djs'
CATCH
PRINT ERROR_MESSAGE() -- Логируем описание ошибки
FINALLY
-- Делаем что-то полезное
END TRY
Добавлена команда SLEEP
Добавлена команда SLEEP, которая позволяет приостановить выполнение потока скрипта на заданный в секундах промежуток времени.
SLEEP 10 -- Ждём 10 секунд
Изменение синтаксиса команды USE
Команда USE должна теперь обязательно завершаться ключевым словом END и может дополняться необязательным уточняющим словом USE. Это необходимо для определения контекста выполнения команд, а также области видимости тех или иных объектов соответствующей базы данных. Команды USE могут быть вложенны друг в друга.
USE 'mssql://server/database'
<statements>
END USE
DaJet Studio 3.6.0
Хранимые процедуры баз данных
В качестве экспериментального функционала реализован вызов хранимых процедур баз данных. Данный функционал реализован однообразно для MS SQL Server и PostgreSQL. Для PostgreSQL функционал доступен только начинаяс 11-ой версии и выше.
Возврат значений из хранимых процедур возможен только в виде исходящих параметров. Это обусловлено ограничениями реализации PostgreSQL, в отличие от MS SQL Server, который дополнительно реализует возврат таблиц и статус-кода. При этом на текущий момент времени в DaJet Script реализован возврат только одного исходящего параметра. Входящих параметров может быть столько сколько позволяет соответствующая СУБД.
Пример вызова хранимой процедуры DaJet Script
-- Скрипт call-ms-proc.djs (будет использован ниже для вызова как web api)
DECLARE @input number = 1 -- Входящий параметр
DECLARE @output number = 1 -- Исходящий параметр
-- Строка подключения к базе данных dajet-exchange дополняется
-- именем хранимой процедуры. В данном случае это test_db_proc.
REQUEST 'mssql://zhichkin/dajet-exchange/test_db_proc'
WITH @input
INTO @output
PRINT @output -- Фиксируем результат в файле dajet.log
RETURN @output -- Возвращаем результат вызывающей стороне
Пример кода соответствующей хранимой процедуры MS SQL Server
CREATE PROCEDURE [dbo].[test_db_proc]
@input int,
@output int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @output = @input + 1;
END
Пример кода соответствующей хранимой процедуры PostgreSQL
CREATE OR REPLACE PROCEDURE public.test_db_proc(
_input numeric,
INOUT _output numeric)
LANGUAGE 'plpgsql'
AS $BODY$
begin
_output = _input + 1;
end;
$BODY$;
DaJet Script как web api + передача параметров
Передача параметров осуществляется при помощи объекта JSON. Имена свойств этого объекта должны соответствовать именам параметров принимающего скрипта DaJet. Типы данных значений также должны совпадать. На текущий момент времени реализована передача параметров только примитивных типов данных (boolean, number, datetime, string и uuid).
Сервисом web api является /dajet/exe
. Далее следует указать путь к скрипту DaJet или его относительный адрес. Например, если скрипт расположен в каталоге test
и называется call-ms-proc.djs
(смотри ниже), то полный URL скрипта будет выглядеть следующим образом: http://localhost:5000/dajet/exe/test/call-ms-proc.djs
Параметры JSON для выполнения POST запроса
{
"Булево": true,
"Число": 1.25,
"ДатаВремя": "2015-03-01T00:00:00",
"Строка": "Привет =)",
"Идентификатор": "8d2e1072-7edb-4df4-a2a8-b883351045c9"
}
Соответствующие объявления параметров DaJet Script
DECLARE @Булево AS boolean = false
DECLARE @Число AS number = 1.23
DECLARE @ДатаВремя AS datetime = '2022-01-01T12:34:56'
DECLARE @Строка AS string(10) = 'Это строка'
DECLARE @Идентификатор AS uuid = '35521B2A-B154-4CA5-97FC-AE5733C4E473'
Скрипт DaJet вызывающий другой скрипт DaJet как web api сервера DaJet =)
DECLARE @response object -- HTTP ответ на запрос
-- Вызов скрипта call-ms-proc.djs (код выше - вызов хранимой процедуры)
REQUEST 'http://localhost:5000/dajet/exe/test/call-ms-proc.djs'
WITH User-Agent = 'DaJet Script'
, Content-Type = 'application/json;charset=utf-8'
SELECT Method = 'POST'
, Content = '{ "input": 10 }' -- Входящий параметр скрипта call-ms-proc.djs
INTO @response
RETURN @response.Value -- Возвращаем результат вызывающей стороне