Визуализация структуры приложения
Модуль Визуализация структуры приложения позволяет провести глубокий анализ взаимосвязанных элементов приложения или решения на базе платформы AggreGate.
Например, ссылки в языке выражений позволяют использовать в отдельном выражении данные из различных контекстов. В качестве другого примера можно привести привязки в моделях, классах, инструментальных панелях или на уровне сервера, которые позволяют оркестровать сложные контекстные взаимодействия в мощных приложениях. Модуль визуализации структуры приложения позволяет идентифицировать эти взаимосвязанные контексты и исследовать характер их взаимодействия.
Модуль визуализации структуры приложения предлагает контекст Структура , содержащий две переменные, Узлы структуры и Связи структуры, которые предоставляют информацию о взаимодействии между различными контекстами. Эти взаимодействия собираются динамически, а это значит, что всякий раз, когда контексты взаимодействуют друг с другом, соответствующая информация записывается модулем визуализации структуры приложения и выводится через контекст Структура.
Взаимодействия контекстов, которые не были активированы с момента последнего запуска сервера или выполнения функции Очистить структуру, не будут записаны до тех пор, пока они не будут активированы.
![]() | Когда структура приложения была обновлена, взаимодействия, произошедшие в его предыдущей структуре и записанные в базу данных визуализации структуры приложения, остаются нетронутыми. Запустите функцию контекста Очистить структуру, чтобы очистить базу данных структуры и убедиться, что она содержит только соответствующие взаимодействия. |
Узлы структуры
Переменная Узлы структуры контекста структуры указывает на контексты, которые взаимодействуют с другими контекстами. Существует несколько типов отношений, которые могут существовать между узлами, каждый из которых объясняется ниже.
Каждый узел представляет собой контекст сущности (переменной, события или функции), на которую ссылается или на которую ссылается другой контекст. В связи с этим на один узел может быть множество ссылок, и даже узлы могут ссылаться сами на себя. Например, привязка модели, которая обновляет переменную в той же модели, а значит, в том же контексте.
Полное описание переменной Узлы структуры можно найти по ссылке на контекст Структуры. Поле Идентификатор конечной вершины является уникальным идентификатором узла и не повторяется в таблице Узлы структуры. Поля Источник и Цель в таблице Связи структуры ссылаются на значение Идентификатора узла, и каждый Идентификатор узла будет соответствовать хотя бы одному значению в полях Источник или Цель. Не появится ни один узел, не имеющий хотя бы одного соединения.
Доступ к переменной Узлы структуры на языке выражений можно получить следующим образом:
{structure:structureNodes}Связи структуры
Таблица Связи структуры содержит подробности для каждой ссылки, а также текущий подсчет того, сколько раз ссылка была активирована с момента запуска сервера или вызова контекстной функции Очистить сруктуру. Существует несколько различных типов собираемых ссылок:
Получение и установка переменных обозначается
переменнойvalue в поле kind, со значением действия либоGET, либоСЭТ. Если переменная имеет значениеСЭТ, это означает, что значение исходной сущности было применено к значению целевой переменной. Тип действияGETуказывает на то, что значение целевой переменной было получено во время вычисления выражения в исходном контексте.Вызов функции обозначается значением
functionв поле kind и значениемCALLв поле действие. Выражение, вызвавшее функцию, расположено в исходном контексте, а вызываемая функция является функцией целевого контекста. Имя функции указывается в поле сущность.Произошедшие события обозначаются
событиемзначения в поле вида и значениемFIREв поле действия. Событие, названное в поле сущности, является событием целевого контекста и было запущено контекстом, указанным в pinpoint.
Информация о ссылках собирается с различными уровнями детализации, в зависимости от типов свойств, участвующих во взаимодействии.
Ссылки в выражениях позволяют собрать наибольшее количество информации, включая номер строки и столбца в выражении, в котором происходит ссылка, указанный в поле pinpoint.
Ссылки, возникающие в переходных контекстах, не содержат полных подробностей об источнике ссылки, а содержат только контекст и имя сущности происхождения ссылки. Примером переходного контекста может служить ситуация, когда ссылка вызывает функцию модуля, а эта функция содержит ссылку на переменную, тогда ссылка из функции является переходным контекстом. В текущем случае будет доступен только контекст и имя функции, без подробной точной информации.
Когда устройство начинает синхронизацию и пытается получить или установить переменную, контекст структуры записывает только контекстную информацию устройства и информацию о переменной, с которой взаимодействовало устройство. Подробности о том, какие свойства устройства были задействованы в синхронизации, не записываются.
Доступ к переменной Связи структуры на языке выражений можно получить следующим образом:
{structure:structureLinks}.
Визуализация структуры приложения с помощью компонента Граф
Ниже показано использование компонента Граф для визуализации данных из контекста Структура. Создавая четкие и информативные визуальные образы, он помогает раскрыть взаимосвязи между различными элементами данных.
Конфигурирование примера модели и устройства
Текущий пример предполагает настройку следующих контекстов:
Виртуальное устройство с именем
structure_exampleи контекстным путемusers.admin.devices.structure_example.Модель с именем
structure_exampleс одной переменной с именемvarи контекстным путемusers.admin.models.structure_example.Модель
structure_exampleсодержит привязку, которая активируется при обновлении переменнойrandomвиртуального устройства и устанавливает переменнуюvarмодели равной значениюrandom.
Чтобы проверить правильность работы привязки, откройте Дополнительные свойства модуля и убедитесь, что переменная var регулярно обновляется при изменении значения random виртуального устройства.
Создание Инструментальной панели и настройка компонента Граф
Чтобы эффективно визуализировать ссылки, захваченные контекстом Структура, создайте инструментальную панель Web UI с компонентом Граф. В руководстве "Создание инструментальной панели для мониторинга устройства" содержатся инструкции по созданию инструментальной панели и добавлению компонентов.
Редактор свойств компонента графа дает доступ к нескольким ключевым свойствам для визуализации ссылок, захваченных контекстом Структура. Настройте указанные свойства компонента графа, как показано в таблице ниже:
Свойство графа | Значение | Заметки |
|---|---|---|
Выражение узла | {structure:structureNodes} | Использует таблицу "Узлы структуры" в качестве узлов графа. |
Выражение связей | {structure:structureLinks} | Использует таблицу Связи структуры в качестве ссылок для графа. |
Выражение идентификаторов связей | {id} | Указывает имя поля таблицы Связи структуры, которое содержит Идентификатор связи. |
Выражение идентификаторов узлов | {id} | Укажите имя поля таблицы Узлы структуры, которое содержит идентификатор узла. |
Выражение источника | {source} | Укажите имя поля таблицы "Структурные связи", содержащее идентификатор конечной вершины. |
Выражение расширенного поиска | {target} | Укажите имя поля таблицы структурных связей, содержащее идентификатор конечной вершины. |
Выражение описания узла | {id} | Указывает имя поля таблицы Узлы структуры, используемое для описания узла. |
Текущая конфигурация захватывает все ссылки, активные онлайн в системе, что создает несколько сложный граф:

