Skip to content

Latest commit

 

History

History
86 lines (62 loc) · 3.75 KB

File metadata and controls

86 lines (62 loc) · 3.75 KB

DaJet Script 2.0 DaJet Metadata at NuGet

Данная версия DaJet Script является продолжением проекта DaJet. В новой версии планируется выполнить рефакторинг существующего кода, сохранив при этом синтаксис и все базовые концепции. Функционал предыдущей версии постепенно переносится в этот репозиторий. Одной из причин является необходимость перевода проекта DaJet на новую версию библиотеки DaJet.Metadata, которая была перписана с нуля.

На данный момент DaJet Script 2.0 уже используется, и вполне успешно, в новых проектах DaJet MCP Server и DaJet Http Server, а также DaJet Studio.

В текущей версии поддерживаются следующие команды:

  • DECLARE или PRIVATE
  • USE
  • SELECT
  • PRINT
  • 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 Script 2.0

Файл скрипта 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);
}