开发指导
1.1 报表数据隔离
sql中可以使用一些预定义参数来获取当前用户的信息,可用于数据隔离
例如:
select user_id, name from user where user_id='${u-userId}'
在数据集管理功能中,以u-
开头的自定义参数,不会是被初始化为参数
以下为所有预定义参数:
字段名 | 含义 |
---|---|
u-userId | 当前用户Id |
u-language | 当前会话语言 |
u-roleId | 当前角色Id |
u-roleIds | 当前会话可访问的角色集合 |
u-tenantId | 当前租户 |
u-tenantIds | 当前会话可访问的租户集合 |
u-organizationId | 所属租户 |
1.2 字体问题
需要注意的是: 报表平台的字体默认只支持黑体,若报表打印时,出现乱码,很可能是字体缺失
用户可以自定义需要的字体:
1.将所有需要的字体文件上传至报表服务所在服务器
2.ymal文件中指定字体名称和字体文件的绝对路径
hzero:
report:
fontPaths:
- 宋体|C:\Windows\Fonts\simsun.ttc
1.3 使用二维码
hzero.report.qrCodeUrl
用来配置二维码的生成地址,报表服务提供了通用的二维码生成接口
示例配置:http://hzerodevb.saas.hand-china.com/hrpt/v1/qr-codes?text=
qrCodeUrl配置之后,数据集会默认填充QR_CODE_URL,模板定义中可以使用此变量
rtf中使用二维码
插入图片,作为二维码占位符,右键 -> 图片 -> 可选文字
拼接二维码地址变量
1.4 菜单中挂报表
在需要的位置新建菜单,菜单路径示例: /hrpt/report-detail?code=USER&auto=true
code
是报表的定义的编码,需要注意的是,用户需要有该报表的权限才能查看该报表auto
是否再进入菜单时,根据数据集定义的默认参数渲染报表,默认为否
1.5 标签模板相关
预览标签
调用接口/v1/{organizationId}/label-print/view/{labelTemplateCode}
,获取生成标签HTML内容,格式为{“label”:“html内容”}
/**
* @param labelTemplateCode 标签模板编码
*/
@GetMapping("/view/{labelTemplateCode}")
public JSONObject preview(@PathVariable String labelTemplateCode, HttpServletRequest request)
目前不支持在页面上录入数据集中的参数,需要手动调该接口然后将参数拼接在路径上面,如/v1/{organizationId}/label-print/view/{labelTemplateCode}?name=xxx&age=xxx
打印示例
目前提供了两种方式用于对接打印机,一种是基于打印机IP地址打印,一种是基于打印机驱动打印,基于IP地址打印采用打印机默认打印设置,不可自定义属性; 基于驱动打印可自定义打印的属性,例如边距、宽高、方向、数量等。
驱动打印
以win10为例,系统安装好打印机驱动以后,可在设置
-设备
-打印机和扫描仪
中看到系统连接的打印机。
我们需要知道打印机的名称,如图所示:
接着我们调用/v1/{organizationId}/label-prints/print-by-drive/{labelTemplateCode}
接口,传入参数即可打印。
/**
* @param organizationId 租户ID
* @param labelTemplateCode 标签模板编码
* @param printerName 打印机名称
* @param quantity 打印数量
* @param request http请求
*/
@ApiOperation(value = "驱动打印标签")
@Permission(level = ResourceLevel.ORGANIZATION)
@GetMapping("/print-by-drive/{labelTemplateCode}")
public void printByDrive(@PathVariable Long organizationId,
@PathVariable String labelTemplateCode,
@RequestParam String printerName,
@RequestParam Integer quantity,
@RequestParam HttpServletRequest request)
IP地址打印
调用/v1/{organizationId}/label-prints/print-by-address/{labelTemplateCode}
接口。
/**
* @param organizationId 租户ID
* @param labelTemplateCode 标签模板编码
* @param ipAddress 打印机IP地址
* @param port 打印机端口
* @param request http请求
*/
@ApiOperation(value = "IP地址打印标签")
@Permission(level = ResourceLevel.ORGANIZATION)
@GetMapping("/print-by-address/{labelTemplateCode}")
public void printByAddress(@PathVariable Long organizationId,
@PathVariable String labelTemplateCode,
@RequestParam String ipAddress,
@RequestParam Integer port,
@RequestParam HttpServletRequest request)