Интерпретация этого графа может быть затруднена из-за множества взаимосвязанных узлов и ребер, часто с перекрывающимися метками.
Фильтрация узлов и связей
Фильтрация списков узлов и связей для включения в них только определенного подмножества графа - один из способов улучшить процесс анализа. Существует несколько способов фильтрации элементов графа, но наиболее простым является применение фильтра непосредственно к таблицам {structure:structureNodes} и {structure:structureLinks} в Выражении расширенного поиска узлов и Выражении связей графа.
Для того чтобы показать только узлы и связи, относящиеся к модели structure_example и виртуальному устройству structure_example, достаточно использовать функцию обработки таблицы filter(DataTable table, String filterExpression), как показано в следующей таблице.
Свойство графа | Значение |
|---|---|
Выражение расширенного поиска | filter( {structure:structureNodes}, "contains( {path}, 'structure_example' )" ) |
Выражение связи | filter( {structure:structureLinks}, "contains( {id}, 'structure_example' )" ) |
Функция filter(DataTable table, String filterExpression) принимает два аргумента - таблицу, которую нужно отфильтровать, и filterExpression, которое оценивается для каждой строки таблицы данных, и возвращает таблицу. Результирующая таблица содержит только те строки, для которых фильтрВыражение имеет значение True.
Для Выражения узлов фильтрующее выражение "contains({path},'structure_example')" оценивается в True, если поле path строки содержит строку structure_example. Аналогично, Выражение расширенного поиска связей использует фильтрующее выражение для поля id таблицы ссылок. В результате новый граф содержит только те ссылки и узлы, которые содержат structure_example в контекстном пути.

