Сообщество Engee

Панель управления моделью (Engee-приложение)

Автор
avatar-nkapyrinnkapyrin
Notebook

Управление моделями из Engee-приложения

В этом примере показано, как отправлять команды вычислительному ядру Engee из интерактивного приложения.

Выполнение программы

Наша программа будет выполнять очень простую задачу. Если в текущей папке Engee находится файл model_1.engee, то эта модель будет открыта и выполнена. В окне Переменных должна появиться переменная simout.

Если в текущей папке нет такой модели, в окне приложения будет выведен отчет об ошибке.

Запустить приложение позволяет следующая команда:

genie_app = engee.genie.start("$(@__DIR__)/app.jl", log_file="log.txt");
Warning: Rejecting shutdown request
@ EngeeLanguageServer /usr/local/ijulia-core/packages/EngeeLanguageServer/8aXAQ/src/EngeeLanguageServer.jl:125

Откроем приложение в новом окне, отдельно от Engee:

display("text/html", """<a href="$(string(genie_app.url))" target="_blank" rel="noopener noreferrer">Открыть в отдельном окне</a>""")

При необходимости остановить приложение, например для перезапуска или в отладочных целях, раскомментируйте и выполните следующий код:

# engee.genie.stop("$(@__DIR__)/app.jl");

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

Описание работы приложения

За отправку команды ядру Engee, в файле app.jl отвечают следующие строчки:

engee.eval("""engee.open("model_1.engee");
engee.run("model_1")""")

Команда open открывает модель (осторожно, может перезаписать уже открытую модель), а команда run запускает ее на выполнение.

engee_big_green_butto.png

Упрощенный код приложения

В этом приложении много форматирования, но если убрать всю разметку и позиционирование элементов, то у нас останется довольно понятный шаблонный пример:

using Engee, GenieFramework

@app begin
    @out message = ""
    @in press_btn = false
    
    @onbutton press_btn begin
        try
            engee.eval("""engee.open("model_1.engee"); engee.run("model_1")""")
            message = "Команда выполнена успешно! Модель запущена."
        catch e
            message = "Ошибка: $e"
        end
    end
end

function ui()
    [
        h5("Специальная кнопка для запуска модели"),
        h6("model_1.engee"),
        btn("🚀 ЗАПУСК!", @click(:press_btn)),
        p("{{message}}")
    ]
end

@page("/", ui)

Можно различить секцию реактивной модели данных (@app) и разметку интерфейса с элементами пользовательского интерфейса (ui(()).

Заключение

При правильном оформлении кода и соблюдении стандартного синтаксиса для Engee-приложений, на платформе Engee можно создавать очень сложные инструменты, позволяющие создавать, запускать модели и анализировать результаты.