oracle 6.0,Oracle Reports 6.0 的弹性域支持 API(一)

通过将 Oracle Applications 弹性域例行程序与 Oracle Reports 一起使用,您可以建立以多种方式简单地显示弹性域数据的报表:

o 显示任何单个段值、提示或说明。

o 在同一个报表中显示多种弹性域结构(或上下文)的段值、提示或说明。

o 在同一个报表中显示不同弹性域的段值、提示或说明。

o 按正确的顺序显示与分隔符级连的两个或多个弹性域段值、提示或说明。这包括从属段、独立段和表验证段的说明信息。

o 根据弹性域范围(上下限值)限制输出。

o 防止报告用户无权访问的弹性域段和值(弹性域值安全性)。

o 使用一个、多个或所有段列来指定 order by,group by 和 where 子句的约束条件。[@more@]

通过将 Oracle Applications 弹性域例行程序与 Oracle Reports 一起使用,您可以建立以多种方式简单地显示弹性域数据的报表:

o 显示任何单个段值、提示或说明。

o 在同一个报表中显示多种弹性域结构(或上下文)的段值、提示或说明。

o 在同一个报表中显示不同弹性域的段值、提示或说明。

o 按正确的顺序显示与分隔符级连的两个或多个弹性域段值、提示或说明。这包括从属段、独立段和表验证段的说明信息。

o 根据弹性域范围(上下限值)限制输出。

o 防止报告用户无权访问的弹性域段和值(弹性域值安全性)。

o 使用一个、多个或所有段列来指定 order by,group by 和 where 子句的约束条件。

一般方法论

您可以使用两步法来报告弹性域值。第一步,依据用户弹性域动态创建适当的 SQL 语句;第一步的输出值将用作第二步的输入值。第二步,格式化原始数据以便显示。

步骤 1(构建):

第一步要求您在 SQL 语句中包括一个或多个词法参数(指可在运行时更改的 Oracle Reports 变量)。您可以使用不同的变元来调用用户出口 FND FLEXSQL,以指定要建立的查询部分。在执行 SQL 查询之前,用户出口会在运行时检索适当的列名(SQL 片段),并将其插入词法参数中。随后,查询将返回与地点和运行时间相关的弹性域信息。例如,假定您要进行以下查询:

SELECT &LEXICAL1 alias, column

FROM table

WHERE &LEXICAL2

在初步调用 FND FLEXSQL 期间,系统会在执行时用 SQL 片段替换 LEXICAL1 和 LEXICAL2 的值。例如,LEXICAL1 变成 "SEGMENT1||' '||SEGMENT2",LEXICAL2 变成 "SEGMENT1 < 2"(假定用户弹性域由两个段构成,并且用户要求 SEGMENT1 的段值小于 2)。实际执行的 SQL 查询可能是:

SELECT SEGMENT1||' '||SEGMENT2 alias, column

FROM table

WHERE SEGMENT1 < 2

对于具有不同弹性域结构的用户,SQL 语句可能是:

SELECT SEGMENT5||' '||SEGMENT3||' '||SEGMENT8 alias, column

FROM table

WHERE SEGMENT3 < 2

您可以通过此步骤来修改 SELECT,ORDER BY,GROUP BY 或 WHERE 子句,同时检索所有级连的弹性域段值,以便将其用作第二步(如下所述)中用户出口 FND FLEXIDVAL 的输入值。

您需要为所使用的每个词法参数调用一次用户出口,并且至少需要调用一次才能获得所有段。此原始弹性域信息以内部格式表示,但不应显示出来(尤其是在段使用“隐藏标识”值集时)。

步骤 2(显示):第二步要求您依据“后续记录”调用另一个用户出口 FND FLEXIDVAL。您需要创建一个新的公式列以包含弹性域信息,并将用户出口调用包括在此列中。此用户出口会确定显示时所需的确切信息并适当地填写该列。用户出口通过使用弹性域例行程序,可以访问任何弹性域信息。您可以使用此步骤来获得说明、提示或值。此步骤会从选定的级连值中导出弹性域信息,并按行填写公式列。

您需要为弹性域段的每个记录调用一次 FND FLEXIDVAL。

Oracle Reports 的弹性域用户出口与它们的 Oracle Application Object Library(使用 SQL*Forms)对应部件,即 LOADID(R) 或 LOADDESC 及 POPID(R) 或 POPDESC 相似;一个用于建立或装入值 (FLEXSQL),另一个用于显示这些值 (FLEXIDVAL)。变量名和含义也是相似的。

