AnyLogic
Развернуть
Размер шрифта

Выполнение функций, прочитанных из базы данных

AnyLogic поддерживает специальные функции, позволяющие «считать» блоки кода из ячеек базы данных и выполнить их во время «прогона» модели. Это может быть полезно в тех случаях, когда ваша база данных содержит фрагменты кода из внешних источников данных (например, таблиц Excel). Так, вам может быть удобнее при необходимости отредактировать код непосредственно в базе данных, нежели вносить изменения в модель.

Чтобы ваши переменные использовали значения из базы данных, воспользуйтесь конструктором запросов. Кроме того, взгляните на примеры чтения данных из базы данных AnyLogic..

Вы также можете явно указать, что колонка базы данных AnyLogic имеет тип данных Код.

Функции

Функция Описание
void executeAction(code, argDescriptors) Выполняет действие. Не возвращает значений.

code — строка, содержащая код, который вы хотите выполнить.
argDescriptors — (опционально) массив параметров и их значений, представленный в следующем формате: "имя 1 параметра", значение, "имя 2 параметра", значение.
Пример: executeAction("myEvent.restart(period);", "period", 20); — Перезапускает событие myEvent после указанного в значении period таймаута.
T executeExpression(code, argDescriptors) Возвращает значение указанного Java-выражения.
Тип значения для результата можно указать явно: см. другой пример нотации функции ниже.

code — строка, содержащая код, который вы хотите выполнить.
argDescriptors — (опционально) массив параметров и их значений, представленный в следующем формате: "имя 1 параметра", значение, "имя 2 параметра", значение.
Пример:
Color myColor = executeExpression("new Color(red, green, blue);", "red", 105, "green", 105, "blue", 105); — создает цвет myColor с указанными значениями RGB.
T executeExpression(returnType, code, argDescriptors) Возвращает значение указанного Java-выражения, с указанным типом данных.

returnType — тип значения, возвращаемый выражением. Может быть равен void.class, если указанное выражение — это действие.
code — строка, содержащая код, который вы хотите выполнить.
argDescriptors — (опционально) массив параметров и их значений, представленный в следующем формате: "имя 1 параметра", значение, "имя 2 параметра", значение.
Пример:
Color myColor = executeExpression(Color, "new Color(red, green, blue);", "red", 105, "green", 105, "blue", 105); — создает цвет myColor с указанными значениями RGB.

Пример

В базе данных некоторой модели есть таблица colors:

Как видно на примере, колонка color состоит из переменных строкового типа, содержащих названия цветов.

Предположим, в вашей модели имеется прямоугольник rectangle, который вы хотите покрасить в случайно выбранный цвет из перечисленных в базе данных.

Чтобы AnyLogic прочитал значения в базе данных и использовал эти цвета, добавьте в модель такой код:

String colorName = randomFrom(selectFrom(colors).list(colors.color));
rectangle.setFillColor(executeExpression(colorName));

Мы извлекаем случайное значение из ячейки базы данных и присваиваем его строковой переменной colorName. Затем мы командуем AnyLogic окрасить прямоугольник, интерпретируя строковую переменную как Java-выражение.

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

Как мы можем улучшить эту статью?