Form中Block的重新查询
来源:互联网 发布:excel导入数据 编辑:程序博客网 时间:2024/05/20 17:25
Form中某些按钮可能调用了Package对表中某些字段进行更新,但是数据库中字段的修改不会马上反映到form的界面上,所以要进行重新查询,但是用户可能使用了查询窗口进行查询之后然后再点击按钮动作,如果简单的使用execute_query进行查询的话那么就会把原来的查询条件冲掉。所以这里写了一个公用的包进行查询:
procedure query_block(p_block_name varchar2)is l_cursor_block varchar2(50); l_cursor_record number; l_cursor_item varchar2(50); l_trigger_record number; l_default_where varchar2(1000); l_last_query varchar2(2000); l_where_anchor number; l_order_anchor number; l_where_clause varchar2(1000); l_message_level number;begin l_cursor_item := name_in(‘SYSTEM.CURSOR_ITEM’); l_cursor_record := name_in(‘SYSTEM.CURSOR_RECORD’); l_cursor_block := name_in(‘SYSTEM.CURSOR_BLOCK’); l_trigger_record := l_cursor_record; l_message_level := :system.message_level; if l_cursor_block <> p_block_name then l_trigger_record := get_block_property(p_block_name, CURRENT_RECORD); go_block(p_block_name); if name_in(‘SYSTEM.CURSOR_BLOCK’) <> p_block_name then fnd_message.debug(‘DEVELOPER ERROR: To select records ‘|| ‘in another block, you must be able to navigate.’); raise FORM_TRIGGER_FAILURE; end if; end if; l_default_where := get_block_property(p_block_name, DEFAULT_WHERE); l_last_query := get_block_property(p_block_name, LAST_QUERY); //检查是否有Order By语句 if instr(upper(l_last_query), ‘ORDER BY’) = 0 then l_order_anchor := length(l_last_query); else l_order_anchor := instr(upper(l_last_query), ‘ORDER BY’) – 1; end if; if instr(upper(l_last_query), ‘WHERE’) = 0 then l_where_anchor := l_order_anchor – 5; else l_where_anchor := instr(upper(l_last_query), ‘WHERE’) + 1; end if; l_where_clause := substr(l_last_query, l_where_anchor+6, l_order_anchor-l_where_anchor-5); set_block_property(p_block_name,default_where,l_where_clause); :system.message_level := 25; execute_query; :system.message_level := l_message_level; set_block_property(p_block_name,default_where,l_default_where); go_block(p_block_name); go_record(l_trigger_record); go_block(l_cursor_block); go_record(l_cursor_record); go_item(l_cursor_item);end query_block;
程序首先保存当前的block,record以及Item使得在执行完之后光标依然停留在原位置而不会跳来挑去。之后判断当前所在的Block是否和参数传进来的P_Block一致,如果不一致,那么就go到P_Block上,然后获取该Block的Last_Query,由于可能查询带有Order By,所以需要判断是否带有Order By来决定截取的最终位置。取得了where条件之后,通过使用set_block_property(p_block_name,default_where,l_where_clause)以及execute_query对block进行查询,在这之前需要先保存原来的default where,在查询之后将default_where设置为默认的。最后讲光标定位到原位置。
调用的时候输入Block Name,便可以截取到Block的查询条件查询该Block。
- Form中Block的重新查询
- Form中Block的重新查询
- Form中Block的重新查询
- Form开发中Block的顺序
- 重新排布magento block的位置
- Form Block的属性"Precompute Summaries"使用
- dwz dialog中嵌套form查询时的问题
- EBS Form中查询(Query)模式的操作符总结
- 取消form表单中按回车键的查询功能
- FORM 表单的查询方法
- Struts中处理刷新Form重新提交问题
- 用java把从数据库中查询出的结果集重新按照结果中的几个字段重新排序
- 查询block
- 【oracle form】创建Data Block 以及展示用的Canvase
- 关于"Shipping Transactions Form"查询界面中没有显示Additional tab的问题
- 表单form中2个submit2个action 和 hibernateTemplate模糊查询/多条件组合复合随机查询的写法
- FORM执行查询的各种方法
- ofbiz的form查询功能关键代码
- CSRF原理、测试方法(续)
- C++深入体验之旅三:分支结构
- C语言实现C++多态
- eclipse+maven+tomcat 开发web项目
- Instrumentation 功能介绍(javaagent)
- Form中Block的重新查询
- HTML5实现视频播放
- 抽取网页中的主要内容
- 给11gR2 RAC添加LISTENER监听器并静态注册
- myeclipse非正常关闭,“Package Explorer”非正常显示,出现错误“Could not create the view: An unexpected exception was t
- [ VIM ] vim高级进阶(替换/正则)!
- Oracle ROWID
- zoj 3683 模拟
- chapter 8 Compilation, Execution, and Errors