1

基本上,假设我有一个报告 A,我想向它添加一个链接列,我将其目标设置为应用程序中的一个页面......它所指的页面有另一个报告(我们称之为 B)

我是否有可能以某种方式使表 A 的链接列打开带有报告 B 的页面,其中行的列之一具有相同的列值?


这里的例子:

一个

Name Num1 Num2
--------------
A    5    3
B    3    3
C    4    2

Name Quantity Serial
--------------------
D    2        3
E    1        8
F    4        6

因此,如果我单击 A 行的链接列,我希望它打开报表 B,并且只显示其 Num2 = Serial 的行,因此只有 D 行会显示,因为它是唯一等于 3 的行

4

2 回答 2

1

使用报表链接过滤其他 APEX 报表输出

不过,我玩这个很有趣。“A”和“B”的东西很枯燥,所以我决定创建一个更吸引人的数据集,也许对我们其他人来说更容易理解...... :) 这就是数据生态系统被破坏的原因下来,以及我满足 OP 要求的方式。

测试架构:

欢迎来到“Recipe Stack”食品厂的生产设施。下面是架构设计和 ERD(实体关系图),以及用于此演示的示例数据:

堆栈配方工程 ERD

数据关系如下:

  1. Stack Food-Works 的工作人员为他们制造的膳食和预制食品的类型保留了所有成分的清单。每种成分都有一个唯一的 ID ( INGREDIENT_ID),工作人员会跟踪他们储藏室中每种物品的数量。
  2. 每种成分都可以在多个配方中使用,但对于给定的配方,它们只会使用一次
  3. ENTREE_RECIPE表有一个COMPOSITE KEY,这意味着它是这个组合键 (ENTREE_NAMEINGREDIENT_SEQ) 的两个部分的组合,应该是唯一的。
  4. 两个表的值之间存在FOREIGN KEY关系。INGREDIENT_ID

报告显示要求(APEX 和 SQL 设计元素)

从第一个报告中选择一个项目用作第二个报告的输入和限制/过滤条件。

用户案例#1:

  1. 用户从食品储藏室中的可用成分列表中选择成分 ID。
  2. 来自 (1) 的输入过滤RECIPE REPORT的输出。这是在其配方中具有所选成分的所有食谱的列表。

用户案例#2:

  1. 用户ENTREE_NAMERECIPE REPORT中选择一个。ENTREE_NAME用于提供第三个报告:配方公式,它是从前一个报告中选择的主菜项目的完整配方。

测试工具

(对于更复杂的页面,您通常需要这些,因此为更简单的页面使用或开发它们是一个很好的开始......)

我自己制作了,但您也可以SESSION在正在运行的应用程序的 APEX 页面底部(显示时)调用开发人员工具栏上的链接。

APEX 会话跟踪链接(开发者工具栏)

这是我的想法;它是一个标题区域,还有一个RESET输入值的按钮,以便我可以清除缓存并重新测试或尝试其他示例。稍后我将展示如何使用此链接查看发生了什么。您可以在本指南底部的测试讨论中看到它。

APEX 报告/页面设计和 SQL 参数化

我的 columnn 链接方案看起来类似于上一篇文章,例如来自FTaveras的文章。这就是我的链接的工作方式。不同的是我不去另一个页面,我只是回到我原来的那个页面。重定向和分支显然不在乎它们是否只是返回到同一位置。

回程中的不同之处在于,最初为 null 或未填充的页面参数现在有一个值。现在,该值使页面上空白的报告变得生动起来。

第 1 步:食品储藏室报告

  1. 输出:查询FOOD_SUPPLIES表中的所有项目。
  2. 输入:提供链接INGREDIENT_ID以过滤RECIPE_REPORT输出。

Stack Food Works:食品储藏室报告

怎么做:(提示) 要做到这一点,请将报表布局设计页面中的报表列/字段值定义为“链接”列,并将其值指定为页面项。该页面项将在下一个报表的 SQL 查询中被引用...

通过报表链接查询 APEX 页面设计

第 2 步:配方报告

  1. 输出:查询ENTREE_RECIPE表中所有INGREDIENT_ID公式中包含 from Step 1 的记录。
  2. 输入: 提供链接ENTREE_NAME以过滤RECIPE_FORMULA输出。

Stack Food Works:食谱报告

怎么做:(提示)在此报告的 SQL 查询中包含步骤 1中 定义的页面项目:

    SELECT * FROM entree_recipe 
     WHERE ingredient_id = :P3_INGREDIENT_ID 

第 3 步:公式报告

  1. 输出:查询ENTREE_RECIPE表中所有ENTREE_NAME已从步骤 2 中选择的记录。

Stack Food Works:配方报告

调试和测试运行

大多数人将能够毫无问题地做到这一点。如果没有,这里有几个示例说明如何调试和测试您的工作。Apex 中可能已经存在一些内置工具和包,因此欢迎在评论中提出有关替代方法的任何建议......!

使用 APEX 开发者会话输出

选择试运行的输入后,单击SESSION页面底部开发人员工具栏上的链接。这是一个示例输出:

APEX 开发者会话报告

请注意,会显示为该会话设置的页面项目。我用于此测试的输入是:

  1. INGREDIENT_ID: 6432
  2. ENTREE_NAME:桃皮匠(新鲜)

额外积分: 这是一种替代方法。将这样的东西设计为您设计的任何应用程序的附加组件可能会很有用。当您将其推送到生产环境时,您无需将其从应用程序中删除,因为页面区域有“条件显示/抑制”功能。(一探究竟)

自定义页面调试区域的示例

只需在 Apex 应用程序上将全局参数设置为“模式”。将值设置为“DEBUG”或“TEST”或其他任何值,并键入此页面区域的所有实例以仅在将全局参数设置为它时显示。

总结和讨论

希望您喜欢参观“Stack Food Works”(请不要品尝或品尝)。

这更像是 Apex 应用程序设计的整体方法。它有助于制定每一步的方法,以及在开发过程的开始和结束时检查您的工作的方法。使用像此演示这样的较小示例来应用这些方法提供了将 Apex 开发理解为软件创建过程的机会。

于 2014-08-19T21:54:40.260 回答
0

是的,这是可能的。

  1. 在 B 页上,添加并隐藏项目名称,例如 P(#)_SERIAL,其中 (#) 是您当前的页码。
  2. 修改您的查询并添加一行,如AND SERIAL=:P(#)_SERIAL.
  3. 在页面 A 上,转到报告区域上的“报告属性”选项卡,单击编辑。 在此处输入图像描述
  4. 在列链接部分配置您到页面 B 的链接,并将页面 B 上的隐藏项设置为页面 A 报告列上的值。 在此处输入图像描述

名称:项目 1 [P(#)_SERIAL] 值:#Num2#

演示

于 2014-08-19T20:22:57.210 回答