Assets · Cloud

Assets Cloud: находим объекты с незаполненным атрибутом через AQL

Учебный аудит качества данных: отличаем пустой атрибут от текста EMPTY, проверяем четыре объекта и составное условие без массового изменения реестра.

Применимость: Cloud. Названия пунктов и доступность функций зависят от версии, плана и типа проекта. Проверяйте изменения на тестовом окружении. Описанные рабочие процедуры — предлагаемый подход, а не гарантии поставщика.

Задача и область проверки

В реестре сервисов нужно найти объекты без кода поддержки, чтобы владелец данных мог проверить их вручную. Простой поиск по слову EMPTY для этого не подходит: текстовое значение и отсутствие значения — разные состояния. Сначала построим небольшую проверяемую выборку, затем решим, можно ли использовать её для рабочего аудита.

Инструкция относится к Assets в Cloud и поиску Advanced AQL по объектам схемы. Она не описывает JQL задач Jira, поиск Data Manager или запрос к REST API. Для Assets Data Center используйте документацию своей установленной версии. Названия разделов и доступность отдельных функций могут отличаться в вашем облачном интерфейсе.

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

Уточните схему, тип и техническое имя атрибута

Выберите отдельную учебную схему и тип объекта с необязательным текстовым атрибутом для одного значения. В примерах техническое имя типа — PilotService, атрибута — SupportCode. Если в вашей схеме имена другие, замените их во всех запросах. Не меняйте рабочую модель только ради совпадения с инструкцией.

Проверьте конфигурацию атрибута: это должен быть обычный Text, а не ссылка на объект, пользователь, Select или многозначный набор. У них отличаются данные и подходящие проверки. Запишите технические имена и отображаемые подписи. В интерфейсах, где доступны Name и Display name, для AQL нужен Name, а не предположение по подписи.

Нужны права на просмотр выбранной схемы и объектов. Для подготовки учебных значений потребуются соответствующие права редактирования, но проверяющему читателю их выдавать не нужно. Сравнивайте результаты под заранее указанной учётной записью: недоступный объект не равен объекту с пустым атрибутом.

Подготовьте четыре объекта и исходный список

Создайте либо выделите четыре безопасных учебных объекта одного типа. Назовём их A, B, C и D, но в протокол запишите реальные ключи из карточек. У A задайте SupportCode равным OPS, у B — SRE, у C оставьте атрибут незаполненным, у D сохраните буквальный текст EMPTY.

Откройте каждую карточку и сверьте фактическое содержимое. Для C не вводите пробел, дефис, слово null или слово EMPTY: всё это может оказаться текстовым значением. Для D, наоборот, требуется настоящий сохранённый текст. Именно этот отрицательный контроль покажет, что запрос различает данные и оператор.

Внутри схемы выберите Objects нужного типа, затем Filter → Advanced AQL. По документации результаты этого интерфейса дополнительно ограничиваются текущим типом объекта. Запишите выбранный тип и очистите лишние фильтры. Выполните исходный запрос и убедитесь, что в учебной области есть все четыре ключа.

objectType = "PilotService"

Найдите отсутствие значения

Для поиска незаполненного атрибута используйте IS EMPTY без кавычек вокруг EMPTY. Ожидаемый результат на подготовленном наборе — только объект C. Откройте найденную карточку и проверьте атрибут вручную. Не принимайте совпадение количества за достаточную проверку: важно получить нужный ключ.

Затем выполните противоположную проверку IS NOT EMPTY. В нашем учебном наборе ожидаются A, B и D. Такая пара запросов помогает обнаружить ошибку подготовки: если D не найден как заполненный, проверьте, сохранили ли в нём текст, а не просто оставили подсказку в редакторе.

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

objectType = "PilotService" AND "SupportCode" IS EMPTY

objectType = "PilotService" AND "SupportCode" IS NOT EMPTY

Отделите слово EMPTY от пустого атрибута

Теперь найдите объект с текстом EMPTY через обычное равенство строке. Ожидается D, а не C. Кавычки здесь обозначают строковое значение. Сохраните результаты рядом с предыдущим запросом: это небольшая проверка, которую удобно передать редактору реестра без объяснения сложной модели.

Не заменяйте все пустые атрибуты словом EMPTY для удобства отчёта. После такой замены вы потеряете различие между отсутствующим кодом и намеренно записанной строкой. Если бизнес-процессу нужен статус «не назначен», его следует отдельно описать в модели данных и процедуре заполнения.

Поиск по подписи объекта в общей строке поиска и AQL по атрибуту решают разные задачи. Когда проверяете заполненность конкретного свойства, выполняйте запрос в нужной схеме и фиксируйте полный текст условия. Один и тот же видимый список может получиться из разных фильтров.

objectType = "PilotService" AND "SupportCode" = "EMPTY"

Соберите условие с OR и сохраните границу

Предположим, для отдельного обзора нужны сервисы с кодом OPS и сервисы без кода. Соедините два случая через OR и заключите их в скобки после ограничения типа. На учебном наборе ожидаются A и C. B с кодом SRE и D с текстом EMPTY не должны войти в результат.

Скобки делают границу запроса явной: требование к типу относится к обоим вариантам. Не используйте текст ниже как универсальный запрос для всех схем. Сначала замените имена, проверьте контрольные ключи и запишите, какая схема выбрана. Текущий интерфейс также может предварительно ограничивать результаты выбранным типом и маскировать ошибку более широкого выражения.

Перед переносом условия в поле Jira, отчёт или автоматизацию заново проверьте контекст его исполнения. Результат интерактивного поиска не доказывает, что другой компонент использует ту же область и те же права. В рамках этого пилота запрос остаётся ручным средством аудита.

objectType = "PilotService"
AND ("SupportCode" = "OPS" OR "SupportCode" IS EMPTY)

Разберите неполную выборку до исправлений

Если C открывается по ключу, но отсутствует в результате, сначала сравните сохранённое значение с ожиданием и выбранную область поиска. Проверьте, не осталось ли дополнительного ограничения интерфейса. Если объект не открывается, разбирайте доступ с владельцем схемы, а не считайте это подтверждением удаления.

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

Для каждой строки рабочего аудита определите владельца проверки. Отсутствие кода может означать ошибку импорта, незавершённое заполнение или допустимое исключение. Запрос выявляет состояние, но не определяет бизнес-решение. Импорт и удаление объектов не нужны, чтобы подтвердить четыре контрольных результата.

Откат и приёмка аудита

После проверки очистите временный фильтр или верните сохранённый исходный запрос. Сам AQL-поиск не записывает значения, поэтому откат объектов после чтения не требуется. Если для пилота меняли существующие тестовые объекты, восстановите их исходное содержимое по протоколу.

Учебные объекты и схемы удаляйте только по принятому порядку и после проверки зависимостей; рабочую схему ради завершения эксперимента не трогайте. Если сохраняете запрос для повторного использования, укажите схему, тип, назначение и владельца. Не называйте такой запрос полным реестром без отдельной проверки области и доступа.

Приёмка состоит из четырёх подтверждений: IS EMPTY находит C, IS NOT EMPTY — A/B/D, равенство строке EMPTY — D, составное условие — A/C. Сохраните фактические ключи и результаты. Исправления реальных данных планируются после этого аудита с собственным журналом изменений и возвратом.

Официальная документация

Применить это к вашей системе

Обсудим контекст, ограничения и безопасный порядок изменений.

Обсудить задачу