Skip to end of metadata
Go to start of metadata

可以将已经做好的报表集成到第三方系统中,报表是H5的,所以只需要在第三方系统中通过iframe嵌入报表链接即可.

iReport365提供了以下报表集成方式:

// 使用JDK1.8,需要在脚本中增加:
var version = java.lang.System.getProperty("java.version");

if (version.startsWith("1.8.0")) {
load("nashorn:mozilla_compat.js");
}

通过将用户名和密码作为参数放入报表链接中,实现即时登录和权限控制。
【用户名+密码参数集成】

 

  1. 在报表设计器中,预览报表,获得报表的访问链接,例如:

    https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e
  2. 在报表的访问链接中加入用户名及密码参数,例如:

    https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e&username=demo&password=123456

    参数列表如下:

    参数名含义
    username用户的登录名
    password用户的登录密码,明文
    md5password用户的登录密码,使用md5加密的密文

    注:password和md5password只需提供其中一个即可

 

【用户名+Token参数集成】

通过将用户名和第三方token作为参数放入报表链接中,实现即时登录和权限控制。

 

  1. 在报表设计器中,预览报表,获得报表的访问链接,例如:

    https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e
  2. 在报表的访问链接中加入用户名及token参数,例如:

    https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e&username=demo&token=d3812j12m1k21127120

    参数列表如下:

    参数名含义
    username用户的登录名
    token第三方系统生成的用户登录信息的token

     

     

  3. 平台管理-系统设置-用户登录脚本 , 对token进行验证,详情参考下文「与第三方用户系统集成」中的脚本例子

 

 

【与第三方用户系统集成】

如果需要与现有的用户系统集成,用户无需管理新的密码,可以启用iReport365报表平台的用户登录脚本,当用户登录时,执行管理员设定的脚本,比如使用SQL或WebService验证用户输入的密码。

  1. 平台管理-》系统设置-》用户登录脚本-》开启
  2. 设置用户登录脚本 (页面底部有脚本示例)

    脚本中支持的内置参数:

    参数名描述
    result返回值对象
    databaseService数据库操作对象
    webServiceHTTP请求操作对象
    ldapServiceLDAP操作对象
    userService用户操作对象
    redisServiceRedis操作对象
    reportService报表操作对象
    wxcpService微信企业号操作对象
    sessionServiceSession操作对象
    request用户的请求
    outSystem.out
    loggerLogger操作对象


    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 url)

    请求指定的url,并获得返回值


    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)集群删除操作
    从Redis集群中取值
    	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); 
    }
    LDAP用户认证
    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("用户名或密码错误"); 
    }
    WebService用户认证脚本
    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);

 

 

  • No labels