我有一个APEX 5.0 App
,用于生成员工的名片。
我创建了一个名为(SELECT LIST
)的页面和P1_EMPLOYEE
页面项。它执行此DB查询以填充选择列表。
select
EMPLOYEE.LASTNAME||', '||EMPLOYEE.FIRSTNAME as FULLNAME,
EMPLOYEE.SECTION AS SECTION
from
EMPLOYEE EMPLOYEE
ORDER BY
EMPLOYEE.LASTNAME asc;
当页面加载时,它会在选择列表中输入大约900个员工姓名(例如,Doe,John,Doe,Jane等)。
另外,我创建了一个名为(Create)的BUTTON,其动态操作设置为Execute Javascript(例如window.open( 'f?p=&APP_ID.:0:&SESSION.:PRINT_REPORT=CreateBizCards' );
)。
上面的CreateBizCards是一个报表查询,我输入了
的SQL语法select
EMPLOYEE.FIRSTNAME as "FIRST NAME",
EMPLOYEE.LASTNAME as "LAST NAME",
EMPLOYEE.TITLE as TITLE,
EMPLOYEE.SECTION as SECTION,
EMPLOYEE.OFFICE_PHONE as "OFFICE PHONE",
EMPLOYEE.EMAIL as "E-MAIL"
from
EMPLOYEE EMPLOYEE
where
EMPLOYEE.LASTNAME = :P1_EMPLOYEE;
当触发(创建)BUTTON时,假设根据SELECT LIST
中选择的员工姓名创建报告。
有两件事情正在发生,这些都是不受欢迎的结果。
首先,当触发“创建”按钮时,它将生成一个报告,其中包含具有相同姓氏的不同用户。
其次,如果我在触发按钮时更改了Report Query上的SQL查询,它会生成一个只包含列名而没有数据的PDF。
我应该如何为CreateBizCards报表查询编写查询,以便它从页面项上的SELECT LIST中找到所选员工(例如:P1_EMPLOYEE),然后仅返回特定于该员工的数据?
注意:我无法共享APEX URL,因为这是一个内部Application Server。
答案 0 :(得分:1)
选择列表等是LOV期望1或2列的项目。第1列是显示值,第2列是返回值。
这就是“帮助”所说的将SQL查询用于值列表(直接从顶点5的帮助中复制)
输入SQL查询定义以填充此值列表。 通常,值查询列表的格式为:
select [displayValue], [returnValue] from ... where ... order by ...
所选的每列必须具有唯一的名称或别名。神谕 建议在包含SQL的任何列上使用别名 表达
<强>实施例强>
基于SQL查询的值列表
select ename as d, empno as r from emp order by 1
具有相同显示和返回值的值列表
select ename d, ename r from emp order by 1
注意:为显示和返回选择相同的列时 值使用列别名。
您的选择列表项(P1_EMPLOYEE
)正在显示员工LASTNAME
和FIRSTNAME
的串联。该项目正在返回(=引用其会话状态时的值)员工的SECTION
,我认为该员工不是员工的姓氏或是唯一的密钥。
这意味着您的报告查询有一个where子句,主要是说“返回LASTNAME
等于SECTION
(P1_EMPLOYEE
)的记录。
我建议您将P1_ITEM
设置为:
Select e.lastname||', '||e.firstname as fullname,
[SOME UNIQUE ID] --replace with primary key
from employee e
order by e.lastname, e.firstname;
对于您的报告查询,您可能希望将where子句更改为以下内容:
where e.[SOME UNIQUE ID] = :P1_EMPLOYEE;