Данная версия DaJet Script является продолжением проекта DaJet. В новой версии планируется выполнить рефакторинг существующего кода, сохранив при этом синтаксис и все базовые концепции. Функционал предыдущей версии постепенно переносится в этот репозиторий. Одной из причин является необходимость перевода проекта DaJet на новую версию библиотеки DaJet.Metadata, которая была перписана с нуля.
На данный момент DaJet Script 2.0 уже используется, и вполне успешно, в новых проектах DaJet MCP Server и DaJet Http Server, а также DaJet Studio.
В текущей версии поддерживаются следующие команды:
- DECLARE или PRIVATE
- USE
- SELECT
- RETURN
- JSON (функция сериализации)
Поддерживается работа с базами данных SQL Server и PostgreSQL.
Для выполнения скриптов необходимо подключить в свой проект NuGet-пакет DaJet.Interpreter.
> dotnet add package DaJet.Interpreter --version 1.0.6
Этот пакет имеет следующие зависимости:
- DaJet.Interpreter (текущий репозиторий)
- DaJet.Scripting (текущий репозиторий)
- DaJet.Metadata
- DaJet.FileLogger
- DaJet.TypeSystem
- DaJet.Data
- Npgsql
- Microsoft.Data.SqlClient
- DaJet.Metadata
- DaJet.Scripting (текущий репозиторий)
Файл скрипта DaJet Script test.djs
DECLARE @КодТовара string -- Входящий параметр скрипта
PRIVATE @Результат array -- Результат выполнения скрипта
USE 'MS_TEST'
SELECT Ссылка, Код, Наименование
INTO @Результат
FROM Справочник.Номенклатура
WHERE Код = @КодТовара
END
RETURN @Результат -- или JSON(@Результат)Код программы на C#
private static readonly JsonSerializerOptions JsonOptions = new()
{
WriteIndented = true,
ReferenceHandler = ReferenceHandler.IgnoreCycles,
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
};
static void Main()
{
JsonOptions.Converters.Add(new DictionaryJsonConverter());
string MS_TEST = "Data Source=server;Initial Catalog=database;Integrated Security=True;Encrypt=False;";
MetadataProvider.Add("MS_TEST", DataSourceType.SqlServer, in MS_TEST);
string filePath = Path.Combine(AppContext.BaseDirectory, "scripts", "test.djs");
Script script = new ScriptBuilder().FromFile(in filePath).Build();
Interpreter interpreter = new(in script);
Dictionary<string, object> parameters = new()
{
{ "КодТовара", "00000002" }
};
object value = interpreter.Execute(in parameters);
string json = JsonSerializer.Serialize(value, value.GetType(), JsonOptions);
Console.WriteLine(json);
}