如何为 Oracle APEX Popup LOV 设置值

How to set value for the Oracle APEX Popup LOV

我正在寻找一种在 Popup Lov 项目中设置值的方法。我正在使用 Oracle Apex,我正在尝试通过动态操作设置 Popup LOV 的值。我想设置一年后从日期选择器中选择一个日期并在弹出的 LOV 项目中刷新年份。
在 Apex 上,我创建了一个名为 P2_YEAR 的弹出式 Lov 项目和一个名为 P2_DATE 的日期选择器。在 P2_date,我创建了一个具有两个真实条件的动态操作(客户端条件项不为空 - P2_YEAR)。

第一个条件:执行Pl\sql代码提取年份:

declare
   year number;
   tmp date;
begin
   tmp:=:P2_DATE;

   SELECT EXTRACT (YEAR  FROM  tmp) YEAR
   into year
   FROM DUAL;
   :P2_EXTRACT_YEAR := YEAR;
      return; 
end;

:P2_EXTRACT_YEAR 是一个隐藏的项目。

和第二个条件:执行 Javascript 代码

$s('extractyear',$v('P2_EXTRACT_YEAR'));

在 P2_Year 我在高级 - CSS class 添加了 class 名称 extractyear。

我会得到的是在弹出项框中显示年份,如果我按箭头仅显示之前从日期中提取的年份。

此配置无效。

您的答案分为两部分:1) 生成 P2_YEAR 的值列表。 2) 设置 P2_YEAR

的值

1) 这可以在项目 P2_YEAR 上使用级联 LOV 来实现。使用来源

WITH YEARS (yr) AS
(
  SELECT TO_CHAR(TO_DATE(:P2_DATE,'DD-MON-YYYY'),'YYYY')  + LEVEL - 2   FROM DUAL
    CONNECT BY LEVEL < 3
)
SELECT yr as r, yr as d FROM years

并设置父项目 P2_DATE。 我的项目 P2_DATE 具有格式掩码 DD-MON-YYYY

现在,如果 P2_DATE 发生变化,P2_YEAR 中的选项将相应地发生变化。

2) 使用对 P2_DATE

变化的动态操作来执行此操作

第一个操作:设置值,pl/sql 表达式,EXTRACT( YEAR FROM TO_DATE(:P2_DATE,'DD-MON-YYYY')) 项目 P2_EXTRACTYEAR

第二个动作:执行javascript代码,影响元素项P2_YEAR

apex.item("P2_DATE").setValue(apex.item( "P2_EXTRACTYEAR" ).getValue(),apex.item( "P2_EXTRACTYEAR" ).getValue()); 

右键单击 :P2_DATE 和 select 创建动态操作。设置以下属性:

Event: Change
Selection Type: Items(s)
Item: P2_DATE

客户端条件

 Type: Item is not null
 Item(s): P2_DATE

右键单击动态动作,然后 select 创建 TRUE 动作。设置以下属性:

 Action: Set Value
 Set Type: PL/SQL expression 
 PL/SQL expression : TO_CHAR(TO_DATE(:P2_DATE,'DD-MON-YYYY'),'YYYY')
 Items to Submit: P2_DATE
 Affected Elements > Selection Type: Item(s)
 Affected Elements > Item(s): P2_YEAR

错误操作

 Action : Set value
 Set Type: PL/SQL expression 
 PL/SQL expression : :P2_YEAR = ''
 Items to Submit: P2_YEAR
 Affected Elements > Selection Type: Item(s)
 Affected Elements > Item(s): P2_YEAR