报表参数和字段格式化

外部报表参数

外部参数在运行报表时从外部传递,可用作数据集中的条件。所有外部参数都会成为每个报表带区的字段,因此在模板中可像数据集字段一样直接使用外部参数。在数据集的字段名与参数名相同时,数据集字段值优先,报表将使用数据集字段值。

外部参数可以由调用代码在通过 API 运行报表时传入。另外,当用户运行报表时,也会展示一个对话框,用来输入参数。后面这种情况需要在报表编辑界面的 Parameters and Formats(参数和格式) 标签页中定义外部参数。

定义参数的表单如下:

report parameter
Figure 1. 外部报表参数

输入参数属性

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(包含)

report parameter transformation
Figure 2. 输入参数转换

Validation(验证) 标签页中,可以使用 Groovy 脚本定义一些参数验证条件,请参阅下面的详细说明。

输入参数验证

可以验证输入参数和(或)定义参数交叉验证。

  1. 在参数编辑界面的 Validation(验证) 标签页中通过选中 Validate(验证) 复选框为每个参数启用参数验证。验证逻辑由 Groovy 脚本指定。脚本应检查参数值,如果值无效,则调用 invalid() 方法。此方法会向用户显示一条给定的警告信息,提示用户参数验证失败。

    脚本中可以使用下列参数:

    • value - 用户输入的参数值。

    • applicationContext - org.springframework.context.ApplicationContext 类型的对象,提供对托管 bean 的访问。

    • currentAuthentication - io.jmix.core.security.CurrentAuthentication 类型的对象,关联当前认证用户。

    • dataManager - DataManager 类型的对象,提供 CRUD 功能。

    • metadata - Metadata 类型的对象,提供对应用程序元数据的访问。

    • invalid - Groovy 闭包,在脚本内部调用会使验证失败。

      report parameter validation
      Figure 3. 输入参数验证
  2. 通过选中 Parameters and Formats(参数和格式) 标签页的 Cross parameters validation(多参数交叉验证) 部分的 Validate(验证) 复选框,可以启用参数交叉验证。验证逻辑由 Groovy 脚本指定。这个脚本应检查参数值之间是否合乎逻辑,检查不通过时调用 invalid() 方法。此方法将向用户显示一条给定的验证失败警告信息。

    除了上面列出的变量之外,params 变量也会传递到脚本中以访问外部报表参数映射。

    cross parameter validation
    Figure 4. 参数交叉验证

字段值格式化

可以在报表编辑界面的 Parameters and Formats(参数和格式) 标签页中为报表输出的任何字段指定格式。下面是添加格式的表单:

report formatter
Figure 5. 字段值格式
  • 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 属性。

也可以指定自定义的格式。直接在控件中输入新的值而不必打开下拉列表,然后敲回车。也可以从下拉列表中选择任何格式,在控件中编辑名称然后敲回车。两种情况都会保存自定义的格式。