【发布时间】:2016-08-01 16:43:21
【问题描述】:
我对计算点感到困惑,例如 before_header 和 after_header 等。
我有一个计算,需要取一个页面项的值,然后作为结果返回。
计算是一个PL/SQL函数体,如下:
DECLARE
v_response varchar2(1500);
BEGIN
IF :P4_RENEWAL_REQUIRED = 'Yes' THEN
v_response := 'According to Register, a license renewal WILL BE required to maintain this registration. Please choose whether you agree or disagree with this statement.';
ELSE
v_response:='Forget about it...';
END IF;
return v_response;
END;
页面项目 :P4_RENEWAL_REQUIRED 是一个计算字段,它是一个 SQL 值,它依赖于数据库填充的页面项目 P4_RENEWAL_NOT_REQUIRED。它只是将“是”变为“否”,将“否”变为“是”。
SELECT (CASE WHEN V('P4_RENEWAL_NOT_REQUIRED')='Yes' Then 'No' ELSE
CASE WHEN V('P4_RENEWAL_NOT_REQUIRED')='No' Then 'Yes' ELSE '??' END END) FROM DUAL
我的计算不会返回结果。 P4_RENEWAL_REQUIRED 值显然是“是”,但计算将返回“忘记它”。如果我进入页面编辑视图,然后再次运行该页面 - 值显示正确的值
'根据注册,将需要更新许可证才能维持此注册。请选择您是否同意此声明。'
这对我来说意味着计算是在 P4_RENEWAL_REQUIRED 的旧会话值上运行的。
我不确定计算点与此有什么关系,但如果我有数据通过在 After Header 上执行的 Fetch Row 进程返回,然后填充区域中的字段,例如 P4_RENEWAL_NOT_REQUIRED,然后正在计算 P4_RENEWAL_REQUIRED....如何计算以填充另一个区域中的字段,该区域依赖于现有页面项目?
我尝试让我的计算在页脚之前、区域之前、页脚之后等执行,但没有任何效果。
我不确定所有 Before Footer 是如何工作的,或者当所有这些都呈现在服务器端时,页面项目是如何填充的。
例如,如果我将计算设置为计算“区域后”,那么在区域中使用该值是否为时已晚,因为区域已经被渲染?
如果我需要在计算中计算一个值以在某个区域中使用它并使用“区域前”计算点,请在该点通过基础查询将我需要使用的页面项目绑定到页面项目,或者我是不是太早了。
任何帮助表示赞赏。
【问题讨论】:
-
我不太清楚:P4_RENEWAL_NOT_REQUIRED 的来源是什么?设置为“始终”还是“仅当会话状态为空时”?
-
设置为始终
-
对不起,可能没有明确说明:该项目的来源类型,设置为什么? SQL 查询?
-
P4_RENEWAL_NOT_REQUIRED 是一个数据库列,我通过在字段 P4_RENEWAL_REQUIRED 中反转它(是->否,否->是)来转换它,这是一个 SQL 语句,我注意到它没有设置为“总是” SELECT (CASE WHEN V('P4_RENEWAL_NOT_REQUIRED')='Yes' Then 'No' ELSE CASE WHEN V('P4_RENEWAL_NOT_REQUIRED')='No' Then 'Yes' ELSE '??' END END) FROM DUAL
-
好吧 - 对于初学者:它至少应该设置为“始终”:您希望每次呈现页面时都“检索”该值 - 尽管存在其他问题
标签: oracle oracle-apex