报表参数和字段格式化
外部报表参数
外部参数在运行报表时从外部传递,可用作数据集中的条件。所有外部参数都会成为每个报表带区的字段,因此在模板中可像数据集字段一样直接使用外部参数。在数据集的字段名与参数名相同时,数据集字段值优先,报表将使用数据集字段值。
外部参数可以由调用代码在通过 API 运行报表时传入。另外,当用户运行报表时,也会展示一个对话框,用来输入参数。后面这种情况需要在报表编辑界面的 Parameters and Formats(参数和格式) 标签页中定义外部参数。
定义参数的表单如下:
输入参数属性
在 Properties(属性) 标签页可以定义参数的属性:
-
Caption(标题) - 参数名称,在运行报表时这个名称显示在参数输入表单中。
-
Parameter alias(参数别名) - 用于在数据集中访问的参数别名。
-
Parameter type(参数类型) - 参数类型。
-
Hidden(隐藏) - 定义是否对用户隐藏此参数,隐藏后将不提示用户输入此参数。
-
Required parameter?(必需) - 是否为必需参数。
-
Default value(默认值) - 定义用户未选择值的情况下将使用的默认参数值。
参数类型可以是基本的 String(字符串)、Number(数字)、Boolean(布尔) 类型或者时间类型,另外,也支持 Enumeration(枚举)、Entity(实体) 或 List of entities(实体列表) 参数类型。根据所选择的类型不同,需要额外提供不同的字段:
如果选择 Entity(实体) 或 List of entities(实体列表) 类型:
-
Entity(实体) - 用作参数的实体类
-
Entity selection screen(实体选择界面) - 可选的界面标识符,用于选择实体实例。如果未指定界面,将使用通用的实体选择界面。
如果选择了 Enumeration(枚举) 类型:
-
Enumeration(枚举) - 用作参数的枚举类。
如果选择了时间类型(Date(日期)、Time(时间) 或 Date and time(日期时间)):
-
Default date(time) is current(默认日期(时间)为当前日期时间) - 是否将当前时间戳用作默认参数值。
输入参数本地化
在 Localization(本地化) 标签页,可以定义不同语言环境的参数名。需要输入 locale_name = parameter_name
格式的本地化值,示例:
ru = Книга
输入参数转换
在 Transformation(转换) 标签页中可以定义处理参数的 Groovy 脚本,在报表使用参数之前先通过脚本处理。
Groovy 脚本应返回新的参数值。脚本中可以使用下列参数:
-
params
- 参数的 map,可以通过别名params
访问。 -
paramValue
- 用于访问参数当前值。 -
dataManager
-DataManager
类型的对象,提供 CRUD 功能。 -
metadata
-Metadata
类型的对象,提供对应用程序元数据的访问。 -
applicationContext
-org.springframework.context.ApplicationContext
类型的对象,提供对托管 bean 的访问。
示例:
return "%" + paramValue + "%"
还可以使用预定义的转换器为文本(String)参数添加通配符:
-
Starts with(以…开始)
, -
Ends with(以…结束)
, -
Contains(包含)
。
在 Validation(验证) 标签页中,可以使用 Groovy 脚本定义一些参数验证条件,请参阅下面的详细说明。
输入参数验证
可以验证输入参数和(或)定义参数交叉验证。
-
在参数编辑界面的 Validation(验证) 标签页中通过选中 Validate(验证) 复选框为每个参数启用参数验证。验证逻辑由 Groovy 脚本指定。脚本应检查参数值,如果值无效,则调用
invalid()
方法。此方法会向用户显示一条给定的警告信息,提示用户参数验证失败。脚本中可以使用下列参数:
-
value
- 用户输入的参数值。 -
applicationContext
-org.springframework.context.ApplicationContext
类型的对象,提供对托管 bean 的访问。 -
currentAuthentication
-io.jmix.core.security.CurrentAuthentication
类型的对象,关联当前认证用户。 -
dataManager
-DataManager
类型的对象,提供 CRUD 功能。 -
metadata
-Metadata
类型的对象,提供对应用程序元数据的访问。 -
invalid
- Groovy 闭包,在脚本内部调用会使验证失败。Figure 3. 输入参数验证
-
-
通过选中 Parameters and Formats(参数和格式) 标签页的 Cross parameters validation(多参数交叉验证) 部分的 Validate(验证) 复选框,可以启用参数交叉验证。验证逻辑由 Groovy 脚本指定。这个脚本应检查参数值之间是否合乎逻辑,检查不通过时调用
invalid()
方法。此方法将向用户显示一条给定的验证失败警告信息。除了上面列出的变量之外,
params
变量也会传递到脚本中以访问外部报表参数映射。Figure 4. 参数交叉验证
字段值格式化
可以在报表编辑界面的 Parameters and Formats(参数和格式) 标签页中为报表输出的任何字段指定格式。下面是添加格式的表单:
-
Name(名称) - 带有报表带区前缀的报表字段名称,例如,
Book.year
。 -
Format string(格式化字符串) - 格式化字符串。对于数字值,根据
java.text.DecimalFormat
的规则指定格式,对于日期值 - 根据java.text.SimpleDateFormat
的规则指定格式。 -
Groovy script(Groovy 脚本) 复选框。可以使用 Groovy 脚本来格式化参数。脚本中使用
value
别名访问当前参数值,对其进行格式化或者转换成需要的格式。Groovy 脚本需要返回字符串类型的新值。
使用格式,可以将图像和 HTML 块插入到文档中。
-
如需插入图像,将图像 URL 指定为字段值,格式字符串必须是:
${image:<Width>x<Height>}
,例如${image:200x300}
。如需使用
FileRef
,可以使用${imageFileId:WxH}
格式,接收FileRef
实例或文件的 URI 字符串。 -
如需插入 HTML 片段,应该在字段中返回 HTML 标记,并选择
${html}
作为格式字符串。在输出值中,可以省略<body>
以上的顶层 HTML 标记。如有必要,将自动添加所有缺少的顶层标记。所有片段都应该用UTF-8
编码。不支持 CSS 和style
属性。
也可以指定自定义的格式。直接在控件中输入新的值而不必打开下拉列表,然后敲回车。也可以从下拉列表中选择任何格式,在控件中编辑名称然后敲回车。两种情况都会保存自定义的格式。