基本实施步骤

步骤 1 从“报表前触发器”调用 FND SRWINIT

您可以从“报表前触发器”调用用户出口 FND SRWINIT。FND SRWINIT 将读取并发请求信息并设置配置文件选项。如果要在报表中使用任何 Oracle Application Object Library 功能(如并发处理),则必须包括此步骤。

步骤 2 从“报表后触发器”调用 FND SRWEXIT

您可以从“报表后触发器”调用用户出口 FND SRWEXIT。FND SRWEXIT 将释放在其它 Oracle Applications 用户出口中分配的所有内存。如果要在报表中使用任何 Oracle Application Object Library 功能(如并发处理),则必须包括此步骤。

步骤 3 从“报表前触发器”调用 FND FLEXSQL

您需要将级连段值从代码组合基础表传送至用户出口,以便用户出口显示适当的数据,并根据需要从转换后的值集中导出任何说明和值。您可以通过从“报表前触发器”调用 AOL 用户出口 FND FLEXSQL 来获得此信息。此用户出口会在运行时使用适当的列名/SQL 片段来填写您指定的词法参数。您将词法参数纳入报表查询的 SELECT 子句,这使报表自己就能够检索级连的弹性域段值。您可以为每个要设置的词法调用一次该用户出口。请勿在报表中显示此列。您可以将此“隐藏字段”用作 FND FLEXIDVAL 用户出口调用的输入值。此用户出口还可以通过在结构列中生成译码来处理多结构弹性域报表。如果报表查询使用表连接,则此用户出口会将代码组合表名的别名附加至它返回的列名。例如,

SELECT &LEXICAL alias, column

将变为

SELECT SEGMENT1||' '||SEGMENT2 alias, column

注:Oracle Reports 需要列别名,以使列名始终固定用于 SELECT 子句中的词法。如果没有别名,Oracle Reports 就会将列名作为初始值分配给词法,而且运行时词法值的更改也会带来差异。

步骤 4 根据弹性域值限制报表数据

您可以从“报表前触发器”调用 MODE="WHERE" 的用户出口 FND FLEXSQL。此用户出口会在运行时使用适当的 SQL 片段来填写您指定的词法参数。您将词法参数纳入报表查询的 WHERE 子句。您可以为每个要更改的词法调用一次该用户出口。如果报表查询使用表连接,则可以让此用户出口将代码组合表名的别名附加至它返回的列名。例如,

WHERE tax_flag = 'Y' and &LEXICAL < &reportinput

将变为

WHERE tax_flag = 'Y' and T1.segment3 < 200

此过程同样适用于 HAVING 子句。

步骤 5 按弹性域列排序

您可以从“报表前触发器”调用 MODE="ORDER BY" 的用户出口 FND FLEXSQL。此用户出口在运行时使用适当的 SQL 片段来填写您指定的词法参数。您将此词法参数纳入报表查询的 ORDER BY 子句。您可以为每个要更改的词法调用一次该用户出口。如果报表查询使用表连接,则可以让此用户出口将代码组合表名的别名附加至它返回的列名。例如,

ORDER BY column1, &LEXICAL

将变为

ORDER BY column1, segment1, segment3

步骤 6 显示弹性域段值、说明和提示

创建“公式列”(一种使您能够调用用户出口的 Oracle Reports 6.0 数据结构)。您可以将用户出口 FND FLEXIDVAL 作为此列的公式调用。此用户出口将自动提取说明和提示等更复杂的信息,使您无需使用弹性域表的复杂表连接。然后,您可以创建新字段(一种用来格式化和显示列的 Oracle Reports 6.0 结构)、将“公式列”作为来源进行分配,并使用屏幕绘制程序将此字段添加至报表。您需要将此字段纳入与其余数据相同的“重复帧”(屏幕绘制程序中的一种 Oracle Reports 6.0 结构,它定义数据检索频率),其中数据可以是实际的报表数据、样板文件或列标题等。您可以按包含字段的重复帧的频率来调用用户出口和检索弹性域信息。如果是报表数据,则对于查询时检索到的每个行,将调用一次用户出口并检索一次弹性域信息。

所有弹性域段值和说明均会以左对齐的格式显示。段值不会被截断,也就是说,在“定义关键字段”屏幕中定义的“显示大小”将被忽略。段值说明将被截断为在表单中定义的说明大小(如果显示了一个段)或级连说明大小(用于级连段)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值