AnyLogic поддерживает специальные функции, позволяющие «считать» блоки кода из ячеек базы данных и выполнить их во время «прогона» модели. Это может быть полезно в тех случаях, когда ваша база данных содержит фрагменты кода из внешних источников данных (например, таблиц Excel). Так, вам может быть удобнее при необходимости отредактировать код непосредственно в базе данных, нежели вносить изменения в модель.
Чтобы ваши переменные использовали значения из базы данных, воспользуйтесь конструктором запросов. Кроме того, взгляните на примеры чтения данных из базы данных 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-выражение.
Вы можете использовать этот код там, где вам удобно: например, назначить это действие кнопке или указать его в качестве действия агента.
-
Как мы можем улучшить эту статью?
-