首页 > 解决方案 > 创建具有不同范围的数组副本

问题描述

有没有一种简单的方法可以通过保留所有原始值来创建数组的副本,但只需将数组的范围从共享更改为全局?

shared stringvar Array SHARED_ARRAY

global stringvar Array GLOBAL_ARRAY

标签: oraclecrystal-reports

解决方案


复制一个数组及其所有索引值实际上与将一个值从一个变量复制到另一个变量没有什么不同。不过,在使用数组方面需要考虑一些细微差别。

要复制数组,您将在公式字段中使用以下代码。

Shared StringVar Array SHARED_ARRAY;
Global StringVar Array GLOBAL_ARRAY := SHARED_ARRAY;

解析此公式后,SHARED_ARRAY 中的任何值都将复制到 GLOBAL_ARRAY。然而,这是细微差别发挥作用的地方。第一个问题是公式不能返回非标量值。由于数组包含多个值,因此它不是标量。因此,上面的公式会导致错误,因为最后一行代码返回了整个 GLOBAL_ARRAY。为避免此错误,您可以将公式修改为以下内容。

Shared StringVar Array SHARED_ARRAY;
Global StringVar Array GLOBAL_ARRAY := SHARED_ARRAY;
GLOBAL_ARRAY[1];

该公式现在只返回数组的第一个索引并且现在是标量并且不会引发错误。您可能希望抑制公式字段,因为它将打印数组的第一个索引值。

我想警告您的第二个细微差别是关于 SHARED_ARRAY 变量如何填充值。在解析上述公式之前,您需要确定它已经完全填充了您希望它包含的所有值。这将需要对将要打印的报告的顺序部分有所了解,因此您可以确定将上述公式字段放在填充 SHARED_ARRAY 的部分之后的部分中。


推荐阅读