На информационном ресурсе применяются рекомендательные технологии (информационные технологии предоставления информации на основе сбора, систематизации и анализа сведений, относящихся к предпочтениям пользователей сети "Интернет", находящихся на территории Российской Федерации)

Усовершенствованные вычисления и проверка правильности (Enhanced Calculation and Validation, by Steve Muench ). Часть 3

Ограничение зависимых значений

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

  Это  правило  применимо только в  том  случае,  когда  и комиссионное  вознаграждение,  и  зарплата  имеют  непустое  (non-null)  значение, и оно должно заново вычисляться после каждого  изменения комиссионного вознаграждения или зарплаты.  Усовершенствованное  правило  верификации  Compare  в  Oracle JDeveloper 11g  делает  реализацию этой проверки  очень простой.

На  странице General  редактора  Entity  Object  Editor  для  Emp перейдите в раздел Validation Rules и снова щелкните  кнопкой Add Validation Rule. В диалоговом окне Add Validation Rule выберите Compare Validator из списка Rule Types.  В закладке Rule Definition выберите Comm из списка At- tribute и Less Than из списка Operator. Из списка Compare  With выберите Entity Attribute и выберите  атрибут Sal в  размещенном ниже поле Select Entity Attribute. Эти шаги  настраивают основное сравнение в правиле верификации.  Затем  в  закладке  Validation  Execution  введите  формулу  Sal!  =null  &&  Comm!  =null  в  поле  Conditional  Execution Expression. Это поле становится причиной того, что  правило применяется только в том случае, если истинно  указанное в этом поле условие. Обратите внимание, что  при  вычислении  истинности  выражения  учитывается  регистр,  так что  убедитесь, что напечатано Comm, а не  comm.  Затем  перейдите  в  раздел  Triggering  Attributes,  выберите Sal из списка Available Attributes и кликните по  кнопке Add  (стрелка  вправо),  чтобы  переместить  Sal  в  список <,/span>Selected Attribute,  а  затем  проделайте  то  же самое для атрибута Comm. Если во время выполнения  значение любого из этих атрибутов изменится, значение правила будет вычислено заново.

Наконец, перейдите в закладку Failure Handling и введите  в  поле  Message  Text  следующее  сообщение  об  ошибке  проверки достоверности:

The {attr1} of {val} must be less than the {attr2}. 

Убедитесь, что три выражения с сообщениями заключены  в  фигурные  скобки.  В  находящейся  ниже  таблице  Error Message Expressions кликните по строке для лексемы  attr1  и  дважды  кликните  по  ячейке  Expression  в  этой  строке. Введите выражение source.hints.Comm.label, чтобы  сослаться  на  значение  удобной для  пользователя  метки  показа для атрибута Comm исходного объекта-сущности.  Точно так же введите выражение source.hints.Sal.label для  лексемы  сообщения  attr2  и  введите  выражение  Comm  для  лексемы val, чтобы сослаться  на значение атрибута  Comm. Эти выражения c сообщениями, так же, как и те,  которые использовались в приводившемся выше примере  с  вычисляемыми  атрибутами,  используют  синтаксис  языка Groovy. Хотя это очень простые выражения, важно  понять, что в случае необходимости разработчики могут  использовать всю мощь Groovy. Для завершения кликните  по OK, чтобы определить новое правило.

Снова  выполните  HRModule,  чтобы  протестировать  правило.  Попробуйте  ввести  для  комиссионного  вознаграждения  существующего  служащего  значение  13000.  Когда  вы  зафиксируете  транзакцию,  должно  появиться  параметризованное  сообщение  об  ошибке  “Комиссионное  вознаграждение  13  000  должно  быть  меньше  зарплаты”.  Если  вы  измените  только  значение  зарплаты  служащего  (не  изменяя  комиссионного  вознаграждения), можно проверить, что не будет никакого  исключительного состояния, потому что значение Comm – пустое. Наконец, изменяя зарплату служащего до меньшего  значения, чем имеющееся комиссионное вознаграждение  этого  человека,  можно  проверить,  что  инициирование  атрибутов срабатывает должным образом.

Картина дня

наверх