oracle ebs 工作心得(3)

2019-03-15 20:47

然后 我修改第3行的 采购单价 99 为100 画面如下:

(之前我错误的认为 每次 on_lock之后 记录都自动解锁了 认为是form自动维护的 此为错误的想法 只要执行了 on_lock 里面锁定的记录 并不会被解锁 此我通过如下验证, 上面我把 第3行的99 改为100 时 form执行了 onlock(里面有锁此记录) 然后 我在外面执行update cux_porder_lines_syb set goods_price=88 where line_id=72;(此语句试图修改第3行 ) 然后 此sql语句阻塞(被form里的onlock锁定了) 所以 即证明我之前的认识是错误的 )

然后我在外面用sql语句手动修改 头表的订单名称 语句为:

update cux_porder_heads_syb set order_name='song买衣服' where order_id=1; commit; 此语句 把

改为 song买衣服

然后我们再保存form(之前我们把第3行的 采购单价 99 修改为100了) 截图如下:

此时 我们发现 第三行的修改成功了 但是 我们在外面用sql 修改的头块的订单名称没变 这是因为我们没有查询出最新的数据库信息 现在我们查出 如下画面:

结论:根据上面演示 我们发现 如果 有人 在修改 行表 form的设计(或我们的现有代码)允许去操作头表 我觉得这会带来 很多很多问题 特别是 多用户环境下使用时 会导致系统数据崩溃

举例如下:我们知道 删除头记录的时候 如果有行记录 就不允许删除

所以我假设 现在有 一条头记录a 没有行记录 现在某一用户甲 正在对a记录 插入对应的行记录 而此时 另一用户乙 也查询出了头记录a 此时 数据库里 还没有a对应的的行记录 现在乙删除头记录a 他成功了 现在甲要插入的行记录b也输入完毕 点击保存 并也他也成功了 当他再去重新查询头的a记录时 已经找不到了 我们知道此时 数据库里已经没有a记录 而 行记录b存在于数据库 但是他却称了“没爹的孩子” 根据我们的form设计 我们在form上是查不到b的 并且我们也一般认定 没有头记录的行记录 一般是无效的 或者错误的 一般不处理这样的行记录 作废处理 这只是我举的一个例子而已 相应带来的问题还会很多 提议:

分各种情况分析:

新增头块记录:不锁任何记录(不可虑其他特殊情况等等)下同。 修改头记录:锁定对应头记录(现在的form里已经有这个)。 删除头记录:锁定对应头记录(现在的form里已经有这个)。

新增行记录:锁定对应头记录 (失败则不允许新增)。

修改行记录:先去锁定对应头记录,再去锁定对应行记录(后者现在的forms里已经考虑了这个)。

删除行记录:先去锁定对应头记录,再去锁定对应行记录(后者现在的forms里已经考虑了这个)。

比如我们照上面的做了, 现在再对行进行修改,删除,或者 新增 (我们已经锁了对应的表头) ,当如果有其他用户打开了同一画面 的相同数据 正去试图修改头记录 他将被告知“资料正在被别人使用” 然后禁止他修改。其实 观点很简单,就是像这样的头行结构 一对多的关系 同1个画面(即头记录相同) 我们在同1时刻理应只允许有一个用户 修改 而我们现在系统好像 允许 同时有2个用户在修改,一个修改头记录 另一个修改行 这样的“并发操作”应该是不应该被允许的

疑问: on_lock 报错 在块的onlock事件中写 fnd_message.debug(‘ abc’) 当是中文字触发 on_lock触发器时 程序会瘫痪 不加fnd_message.debug(‘ abc’) 中文字触发是不会瘫痪的

On_lock 在第一次修改界面上的值时触发 紧接着当前那次的修改 后面的改变界面上的值不会再触发 因为 已经锁过了 如果成功 其他人是不可能再修改的 就无需再去判断 是否界面上的值和数据库里的值一致了。

在form中删除记录时也会触发 on_lock

按F11 触发的触发器:

(1)WHEN-CLEAR-BLOCK

(2)WHEN-NEW-RECORD-INSTANCE

(3)WHEN-NEW-ITEM-INSTANCE 理解:

假设有如下画面:

下面我们按F11查询头块: 画面变成:

它清空了头块的记录:所以它执行了WHEN-CLEAR-BLOCK

它新建了一条记录 所以它执行了 WHEN-NEW-RECORD-INSTANCE

光标进入了订单编号 所以 它应该执行了 WHEN-NEW-ITEM-INSTANCE

Bell; 可以发出一个提示音

删除一条记录时:

(1)ON-LOCK

(2)WHEN-REMOVE-RECORD (3)KEY-DELREC

(4)WHEN-NEW-RECORD-INSTANCE

(5)WHEN-NEW-ITEM-INSTANCE

首先 按照惯例 还是会去on-lock 记录 完成 锁定 和 数据库数据的对比 如果和数据库的数据一致 则锁定成功 否则 锁定失败

然后移除记录 然后会新建一个记录实例 光标会进入到某一项 即会触发 WHEN-NEW-ITEM-INSTANCE

此处的WHEN-NEW-ITEM-INSTANCE 是项级触发器

按CRRL+F11执行查询时:

(1)WHEN-CLEAR-BLOCK (2)PRE-QUERY

(3)WHEN-CLEAR-BLOCK

(4)POST-QUERY(每查一条记录,触发一次)

(5)WHEN-NEW-RECORD-INSTANCE (6)WHEN-NEW-ITEM-INSTANCE

POST-QUERY每查一条记录,触发一次 然后再查下一条 在form上看到的效果是 显示出一条 然后 执行POST-QUERY 然后再显示一条 再POST-QUERY… …

如下图所示:

点击确定后:

从查询状态(F11)转为输入状态(F4)时:

(1)WHEN-CLEAR-BLOCK (2)KEY-EXIT

(3)WHEN-NEW-RECORD-INSTANCE (4)WHEN-NEW-ITEM-INSTANCE 理解:先清除 再退出查询状态 然后 新建一个记录 和进入第一个可导航的项时新建项实例

手电筒查询过程:

(1)QUERY_FIND(BLOCK级)

输入查询条件后,点击“查询”按钮: (2)WHEN-CLEAR-BLOCK (3)PRE-QUERY

(4)WHEN-CLEAR-BLOCK (5)POST-QUERY

(6)WHEN-NEW-RECORD-INSTANCE (7)WHEN-NEW-ITEM-INSTANCE

点击“New”时:

(1)WHEN-NEW-RECORD-INSTANCE (2)WHEN-NEW-ITEM-INSTANCE

点击F4关闭时:

(1)KEY-EXIT (2)POST-FORM

17.点击“Close Form”按钮关闭时:


oracle ebs 工作心得(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:地暖施工须知以及验收时的注意事项

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: