Обязательность полей типа AttributeExternalKey. Нюансы

Добрый день, коллеги!
Столкнулся с таким нюансом.
Есть задача сделать поле “Расположение” (класс location_id) обязательным.

В системном datamodel.itop-config-mgmt.xml данное поле прописано в классах PhysicalDevice и Person.
Пробовал менять обязательность заполнения поля “Расположение” как через системный datamodel.itop-config-mgmt.xml, указывая в тегах <is_null_allowed>false</is_null_allowed>


, так и через кастомный модуль (через _delta=redefine, т.к. остальные методы не дают результата):

Но в каждом из этих случаев происходит следующее:
как только я делаю поле “Расположение” обязательным, все предыдущие записи всех модулей (например, модуля сервер) пропадают:


Подскажите, пожалуйста, что я делаю не так?
Как возможно сделать поле “Расположение” обязательным чтобы при этом ни одна из предыдущих записей в других модулях не пропала?

Есть какие-то мысли по этому поводу?
Перепробовал все варианты. Если делаю поле location_id обязательным - доступ к предыдущим сохраненным записям пропадает.

Неужели нет варианта, который бы позволил сделать поле обязательным без последствий для текущих данных?

Так же, пробовал создать новое кастомное поле location2_id, чтобы использовать его вместо системного.
Но ситуация аналогичная: как только делаю поле location2_id обязательным - доступ к текущим записям пропадает. Не понимаю где здесь взаимосвязь.
Коллеги, помогите, плз.

Другие доработки PhysicalDevice есть в системе?

Других доработок по данному классу нет.

Возможно еще эта информация поможет понять:
замечено, что если через класс “Server” добавить обязательное кастомное поле “location2_id”:

то записи из КЕ Server не пропадают:

НО при попытке просмотра любой из записей вижу сообщение “Извните, этот объект не существует (или вы не можете его видеть).” (“Sorry, this object does not exist (or you are not allowed to view it”):
image

При этом, если создать новую запись, то она доступна для просмотра и проблем с ней нет.

Затем ради интереса я пробую сделать полe location2_id не обязательным, чтобы проверить будет ли работать это в обратную сторону: т.е. станет ли новая запись недоступна, а остальные (старые) записи доступными.

Результат: после того как поле location2_id делаю не обязательным, все записи (и старые и новая) доступны для просмотра и никаких проблем нет.

Добрый день, эту ситуацию мы решили, указав значения в объектах где не указан этот атрибут до обновления datamodel

Sjai, спасибо за ответ.
Но я не совсем понял какие значения и в каких объектах Вы указали.
Можете подробнее описать на моем примере для поля location_id (либо на другом аналогичном поле такого же типа) что и где Вы бы прописали для решения данного вопроса?

Вашем случивший перед обновлением, нужно во всех серверах указать location_id

1 лайк

Спасибо большое за помощь в решении!
Так как обязательных полей с типом AttributeExtermalKey мне надо было сделать штук 6-7, прошелся по всем записям всех КЕ и проставил искусственное значение “по-умолчанию”, созданное для всех вариантов полей предварительно.
После этого скомпилил кастомный модуль, изменяющий обязательность полей, и все заработало корректно.

Имхо, было бы удобно, если бы такие значения “по-умолчанию” генерились автоматом, если вдруг их отсутствие вызывает проблемы.
Ведь ситуации, когда данные (много данных) уже занесены, а изменения в логику вносятся позже.

Это похоже на баг. Я завёл тикет разработчикам по этой теме, посмотрим, что скажут.

1 лайк

Ответ в двух словах: это не баг, заполняйте все поля, если делаете их обязательными. Выявить эти и другие проблемы помогает DB Tools: https://store.itophub.io/en_US/products/combodo-db-tools.

Владимир, спасибо!
Логично, что это не баг по факту.
Но это совсем не логично с т.з. юзабилити.
В большой компании, где различные данные заводят разные сотрудники, нереально заранее знать что где должно быть заполнено. Собственно, поэтому и приходится писать что-то по-умолчанию в эти поля, чтобы в последствии нужный сотрудник увидел это и заполнил.
Хотя не факт, что он это сделает, ведь данные уже вбиты и система не выдаст предупреждения :slight_smile:

Я прекрасно понимаю вашу боль))
Вот тикет, можно посмотреть мотивацию разработчиков: https://sourceforge.net/p/itop/tickets/1755/.

1 лайк