Поиск
Каждый элемент в системе обладает некоторой информацией, которая позволяет однозначно его идентифицировать среди других элементов этой системы. Впрочем делать это, предоставляя всю информацию об элементе в каждом месте его использования, достаточно трудозатратно, поэтому в платформе существует специальный алгоритм поиска, который позволяет найти нужный элемент обладая лишь частью информации о нем (например только коротким именем и модулем, в котором используется искомый элемент).
Шаги поиска
В общем случае, алгоритм поиска состоит из одного или нескольких шагов поиска. Шаги выполняются друг за другом, таким образом, что если на первом шаге искомый элемент не был найден, выполняется второй шаг, затем следующий и так далее пока либо не будет найден искомый элемент, либо закончатся шаги (в последнем случае, платформа выдаст ошибку, что элемент не найден).
Каждый шаг поиска, в свою очередь, состоит из нескольких подшагов:
- Условия шага - множество условий, каждое из которых должно быть выполнено, чтобы шаг вообще имело смысл выполнять. Эта проверка выполняется еще до того, как начат просмотр хоть каких-то элементов системы и целиком зависит от контекста обращения.
- Условия отбора - множество условий, каждое из которых должно быть выполнено для каждого элемента, который претендует на то, чтобы быть искомым элементом. На этом шаге элементы не зависят друг от друга, а результатом выполнения этого шага является отобранное множество кандидатов, на то, чтобы быть искомым элементом.
- Операции выбора - список операций, каждая из которых фильтрует множество кандидатов, в зависимости от того, какие из кандидатов в этом множестве потенциально "лучше" (то есть с большей вероятностью) подходят на роль искомого элемента.
Если после выполнения последней операции выбора остался:
- ровно один элемент - он и считается искомым.
- больше одного элемента - платформа выдаст ошибку, что не возможно однозначно определить искомый элемент
- ни одного элемента - платформа либо перейдет на следующий шаг поиска (если он есть), либо выдаст ошибку что элемент не найден.
Ниже приведены шаги, условия и операции алгоритма поиска, в зависимости от типа искомого элемента:
Тип элемента | Шаг поиска | Условия шага | Условия отбора | Операции выбора |
---|---|---|---|---|
Модули |
| |||
Формы, Классы, Элементы навигатора, Группы свойств и действий, Таблицы, Дизайн навигатора |
| |||
Метакоды |
| |||
Свойства, Действия | Лока льные |
| ||
Локальные общие | ||||
Глобальные | ||||
Глобальные общие |
|
|
Описание шагов, условий и операций алгоритма поиска:
Совпадает имя
Имя кандидата совпадает с именем поиска (всегда должно задаваться при поиске явно). Сравнение регистро-зависимое (то есть aA != AA
).
Находится в зависимом модуле
Модуль кандидата зависит от модуля, в котором осуществляется поиск.
Находится в заданном пространстве имен (если задано явно)
Пространство имен кандидата совпадает с пространством имен поиска (если это пространство имен задано явно).
Выбор приоритетного пространства имен (если пространство имен не задано явно)
Если в текущем множестве есть кандидаты из пространства имен, в котором осуществляется поиск - все остальные кандидаты удаляются из множества кандидатов, и операция выбора завершается. Если нет, аналогичное действие повторяется для приоритетных пространств имен, модуля, в котором осуществляется поиск (в порядке задания этих приоритетных пространств). Если и для них ничего не найдено, множество кандидатов остается неизменным.