Powerbuilder: как написать проверочное выражение для поля - PullRequest
1 голос
/ 15 июля 2010

У меня есть окно данных, содержащее несколько полей. Я хочу написать проверочное выражение для поля с именем amount. У меня есть еще два поля с именами debit и credit. Если сумма дебета и кредита превышает сумму, я хочу показать пользователю сообщение для проверки.

Как я могу написать требуемое выражение проверки в Спецификации столбца этого окна данных?

Я также хочу написать проверочное выражение для поля с именем test. Есть поле с именем criteria. Когда это поле установлено в 1, я хочу, чтобы тестовое поле было обязательным. Как я могу написать проверочное выражение для этого?

1 Ответ

3 голосов
/ 15 июля 2010

Есть разные способы сделать это, в зависимости от того, нужно ли вам использовать требуемое выражение проверки столбца или у вас есть лицензия, чтобы делать это по-разному.

Особенности проектирования

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

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

Я ожидаю, что здесь вы получите несколько разных ответов, но я предпочитаю использовать выражения спецификации столбца только для простых проверок, потому что:

  • Сложная логика становится трудной для чтения и поддержки
  • Если вы проверяете несколько состояний ошибки, это может привести к некоторым громоздким сообщениям, если вы используете встроенное поле сообщения об ошибке спецификации столбца

Тем не менее, я допускаю, что выражения dw обычно очень быстрые.

Использование вычисляемого поля для правил проверки

Один альтернативный метод также является быстродействующим и может использоваться в большинстве версий PB.

  • Иметь вычисляемое поле в окне данных с осмысленным именем, например cf_amount_rule, и что-то вроде этого в выражении: if (debit + credit = amount, 0, 1)
  • Сделайте это поле невидимым для пользователя, если хотите
  • Добавьте еще одно вычисляемое поле в нижний колонтитул к сумме cf_amount_rule, и теперь у вас есть удобная контрольная точка, которая быстро сообщает вам, когда возникает ошибка
  • Во время сохранения (или события pfc_validation для пользователей PFC) вы можете проверить сумму> 0 и отправить сообщение об ошибке

ОО-пуристы могут предположить, что неправильно помещать логику в окно данных, и если вы обнаружите, что вводите одно и то же правило в несколько окон данных, это, безусловно, запах кода. Но для простых правил, которые вряд ли изменятся, я обнаружил, что окно данных очень эффективно выполняет эти правила и избавляет вас от необходимости писать много кода в другом месте.

Дополнительные вкусности

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