Другой случай использования может быть при анализе привязок инструментальной панели Web UI, чтобы отфильтровать только пути, относящиеся к этой конкретной панели, например отфильтровать только узлы и ссылки, которые включают users.admin.dashboards.<имя панели> в свой Id.
![]() | Обратите внимание, что ссылки на текущую панель автоматически отфильтровываются из переменных структуры при оценке. Чтобы проанализировать ссылки в данной панели, необходимо создать другую панель для проведения анализа, где будут видны ссылки в анализируемой панели. |
Использование функции «Очистить структуру»
Функция Очистить структуру позволяет изолировать определенные взаимодействия в вашем low-code приложении. Одним из основных вариантов использования является отладка или исследование сложных выражений в моделях, функциях или наборах правил. Очистка структуры создает чистый лист, позволяя точно определить источник соединений и понять поток данных.
Например, если модель содержит несколько наборов правил с многочисленными выражениями, некоторые из которых инициируют соединения, которые вы хотите устранить, очистка структуры помогает определить источник этих соединений при повторном запуске набора правил. Кроме того, при работе с инструментальными панелями, которые генерируют собственные контексты во время выполнения, очистка структуры позволяет вам различать эти динамические контексты и уже существующие контексты системного дерева, обеспечивая более четкое представление о взаимосвязи между ними.
Интерпретация значений поля pinpoint
Поле pinpoint в таблице Связи структуры предлагает ценную информацию для точного обнаружения источника, определяя точное местоположение взаимодействий в приложении. Это особенно полезно при работе со сложными выражениями в моделях, привязках, наборах правил и других сущностях. Поле pinpoint предоставляет номер строки и столбца в выражении, где возникает взаимодействие, что позволяет отслеживать источник связей с подробной детализацией.
Рассмотрим следующий пример значения pinpoint (переносы строк и табуляция введены для удобства чтения):
expression 'callFunction'
located at line 2, Column 3
of expression originated from
'users.admin.models.tabList:ruleSets$rules[7].expression[2]'Вторая часть поля pinpoint:
expression originated from
'users.admin.models.tabList:ruleSets$rules[7].expression[2]'Указывает точное местоположение источника:
users.admin.models.tabListуказывает контекст источника:ruleSetsссылается на значение параметраruleSetsконтекста источника$rules[7]указывает значение седьмой строки поляrulesпараметраruleSets.expression[2]указывает значение второй строки поляexpressionтаблицы данных, на которую ссылаетсяrules[7]
Первая часть поля pinpoint:
expression 'callFunction'
located at line 2, Column 3 Указывает, что функция языка выражений callFunction, расположенная во второй строке и третьем столбце поля, на которое ссылается users.admin.models.tabList:ruleSets$rules[7].expression[2], является источником ссылки.
Такой уровень точности упрощает отладку, понимание потока приложений и позволяет быстро выявлять потенциальные проблемы в low-code приложении.
Связи между деревом контекста сервера и инструментальной панелью
Смешанная контекстная коммуникация происходит, когда элементы из контекстного дерева сервера и инструментальной панели взаимодействуют друг с другом. Типичным примером может быть привязка панели, которая ссылается на данные как на компонент внутри самой панели, так и на значение устройства из контекста devices.
Рассмотрим сценарий, в котором инструментальная панель отображает среднее значение температуры за определенный пользователем период времени. В этом случае будет привязка, которая нацелена как на компонент панели (в данном случае на регулятор, на который панель ссылается с помощью form/slider0), который собирает пользовательский ввод, так и на устройство (в данном случае на контекст user.admin.devices.smartThermometer), которое предоставляет историю значений температуры в заданном диапазоне.
В этом случае поле pinpoint будет содержать дополнительную информацию, scope источника. В этом примере значение pinpoint выглядит следующим образом:
expression 'average'
located at line 1, Column 1
of expression originated from
'form/:bindings$expression[0]'
(scope: 'users.admin.dashboards.tempDisplay')Указывает, что на инструментальной панели была активирована привязка form/:bindings$expression[0] с контекстом users.admin.dashboards.tempDisplay.
Was this page helpful?

