Проверка достоверности внешних ключей
В предыдущей посвященной инфраструктурам колонке (сентябрь/октябрь 2007 г.) шла речь о том, как определить декларативные списки значений (LOV) для атрибута объекта отображаемого элемента, чтобы помочь пользователям, выбирающим поисковые значения для существующих внешних ключей.
Имейте в виду, что хотя эти LOV удобны для конечных пользователей, они не являются заменой настоящей проверки правильности внешнего ключа на уровне объекта-сущности. Например, некоторые компоненты UI, скажем, текстовые поля со всплывающими LOV, позволяют пользователю непосредственно вводить значение внешнего ключа. Кроме того, в сервис-ориентированной архитектуре внешние ключи в объектах-сущностях могут быть программно установлены другим приложением при помощи интерфейса Web-сервисов. К счастью, новое правило проверки Key Exists облегчает верификацию атрибутов внешнего ключа, быстро делая ту работу, которая раньше была обычной рутинной работой программирования.В следующем примере правило верификации Key Exists добавляется к объекту-сущности Emp в Model project. На странице General редактора Entity Object Editor кликните кнопкой Add Validation Rule по зеленому знаку “плюс” справа от заголовка страницы Validation Rules (на мониторах меньшего размера вам, возможно, придется пролистать вниз, чтобы увидеть этот раздел). В диалоговом окне Add Validation Rule выберите Key Exists Validator из списка Rule Types. Находясь в закладке Rule Definition, выберите WorksInDeptAssoc из списка Association Name. Этот выбор обозначает ассоциацию “один ко многим” между Dept и объектом-сущностью Emp, которая представляет подлежащее верификации отношение внешнего ключа. Затем в закладке Failure Handling введите в поле Message Text сообщение об ошибке Department not exist. И, наконец, кликните по OK, чтобы определить новое правило проверки.
Выполните снова HRModule и измените значение идентификатора отдела для существующего служащего на любое недопустимое двузначное число (скажем, 99). Когда вы зафиксируете транзакцию или просто переместитесь к другой строке, будет возбуждена исключительная ситуация с заказанным вами сообщением об ошибке.