我一直对form 都感觉比较困惑, 特别是form 里面的trigger, 像PRE-QUERY, POST-QUERY 一直都弄不清情况. 这个trigger 是什么时候触发的呢? 看名字知道在QUERY 之前或之后触发的. 那么QUERY 什么呢? 搞不清楚.
今天就看下代码, 弄明白点了 "find" 之后做了什么事情, 那些数据库里面的值怎么到form 界面上去的.
我们知道, 每一个form 上的数据块都是绑定一个table 或者 view 的. EBS绑定的都是 view. 像下面那样:
我们可以认为, 一个数据块就是一个view. 而数据块上的字段, 通常也和view 里面的字段一一对应. 注意, 这里说的是通常. 在我们刚开始学习做form 的时候, 选择一个view, 然后把view 里面的字段一一对应于数据块的字段, 这样编译运行的时候, 在form 界面菜单上 view -> query by -> run, 就可以直接做查询的动作, 在form 界面上就会显示出数据库的记录.
这里就做了一次QUERY 的动作, 查询数据库, 然后把记录的值填到对应的 field 里面去.
但是这样的逻辑是简单的, 没有办法应付EBS 复杂的业务逻辑. 因此在实际的做法中, 并没有用这样简单直接的方式. 我们去看EBS 里面的form, 数据库上的字段和view 里面的字段几乎没有对应关系. 似乎是两个不相关连的东西, 只是名字很像.
这样做的结果就是几乎所有的行为都要自己写代码实现. 不能像上面那样点下查询, 然后所有的值自动显示在界面上了. 由于缺少数据库与界面字段的关联, 即使查询了数据库, 也要手动把值复制给界面上的字段.
我们以 Receipts 界面为例, 看看点下"find" 都做了哪些事情.
1. 首先为了简化问题, 我们这里只考虑