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

时间:2018-03-31 21:12:28

标签: oracle oracleforms lov

我需要从一个名为" 产品"

的数据块中实现一个简单的产品表单。

产品与合作伙伴"通过该领域" COMPANIES_PARTNERS_ID "。

此字段将以 LOV 表示,以选择我们想要展示您的产品的合作伙伴。

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

表单如下所示:

oracle forms

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

enter image description here

有人可以帮助我实现此功能吗?谢谢

3 个答案:

答案 0 :(得分:1)

进入查询模式后(ENTER_QUERY执行此操作),将停止进一步处理,直到执行查询为止。

我认为你正确地创建了一个LoV - 最常用的方法是首先创建一个Record Group查询,然后根据它创建一个LoV。

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

答案 1 :(得分:1)

在PRODUCTS块中添加一个值WHERE子句'属性。

WHERE CLAUSE属性:

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

答案 2 :(得分:1)

  • 您不需要使用ENTER_QUERY命令。
  • 最好使用DEFAULT_WHERE设置COMPANIES_PARTNERS_ID。如果未通过按CANCEL选择任何LOV行或按X符号选择,则会列出所有产品(在这种情况下,您会看到第一个ID,最有可能值1,因为COMPANIES_PARTNERS_ID不在CONTROL块,而是在同一个区块,即PRODUCTS,与其他项目一起。当你向下箭头时当您的光标位于ID字段时,您会看到其他COMPANIES_PARTNERS_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;