在 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_QUERY
在 WHEN-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;
我需要从名为“PRODUCTS”的数据块中实现一个简单的产品表单。
产品通过字段“COMPANIES_PARTNERS_ID”与 "Partner" 相关。
此字段将由 LOV 代表 select 我们要为其可视化您的产品的合作伙伴。
如果当前 select 没有合作伙伴,则应显示您的所有产品。当合作伙伴 selected 时,应该只显示他们的产品。
表单将如下所示:
搜索字段右侧的按钮应显示 LOV 并启动查询。当我按下按钮时,我尝试将以下代码作为 "Smart Trigger" 。但它根本不起作用。 LOV 列表出现两次,当没有合作伙伴被 selected 时,没有产品出现。
有人可以帮我实现这个功能吗?谢谢
一旦您进入查询模式(ENTER_QUERY
所做的),进一步的处理将停止,直到您执行查询。
我假设您已经正确创建了 LoV - 最常用的方法是先创建记录组查询,然后基于它创建 LoV。
因此,我会 ENTER_QUERY
在 WHEN-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;