// 使用JDK1.8,需要在脚本中增加:
var version = java.lang.System.getProperty("java.version");
if (version.startsWith("1.8.0")) {
load("nashorn:mozilla_compat.js");
}
【应用场景】
某部门用户数较多时,在报表平台手动管理子账号的效率是非常低的,因此可以为该部门配置自动同步用户,在做推送通知或者角色管理时,绑定该部门即可。
示例脚本
var version = java.lang.System.getProperty("java.version"); if (version.startsWith("1.8.0")) { load("nashorn:mozilla_compat.js"); } importPackage(com.alibaba.fastjson); importPackage(java.util); var data = new JSONArray(); //连接名称,在"连接管理"中配置相应的数据库连接 var connectionName = "local dataset"; //查询用户 var sql="select usercode, uname, phone, deptName from usertable"; var userRows = databaseService.query(connectionName, sql, null); if(userRows.size() > 0){ for(var i = 0; i < userRows.size(); i++){ var row = userRows.get(i); var userObj = new JSONObject(); //用户名,必须使用参数username userObj.put("username", row.get("usercode")); //姓名,必须使用参数name userObj.put("name", row.get("uname")); //手机号,必须使用参数phoneNumber,如果与微信企业号同步,必须提供手机号 userObj.put("phoneNumber", row.get("phone")); //部门,必须使用参数departmentName,会自动创建下级部门,目前只支持1级子部门 userObj.put("departmentName", row.get("deptName")); //多级部门,使用departmentNames, v2.8.7.7以后版本支持 var deptNames = new ArrayList(); deptNames.add("部门"); deptNames.add("子部门"); userObj.put("departmentNames", deptNames); data.add(userObj); } } //如果设置为false,表示不执行本次同步操作 result.setSuccess(true); result.setData(data);
- 脚本中的username, name, phoneNumber三个属性是系统属性,不能修改
- 用户同步后,系统会自动尝试微信企业号的用户同步
- 同步过程中,如果用户在同步源存在/在BI系统也存在, 则会在BI系统修改用户属性
- 同步过程中,如果用户在同步源存在/在BI系统不存在, 则会在BI系统新建用户
- 同步过程中,如果用户在同步源不存在/在BI系统存在, 则会删除BI系统中的用户
- 脚本中的更多例子请参考【报表与用户集成】