在Oracle Forms 10g中使用LOV值筛选数据块

在Oracle Forms 10g中使用LOV值筛选数据块,oracle,oracleforms,lov,Oracle,Oracleforms,Lov,我需要从名为“PRODUCTS”的数据块中实现一个简单的产品表单 产品通过“公司\合作伙伴\ ID”字段与“合作伙伴”相关 此字段将由一个LOV表示,用于选择我们希望为其可视化您的产品的合作伙伴 如果当前未选择合作伙伴,则应显示您的所有产品。当选择合作伙伴时,只应显示其产品 表单将如下所示: 搜索字段右侧的按钮应显示LOV并启动查询。按下按钮时,我尝试了以下代码作为“智能触发器”。但它根本不起作用。LOV列表显示两次,当未选择任何合作伙伴时,不会显示任何产品 有人能帮我实现这个功能吗?谢谢一

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

产品通过“公司\合作伙伴\ ID”字段与“合作伙伴”相关

此字段将由一个LOV表示,用于选择我们希望为其可视化您的产品的合作伙伴

如果当前未选择合作伙伴,则应显示您的所有产品。当选择合作伙伴时,只应显示其产品

表单将如下所示:

搜索字段右侧的按钮应显示LOV并启动查询。按下按钮时,我尝试了以下代码作为“智能触发器”。但它根本不起作用。LOV列表显示两次,当未选择任何合作伙伴时,不会显示任何产品

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

一旦您进入查询模式(这就是
enter\u query
所做的),进一步的处理将停止,直到您执行查询为止

我认为您正确地创建了LoV——最常用的方法是首先创建一个记录组查询,然后基于它创建一个LoV

因此,我想
WHEN-NEW-FORM-INSTANCE
触发器中输入\u QUERY
,让您当前的按钮显示LoV,并让用户在“公司合作伙伴ID”项中选择一个值。执行查询(通过按下相应的工具栏按钮、快捷键(F8?)或新的“执行查询”按钮)将实际执行查询。如果正确创建了主-详细关系(使用数据块向导是最简单的选项),那么您将在“产品”块中获得行。

一旦进入查询模式(这是
enter\u query
所做的),进一步的处理将停止,直到您执行查询为止

我认为您正确地创建了LoV——最常用的方法是首先创建一个记录组查询,然后基于它创建一个LoV


因此,我想
WHEN-NEW-FORM-INSTANCE
触发器中输入\u QUERY
,让您当前的按钮显示LoV,并让用户在“公司合作伙伴ID”项中选择一个值。执行查询(通过按下相应的工具栏按钮、快捷键(F8?)或新的“执行查询”按钮)将实际执行查询。如果正确创建了主-详细关系(使用数据块向导是最简单的选项),那么您将在“产品”块中获得行。

在“产品”块的WHERE子句”属性中输入一个值

其中条款属性:

COMPANIES_PARTNERS_ID LIKE NVL(:lov_block.COMPANIES_PARTNERS_ID, '%')

在PRODUCTS块WHERE子句的属性中放置一个值

其中条款属性:

COMPANIES_PARTNERS_ID LIKE NVL(:lov_block.COMPANIES_PARTNERS_ID, '%')
  • 您不需要使用
    ENTER\u QUERY
    命令
  • 最好使用
    DEFAULT\u,其中
    针对
    companys\u PARTNERS\u ID设置
    。如果按
    CANCEL
    未选择任何LOV行,或按
    X
    符号取消LOV行,则将列出所有产品(在本例中,您将看到第一个ID,很可能带有值
    1
    ,因为
    公司\u合作伙伴\u ID
    不位于
    控件
    块,而是位于同一块,即
    产品
    ,以及其他项目。当您通过向下箭头向下移动时,当光标位于
    公司时,您将看到其他
    ID
    值_PARTNERS_ID
    字段,似乎该字段显示的项目数设置为
    1
    ,因为
    产品
    块已设置为
    10
    显示项目)
因此,按下按钮时,您可以在
触发器中使用以下代码:

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;
  • 您不需要使用
    ENTER\u QUERY
    命令
  • 最好使用
    DEFAULT\u,其中
    针对
    companys\u PARTNERS\u ID
    设置。如果未按
    CANCEL
    选择LOV的任何行,或按
    X
    符号取消LOV,则将列出所有产品(在本例中,您将看到第一个ID,很可能带有值
    1
    ,因为
    公司\u合作伙伴\u ID
    不位于
    控件
    块,而是位于同一块,即
    产品
    ,以及其他项目。当您通过向下箭头向下移动时,当光标位于
    公司时,您将看到其他
    ID
    值_PARTNERS_ID
    字段,似乎该字段显示的项目数设置为
    1
    ,因为
    产品
    块已设置为
    10
    显示项目)
因此,按下按钮时,您可以在
触发器中使用以下代码:

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;

非常感谢你的回答。这个解决方案很好。@Abdullahbahatab你不受欢迎,兄弟。你可以尝试向上投票。非常感谢你的回答。这个解决方案很好。@Abdullahbahatab你不受欢迎,兄弟。你可以尝试向上投票。