`

Form中Block的重新查询

Go 
阅读更多

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。

分享到:
评论

相关推荐

    Oracle EBS Form开发小技巧汇总

    Form中Block的重新查询 9 客户化Form中实现行号功能 12 使用Custom.pll修改标准Form的LOV 16 实现主从关系Form中汇总行金额/数量 21 Oracle EBS客户化程序中格式化金额 25 Form中动态创建PopList 28 Oracle EBS环境...

    FORM 开发中FOLDER(文件夹)的使用

    oracle form 的文件夹功能的开发教程,使您能够在简短的时间内学会文件夹的开发。

    FormBuilder介绍培训资料.pptx

    都要指定 Property Class Name 作法相同, 但不同的 Object 选不同的 Class Data Block 较重要的 Property Data 是否可查询 查询 Data 的 Where 及 Order by 可写在此处 是否可新增/删除/修改 Data Windows Name 建议...

    SUPTOOL CONV - Convert HEX DUMP or BLOCKDUMP to readable form (Doc ID 47419.1)

    SUPTOOL CONV - Convert HEX DUMP or BLOCKDUMP to readable form (Doc ID 47419.1)

    community_form

    This is a fork of the official concrete5 form block. The idea is to improve the form block with collaboration from the wider c5 community.

    固定边界矩阵牛顿潮流并行算法

    固定边界矩阵牛顿潮流并行算法,万黎,陈允平,该文对电力系统潮流分块并行算法进行了分析,指出基于BBDF(Bordered Block Diagram Form)分块的牛顿潮流的计算瓶颈在与协调量计算过大。�

    drupal-custom-contact-form-block:自定义 Drupal 模块以在块内提供自定义联系表单

    Drupal 自定义联系表单块 我需要一个带有一些自定义字段的联系表单。 我需要它作为一个模块,以便轻松地将... 这里是。 下载、解压、自定义表单代码、添加收件人 启用、放置块、测试 要开心 做一些翻译功能(.pot?)

    antd Form组件行并列显示 Form表单属性为inline时,表单组件宽度问题

    Form标签 layout属性设置为’inline’ 时 下拉组件宽度没有自适应: // 方法1:用Row + Col 定义自己需要的宽度,把layout属性设置为'horizontal', const formLayout = { labelCol: { span: 4 }, wrapperCol: { ...

    全面解析Bootstrap中form、navbar的使用方法

    2、Form-group/form-control/input-group/form-static-control之类的容器,分为两种显示方式:block、inline-block。而实现input-group水平用的是table-cell。 .input-group { display: inline-table; vertical-...

    laravel-jquery-form-errors:在HTML中显示Laravel表单错误

    它假定您在表单中使用.form-group类对表单控件进行分组,并且在要验证的表单控件之后有一个.help-block.text-danger元素。 提交表单并出现错误后,您只需要触发表单,文档或正文中的自定义laravel.form-errors事件...

    在Django的form中使用CSS进行设计的方法

    修改form的显示的最快捷的方式是使用CSS。 尤其是错误列表,可以增强视觉效果。自动生成的错误列表精确的使用“ ”errorlist”&gt;“,这样,我们就可以针对它们使用CSS。 下面的CSS让错误更加醒目了: &lt;style type...

    bootstrap自适应电脑手机端后台登录界面代码.zip

    &lt;button class="btn btn-lg btn-warning btn-block" type="submit"&gt;登录 &lt;input type="checkbox" value="remember-me"&gt; 记住我 &lt;/form&gt; ; font:normal 14px/24px 'MicroSoft YaHei';"&gt;  ...

    display:inline-block的使用示例

    建立一个宽度很长的一个页面,里面包含许多列,外面的div块的宽度不能确定,若是外面的div块的宽度不够 就会导致部分子div块移动到下面的一行,下面与大家分享下display:inline-block的使用示例

    secure.contactform.perl:您网站的 PGP 联系表格

    打开send_form.perl文件并将第 6 行中的替换为您希望接收消息的电子邮件地址。 打开contact.html文件并在第 90 行-----BEGIN PGP PUBLIC KEY BLOCK----- 中替换为您的 PGP 公共密钥。 将所有文件上传到服务器到 ...

    block-app-time-form:ReactJS表单,用于收集时间输入,然后通过HTTP请求发布值

    更好的方法是使用类似于Android和iOS本机中的时间选择器的时间选择器界面。 此表单的预期用例是供用户打开此页面作为Web视图以选择时间。 选择时间后,页面将向您选择的端点发出HTTP请求以更新用户状态。 然后应该...

    HTML默认样式表CSS属性除了inline和block的定义

    除了inline和block的定义,主要是要注意 body|h1~h6|blockquote|menu|ul|ol|dd等标签的默认样式(margin和font-size)。这个东 西在你需要还原默认值的时候,比较有用。 详见下面的内容: 复制代码代码如下: html,...

    LayuiForm表单.txt

    form表单元素包括:text 文本输入框,password密码输入框,checkbox复选框,radio单选框,file 文件域,submit表单提交action指向的文件,reset表单清空,image图片提交按钮,button按钮,hidden隐藏域。 select ...

    对layui中表单元素的使用详解

    &lt;div class=layui-input-block&gt; &lt;input type=radio name=sex value=0 title=男&gt; ,class属性是固定写法。 这样写好了以后,你如果是写在静态页面,这样式可以看见效果,如果写在js里,这样写了还有一步得写,...

    俄罗斯方块 c#源程序

    这程序主要的类有Square,Block,GameField,Form.每一个方块(Block)有四个小的Square组成。Square类拥有位置,颜色,大小属性,实现了画小方块和擦方块等方法;Block定义方块的形状,旋转方向等属性,并实现了方块下落...

    secure.contactform.php:您的网站在 php 中的 PGP 联系表

    打开contact.html文件并在第 90 行-----BEGIN PGP PUBLIC KEY BLOCK----- 中替换为您的 PGP 公共密钥。 将所有文件上传到安装了 PHP mail() 扩展的服务器以供使用。演示查看安全联系表。麻省理工学院执照

Global site tag (gtag.js) - Google Analytics