在 Oracle Forms 10g 中使用 LOV 值过滤数据块

Filter Data block with a LOV value in Oracle Forms 10g

我需要从名为“PRODUCTS”的数据块中实现一个简单的产品表单。

产品通过字段“COMPANIES_PARTNERS_ID”与 "Partner" 相关。

此字段将由 LOV 代表 select 我们要为其可视化您的产品的合作伙伴。

如果当前 select 没有合作伙伴,则应显示您的所有产品。当合作伙伴 selected 时,应该只显示他们的产品。

表单将如下所示:

搜索字段右侧的按钮应显示 LOV 并启动查询。当我按下按钮时,我尝试将以下代码作为 "Smart Trigger" 。但它根本不起作用。 LOV 列表出现两次,当没有合作伙伴被 selected 时,没有产品出现。

有人可以帮我实现这个功能吗?谢谢

一旦您进入查询模式(ENTER_QUERY 所做的),进一步的处理将停止,直到您执行查询。

我假设您已经正确创建了 LoV - 最常用的方法是先创建记录组查询,然后基于它创建 LoV。

因此,我会 ENTER_QUERYWHEN-NEW-FORM-INSTANCE 触发并让您当前的按钮显示 LoV 并让用户 select 将值输入 "Companies Partners ID" 项目。执行查询(通过按相应的工具栏按钮、快捷键 (F8?) 或您的新 "Execute query" 按钮)实际上会 执行查询 。如果正确创建 master-detail 关系(使用数据块向导是最简单的选项),那么您将在 "Products" 块中获得行。

在 PRODUCTS 块 WHERE 子句中输入值' 属性。

WHERE 子句 属性:

COMPANIES_PARTNERS_ID LIKE NVL(:lov_block.COMPANIES_PARTNERS_ID, '%')
  • 您不需要使用 ENTER_QUERY 命令。
  • 最好使用DEFAULT_WHERE相对于COMPANIES_PARTNERS_ID的设置。如果未通过按 CANCEL 或按 X 符号关闭选择 LOV 的任何行,则将列出所有产品(在这种情况下,您将看到第一个 ID,很可能带有值1,因为 COMPANIES_PARTNERS_ID 不在 CONTROL 街区,而是与其他项目在同一街区,即 PRODUCTS。当你向下 down-arrow当您的光标位于 COMPANIES_PARTNERS_ID 字段时,您会看到其他 ID 值,似乎该字段的“显示项目数”设置为 1,因为 PRODUCTS 块具有已设置为显示 10 项)。

因此,您可以在 WHEN-BUTTON-PRESSED 触发器中使用以下代码:

DECLARE
    V_WHERE VARCHAR2(500);
BEGIN   
    GO_ITEM('COMPANIES_PARTNERS_ID');
  IF SHOW_LOV('COMPANIES_LOV') THEN
    V_WHERE:='COMPANIES_PARTNERS_ID='||:COMPANIES_PARTNERS_ID;
  ELSE  
    V_WHERE:='1=1';           
  END IF;           
    SET_BLOCK_PROPERTY('PRODUCTS',DEFAULT_WHERE,V_WHERE);
    CLEAR_BLOCK(NO_VALIDATE);   
    EXECUTE_QUERY;  
END;