我有一个交互式报告,显示文章表中的所有记录。对于已登录的作者,我想显示所有记录,但是只应为该作者撰写的那些文章显示EDIT。在文章表中,我有列CREATED_BY
,其中包含作者用户名。
我在链接列中添加条件作为表达式1中的项目/列的值=表达式2,因为表达式1 = #CREATED_BY#
& Expression2 = :APP_USER
但这不起作用。这是我第一次采用这种方法根据条件显示编辑链接。
当我添加条件Value of Item / Column in Expression 1 is not null
并设置Expression1 = #CREATED_BY#
时,它仍然没有显示编辑链接。所以,我认为#CREATED_BY#
返回null。但是表中的记录有一个值&我也在报告专栏中看到了它。
有人可以帮忙吗?我不知道自己哪里出错了。
答案 0 :(得分:8)
您使用的条件是列,而不是每行,因此您将无法以这种方式执行此操作。
我认为实现此目的的最佳方法是在查询中创建一个虚拟列,用作编辑链接:
SELECT
CASE
WHEN CREATED_BY = :APP_USER THEN
'<a href="' || APEX_UTIL.PREPARE_URL( p_url => 'f?p=' || &APP_ID. || ':<YOUR EDIT PAGE>:'||&SESSION.||'::NO::<PAGE ITEM>:'||COLUMN ID, p_checksum_type => 'SESSION') || '"><img src="/i/menu/pencil2_16x16.gif"></a>'
ELSE ''
END edit_link,
...THE REST OF YOUR QUERY...
您还必须将列定义下的列显示更改为
标准报告栏
并可选择删除
下的选项允许用户: 所以用户无法隐藏/排序/ ...列。
希望这可以帮到你。任何疑问或进一步解释只是问。
答案 1 :(得分:1)
这是与hmarques类似的解决方案,但它不需要手动构建整个链接。
我会在报告查询中包含一个虚拟列,其中包含null,或者如果当前用户名与CREATED_BY匹配,则指向“编辑”按钮图像的指针:
select decode(CREATED_BY
,:APP_USER
,'<img src="#IMAGE_PREFIX#edit.gif" alt="">'
-- or your preferred image/hyperlink text
) EDITLINK
--, your columns
from ARTICLES
--etc
使用标准列链接功能将参数传递到您的编辑页面,但使用#EDITLINK#
作为列的链接文本。不要忘记将列的显示类型设置为“标准报告列”。我个人也会删除列标题 - 它是一个必填字段,但你可以将它设置为一个空格。
答案 2 :(得分:1)
我能够在APEX 5中提出解决方案,但同样适用于APEX 4.2。您可以使用内置APEX列链接和hmarques建议的案例陈述轻松完成此操作。
按如下方式构建查询:
SELECT CASE
WHEN CREATED_BY = :APP_USER THEN
'Edit'
ELSE
NULL
END EDIT,
...rest of query
然后,转到:报告属性&gt;您的修改列&gt;并滚动到页面的列链接部分。选择链接文字文本框旁边的箭头,然后选择 #EDIT#作为列链接文字。
另外,使用此html代码设置链接属性:
class="t-Button t-Button--simple t-Button--hot t-Button--stretch"
这会使列看起来像一个按钮,并且不会显示传统的铅笔图标(这是此方法的唯一缺点)。
不要忘记将编辑栏设为标准报告栏,祝你好运!
约翰