Отчет по нарушенной переменной ссылочности#
Отчет используется для анализа некорректных gid-ссылок в данных системы. Он помогает определить, где нарушена переменная ссылочность, какие группы нарушений требуют проверки и в каких объектах хранятся проблемные значения.
Путь: Настройка системы > Настройки и сервисы > Дополнительно > Отчет по нарушенной переменной ссылочности.
Нерабочий gid — это значение gid, которое ссылается на несуществующий класс или несуществующий объект класса. Также в статистику могут попадать значения, записанные в атрибут gid-ссылки, но не соответствующие формату корректного gid.
Описание механизма gid, формата ссылки, внешних ключей, переменной ссылочности и генерации идентификаторов приведено в разделе Глобальный идентификатор GID.
Назначение и принцип работы#
Отчет предназначен для диагностики ситуаций, когда в атрибутах с gid-ссылками хранятся значения, которые система не может корректно разрешить. По отчету можно определить место возникновения проблемы: класс, атрибут, класс, на который указывает значение gid, и конкретные объекты, в которых хранится некорректная ссылка.
С помощью отчета можно:
определить, в каких классах и атрибутах накопились некорректные
gid-ссылки;оценить масштаб нарушения по количеству найденных значений;
понять, какие группы нарушений нужно проверять в первую очередь;
найти конкретные объекты, в которых хранится некорректная ссылка;
проверить результат исправления данных после повторного обновления статистики.
Например, большое количество нарушений по одному атрибуту может указывать, что в первую очередь нужно проверить данные этого атрибута и механизм, который его заполняет. Если нарушения сгруппированы по одному классу-источнику, проверку можно начать с данных, связанных с этим классом. Если после исправления и повторного обновления статистики количество нарушений не изменилось, проверьте, завершилось ли фоновое задание, и убедитесь, что исправление затронуло нужные данные.
Такие нарушения могут возникать из-за особенностей переменной ссылочности: для gid-ссылок нет обычного внешнего ключа на уровне базы данных. Поэтому при изменении, удалении или переносе данных корректность ссылок должна обеспечиваться прикладной логикой. Если в доработке или скрипте не предусмотрена обработка связанных ссылочных таблиц, в данных могут остаться gid-ссылки на несуществующие классы или объекты.
Отчет отображает заранее сформированную статистику. Данные не пересчитываются при каждом открытии формы, поэтому содержимое отчета отражает состояние на момент последнего обновления статистики.
Интерфейс отчета#
В таблице статистики данные сгруппированы в виде дерева. Первый уровень показывает, в каком классе и каком атрибуте обнаружены некорректные gid-ссылки. Эта строка является итоговой для группы: значение в колонке Количество нерабочих gid ссылок равно сумме найденных нарушений по дочерним строкам. Колонка Класс-источник для итоговой строки не заполняется.
Второй уровень показывает, на классы каких объектов указывают найденные некорректные значения. Такая группировка помогает понять, с какими типами объектов связана проблема, и сузить область дальнейшей проверки. Если значение gid не удается сопоставить с существующим классом, в колонке Класс-источник может отображаться не имя класса, а пояснение, почему gid не удалось обработать, например пустой gid (не null) или Не существует или повреждена таблица с idClass(…).
В таблице статистики отображаются колонки:
Класс-ссылка (
sClassRef) — системное имя класса, в объектах которого хранится некорректнаяgid-ссылка;Атрибут-ссылка (
sAttrGidRef) — системное имя атрибута, в котором хранитсяgid-ссылка;Класс-источник (
sClassSource) — системное имя класса, на который указывает значениеgid-ссылки. Если значениеgidне удается сопоставить с существующим классом, в колонке может отображаться пояснение, почемуgidне удалось обработать. Для родительских строк значение не заполняется;Количество нерабочих gid ссылок (
nCount) — количество найденных нарушений для строки статистики.
Детализация показывает конкретные объекты, относящиеся к выбранной строке статистики. Если строка в таблице статистики не выбрана, детализация может быть пустой. Чтобы посмотреть записи с некорректными ссылками, раскройте итоговую строку и выберите строку второго уровня.
В детализации отображаются колонки:
Объект-ссылка (
gidRef) — объект, содержащий некорректнуюgid-ссылку;Код — код объекта;
Наименование — наименование объекта;
Нерабочая gid ссылка (
sGidRef) — сохраненное значение некорректнойgid-ссылки.
Обновление статистики запускается операцией Обновить отчет в фоновом режиме. При запуске операции система очищает текущую статистику и заново заполняет таблицы статистики по некорректным gid-ссылкам. Очистка и заполнение выполняются фоновым заданием Очистка и заполнение статистики по нерабочим gid с системным именем Btk_BrokenGidRefillStat. Задание настроено в менеджере заданий.
Обновление может занимать продолжительное время. После завершения фонового задания отчет отображает данные, собранные при последнем выполнении обновления.
Использование отчета. Для анализа сначала проверьте группы с наибольшим количеством нарушений, затем раскройте нужную строку и выберите класс-источник. После этого в детализации можно посмотреть объекты, содержащие некорректные значения, и использовать эти данные для дальнейшей проверки.
Совет
Администраторам рекомендуется регулярно просматривать отчет, чтобы своевременно выявлять накопление некорректных gid-ссылок.
Разрешение найденных проблем выполняется только с участием программиста, который может подготовить корректный скрипт исправления данных, и проектировщика по соответствующему направлению.
Архитектура#
Агрегированная статистика отчета хранится в классе Btk_BrokenGidStat. В нем хранятся строки дерева статистики: родительские строки соответствуют комбинациям класса и атрибута, в которых обнаружены некорректные gid-ссылки, а дочерние строки распределяют найденные значения по классам-источникам.
Иерархия строк строится через атрибут idParent. Родительская строка является суммарной по отношению к дочерним строкам: значение nCount у родителя равно сумме значений nCount у его дочерних строк. У родительских строк sClassSource имеет значение null.
Детализация хранится в классе Btk_BrokenGidStatDet. Каждая запись детализации соответствует отдельной найденной некорректной gid-ссылке: gidRef указывает на объект, содержащий некорректное значение, а sGidRef хранит само сохраненное значение некорректной gid-ссылки.
Обновление статистики реализовано через операцию refillTable в отображении Btk_BrokenGidStatAvi#Tree. При запуске операции выполняется фоновое задание Очистка и заполнение статистики по нерабочим gid с системным именем Btk_BrokenGidRefillStat. В JEXL-скрипте задания вызывается API-метод Btk_BrokenGidStatApi.refillTable, который очищает и заново формирует статистику отчета.