Form Builder开发中的校验(Validation)逻辑
关于校验(Validation)
Oracle Form校验item来保证item符合它应遵守的规则。触发器可以实现额外的校验。
验证单元(Validation unit)
一个form的验证单元属性控制form中验证粒度.验证单元可以是一个item,record,block或者form.大多数Oracle Forms应用在Item层次进行校验。
什么时候进行校验
Oracle Forms在以下情况下进行校验:
l Oracle Forms 导航出验证单元.这个在终端用户按下某一功能键或者在验证单元外点击鼠标,或者触发器执行某一内置函数。
l 触发器调用内置的ENTER函数,或者终端用户按下[Enter]。
l 触发器调用内置的COMMIT_FORM函数,或者终端用户按下[Commit].在这种情况下,OracleForms 验证form不论当前的验证单元是什么。
l 触发器调用内置的VALIDATE函数。
Oracle Forms不在’输入查询’(Enter-Query)模式下进行验证.这样就允许终端用户输入OracleForms认为无效的查询条件。
验证是如何进行的
在Oracle Forms内部维护了每个Item, record, block和form的状态。为了验证的目的,每个潜在的验证单元都一个具有以下两个值的验证状态:
l 有效(valid)
l 未验证的(Unvalidated)
有效(Valid)状态意味着Oracle Forms不需要检查当前的验证单元。没验证过的(Unvalidated)状态,是内部称为’New’和’Changed’的状态组合,意味着Oracle Forms需要校验验证单元里的items。New和Changed的不同仅仅在校验过程中稍有不同(请参考table中的记录项所遵守的note)。
当验证失败的时候就会出现第三种状态,但在这种情况下Oracle Forms不会继续处理直到这种情况被更正了,所有失败的状态下是不会进入校验流程的。
Oracle Forms通过下面其中的一种来校验一个验证单元:
Item 如果item的状态是有效的,那么校验流程就停止了.如果状态是未验证的,Oracle Forms执行标准的校验检查,然后出发WHEN-VALIDATE-ITEM触发器(请参考Defer Required Enforcement property.)
Record 如果record的状态是有效的,那么校验流程就停止了。如果状态是未验证的,Oracle Forms就会校验record里面的每个item,然后触发WHEN-VALIDATE-RECORD触发器.