可以将已经做好的报表集成到第三方系统中,报表是H5的,所以只需要在第三方系统中通过iframe嵌入报表链接即可. iReport365提供了以下报表集成方式: |
// 使用JDK1.8,需要在脚本中增加: if (version.startsWith("1.8.0")) { |
在报表设计器中,预览报表,获得报表的访问链接,例如:
https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e |
在报表的访问链接中加入用户名及密码参数,例如:
https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e&username=demo&password=123456 |
参数列表如下:
参数名 | 含义 |
---|---|
username | 用户的登录名 |
password | 用户的登录密码,明文 |
md5password | 用户的登录密码,使用md5加密的密文 |
注:password和md5password只需提供其中一个即可
通过将用户名和第三方token作为参数放入报表链接中,实现即时登录和权限控制。
在报表设计器中,预览报表,获得报表的访问链接,例如:
https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e |
在报表的访问链接中加入用户名及token参数,例如:
https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e&username=demo&token=d3812j12m1k21127120 |
参数列表如下:
参数名 | 含义 |
---|---|
username | 用户的登录名 |
token | 第三方系统生成的用户登录信息的token |
如果需要与现有的用户系统集成,用户无需管理新的密码,可以启用iReport365报表平台的用户登录脚本,当用户登录时,执行管理员设定的脚本,比如使用SQL或WebService验证用户输入的密码。
设置用户登录脚本 (页面底部有脚本示例)
脚本中支持的内置参数:
参数名 | 描述 |
---|---|
result | 返回值对象 |
databaseService | 数据库操作对象 |
webService | HTTP请求操作对象 |
ldapService | LDAP操作对象 |
userService | 用户操作对象 |
redisService | Redis操作对象 |
reportService | 报表操作对象 |
wxcpService | 微信企业号操作对象 |
sessionService | Session操作对象 |
request | 用户的请求 |
out | System.out |
logger | Logger操作对象 |
result返回值对象属性
属性名 | 描述 |
---|---|
success | 验证是否成功 |
message | 错误消息 |
context | 上下文 |
useStandardVerification | 是否使用系统用户库验证用户,如果该属性设置为true, 则无论脚本验证结果如何,都是用系统用户库验证 |
databaseService对象方法
方法原型 | 描述 |
---|---|
public List query(String connectionName, String sql) | 通过指定的连接,执行指定的sql,并获得List的返回值 |
public List query(String connectionName, String sql, List param) | 通过指定的连接,执行指定的sql,传入sql中需要的参数,并获得List的返回值 |
webService对象方法
方法原型 | 描述 |
---|---|
public String get(String urlStr) | 请求指定的url,并获得返回值 |
public String get(String urlStr, Map<String, String> header) | |
public String post(String urlStr) | |
public String post(String urlStr, String bodyContent) | |
public String post(String urlStr, String contentType, String bodyContent) | |
public String post(String urlStr, Map<String, String> header, String bodyContent) |
userService对象方法
方法原型 | 描述 |
---|---|
public String hasUser(String username) | 系统中是否有这个用户 |
public String verifyUser(String username, String password, boolean originPassword) | 使用系统的账号系统验证用户名和密码,originPassword如果为true,则不对密码进行处理 |
public boolean loginUser(String username) | 用户登录 |
sessionService对象方法
方法原型 | 描述 |
---|---|
public void putString(String key, String value) | 向session中存入字符串 |
public String getString(String key) | 从session中获取字符串 |
ldapService对象方法
方法原型 | 描述 |
---|---|
public boolean auth(String host, String port, String type, String domain, String username, String password) | LDAP认证 |
wxcpService对象方法
方法原型 | 描述 |
---|---|
public void addUserToTag(String configId, String tagName, Collection<String> usernames) | 将微信用户添加到指定的TAG中 |
var wxConfigId = "abc"; //配置ID,报表平台->微信企业号->编辑->ID var wxTagName = "标签名称"; //微信企业号中的标签名称 var usernames = JSONArray(); usernames.add("username1"); //报表平台用户名 usernames.add("username2"); //报表平台用户名 wxcpService.addUserToTag(wxConfigId, wxTagName, usernames); |
redisService对象方法
方法原型 | 描述 |
---|---|
public String get(String ip, int port, String key) | 单机读取操作 |
public String get(String ip, int port, String key, String password) | 单机认证、读取操作 |
public String clusterGet(List addrs, String key) | 集群读取操作 |
public void del(String ip, int port, String key) | 单机删除操作 |
public void del(String ip, int port, String key, String password) | 单机认证、删除操作 |
public void clusterDel(List addrs, String key) | 集群删除操作 |
var redisKey = "theKey"; var redisAddrs = new ArrayList(); redisAddrs.add("192.168.1.2:7000"); redisAddrs.add("192.168.1.3:7001"); redisAddrs.add("192.168.1.4:7002"); var theValue = redisService.clusterGet(redisAddrs, redisKey); |
脚本示例:
importPackage(java.util); importPackage(org.apache.commons.codec.digest); //获取用户登录时填写的用户名和密码 var username=request.getParameter("username"); var password=request.getParameter("password"); //将密码MD5加密 var md5Password = DigestUtils.md5Hex(password); //用户库的连接名称 var connectionName = "local dataset"; var param = new ArrayList(); param.add(username); param.add(md5Password); //查询用户库 var sql = "select username,password from users where username=? and password=?"; var data = databaseService.query(connectionName, sql, param); if(data.size() === 0){ result.setSuccess(false); result.setMessage("用户名或密码错误"); }else{ result.setSuccess(true); } |
importPackage(java.util); importPackage(org.apache.commons.codec.digest); //获取用户登录时填写的用户名和密码 var username=request.getParameter("username"); var password=request.getParameter("password"); //LDAP查询 var host = "127.0.0.1";//LDAP主机地址 var port = "389"; //LDAP端口 var type = "simple"; //不用修改 var domain = "abc.com"; //域 var success = ldapService.auth(host,port,type,domain,username,password); if(success){ result.setSuccess(true); }else{ result.setSuccess(false); result.setMessage("用户名或密码错误"); } |
importPackage(java.util); importPackage(org.apache.commons.codec.digest); importPackage(com.alibaba.fastjson); importPackage(org.apache.commons.lang); //获取用户登录时填写的用户名和密码 var username=request.getParameter("username"); var password=request.getParameter("password"); var str = webService.get("http://127.0.0.1:8080/login?username="+username+"&password="+password); if(!StringUtils.isEmpty(str)){ var json = JSONObject.parseObject(str); var success = json.getBoolean("success"); if(!success){ result.setSuccess(false); result.setMessage("用户名或密码错误"); }else{ result.setSuccess(true); } }else{ result.setSuccess(false); result.setMessage("用户名或密码错误"); } |
importPackage(java.util); importPackage(com.alibaba.fastjson); importPackage(org.apache.commons.lang); var dataPermissionData = new HashMap(); //获取报表URL传入的参数 var accessToken=request.getParameter("accessToken"); var appSecret="some code"; var url = "http://www.abc.com/shopguide/api/org/getOrgWithinAuth?appSecret="+appSecret+"&accessToken="+accessToken; logger.debug("ur: "+url); //调用接口,获取相关权限 var response = webService.get(url); logger.debug("response: "+response); if(!StringUtils.isEmpty(response)){ //拼接权限数据 var json = JSONObject.parseObject(response); var message = json.getString("msg"); logger.debug("message: "+message); if(StringUtils.equals(message, "success")){ var values = json.getJSONArray("value"); logger.debug("values: "+values); if(values != null){ var codeArr = new ArrayList(); for(var m = 0; m < values.size(); m++){ var item = values.getJSONObject(m); var code = item.getString("code"); codeArr.add(code); } //生成SHOPCODE的权限数据 dataPermissionData.put("SHOPCODE", codeArr); } } } result.setSuccess(true); result.setData(dataPermissionData); logger.debug("dataPermissionData: "+dataPermissionData); |