客户化超链接获取
应用场景
报表设计和数据分析时插入超链接是比较普遍的需求,但是超链接的插入可能需要结合客户应用的需求进行控制。比如不同用户在数据分析时用户可选择的待插入的超链接需要受到客户系统的权限控制,对于某些特定分析能插入特定的超链接资源等。
客户化方案
产品提供超链接获取客户化接口以满足客户系统集成调用时的个性化的超链接选择需求。下面以数据分析超链接客户化为例进行介绍,复杂报表超链接的客户化保存机制类似。
注意:超链接仍然需要以资源方式保存至平台,客户化接口只是在获取可使用超链接资源时做客户化处理。
数据分析超链接获取客户化,可通过以下步骤实现:
1.数据分析客户化JS中进行弹窗客户化设置,指定超链接选择页面:
客户化JS设置说明:
文件位置:\mis2\custom\fastReport\customAnalysisResourceSetting.js
关键方法说明:
//是否开启客户化窗口,返回值true/false
function getEnableCustom();
返回值:
true:使用客户化窗口
false:不使用客户化窗口
客户可根据情况在方法中返回值
//客户自定义数据分析超链接选择页面
function genSelectLinkUrl(){
返回值:
url路径,例“/mis2/custom/fastReport/jsp/selectURLResPage.jsp"
2.自定义超链接选择页面
数据分析设计时,选择字段插入超链接功能,会弹出超链接设置窗口,默认情况下啊未关联超链接会列出平台中所有的超链接资源。
产品支持该选择页面的自定义,结合实际应用需求定义可选的超链接,如实现与客户应用中用户权限结合的可选超链接设置等。
客户化示例
下面介绍一个具体的超链接选择客户化示例。
示例说明:
示例实现数据分析时超链接选择的客户化,在弹出超链接选择窗口时读取json中分配的用户可使用的超链接,进行超链接资源的过滤。
示例实现:
数据集权限json格式说明:
{"DatasetAuth" : [
{
"url_id": [
30838,
30839,
30365,
30366,
30368
],
"user_id": "root“
},
……
]
}
其中每个节点代表一个用户有权限使用的超链接资源,user_id为用户,url_id为超链接资源id的数组
一.客户化JS设置:
function genSelectLinkUrl(){
return "/mis2/custom/fastReport/jsp/selectURLResPage.jsp";
}
二.自定义页面
1.自定义超链接选择页面:
示例代码:
<script>
var relativeJspUrlPrefix = "<%=relativeJspUrlPrefix %>";
var relativeUrlPrefix = "<%=relativeUrlPrefix %>";
var absoluteUrlPrefix = "<%=absoluteUrlPrefix %>";
var absoluteJspUrlPrefix = "<%=absoluteJspUrlPrefix %>";
var appPhyPath = "<%=appPhyPath %>";
var fatherId="<%=fatherId%>";
var base64 = new Base64();
var userId ="<%=userId%>";
$(function(){
$("#reourceList").height($(window).height()-$("#toolbar").height());
//生成页面工具条
var jsondata = [];
var jsonSettings = {"data":jsondata,"datatype":"json"};
$("#toolbar").rqtoolbar(jsonSettings);
//创建资源列表
createResourceList();
});
//选中资源时的处理
function selectResource(content){
//移除其他节点的bordercolor
$("#list").find("li span").each(function(index,element){
$(element).removeAttr("style");
});
$(content).css({"border-left":"#FF5F3E solid 7px", "background-color":"#F8F8F8"});
var res_id=$(content).attr("resID");
$("#resJson").val(base64.encode(res_id));
}
function submit(){
var resIDBase64=$("#resJson").val();
var resIDString=base64.decode(resIDBase64);
parent.chooseRes(resIDString);
}
function cancelLoad(windowName){
parent.cancelSelect();
}
function createResourceList(){//只是简单示例,这里处理数据的jsp可能是客户系统的一个servlet,返回数据格式也不一定
$.ajax({
url : $.contextPath+"/mis2/custom/fastReport/jsp/getURLResourceList.jsp",
type : 'POST',
dataType : 'json',
context : this,
success : function(data) {//获得json数据
for(resourceIndex in data){//
var resourceObject=data[resourceIndex];
var res_id=resourceObject['resID'];
//创建元素
var liElement=document.createElement("li");
var spanElement=document.createElement("span");
for(item in resourceObject){
spanElement.setAttribute(item,resourceObject[item]);
}
spanElement.setAttribute("class","");
spanElement.setAttribute("onclick","selectResource(this)");
spanElement.innerHTML=resourceObject["resName"];
document.getElementById("list").appendChild(liElement);
liElement.appendChild(spanElement);
}
},
error:function(XMLHttpRequest, textStatus, errorThrown){
}
});
}
</script>
示例页面位置: mis2\custom\fastReport\jsp\selectURLResPage.jsp
2.获取超链接列表
示例代码:
//这个页面只返回数据集信息,调用平台资源接口
String userId = null;
UserInfo ui = (UserInfo) session.getAttribute("sys_UserInfo");
if(ui != null){
userId = ui.getUserId();
}
//读取json文件(改为后台方式)
String jsonFilePath=appPhyPath+"/mis2/custom/fastReport/json/URL.json";
String resourceJSONString=GezConfigUtil.loadTextConfig(jsonFilePath);
//生成一个资源JSON
JSONArray resourceListArray=new JSONArray();
//集深平台资源缓存操作类
ResourceCacheOperator opr = new ResourceCacheOperator();
if(resourceJSONString!=null&&!"".equals(resourceJSONString)){//读取配置中的json信息
JSONObject resourceJSONObject=new JSONObject(resourceJSONString);
//遍历当前的权限信息
JSONArray dataSetAuthArray=resourceJSONObject.getJSONArray("URLAuth");
for(int i=0;i<dataSetAuthArray.length();i++){
JSONObject userAuthInfoObject=dataSetAuthArray.getJSONObject(i);
String authUserID=userAuthInfoObject.has("user_id")?userAuthInfoObject.getString("user_id"):"";
if(authUserID.equals(userId)){//json中配置的用户与当前登录ID相等
JSONArray resJSONArray=userAuthInfoObject.has("url_id")?userAuthInfoObject.getJSONArray("url_id"):new JSONArray();
//根据配置中的资源ID,在产品中找到对应的数据集资源供展现
for(int j=0;j<resJSONArray.length();j++){
String dataSetID=String.valueOf(resJSONArray.get(j));
//在产品的缓存中获得资源的具体信息
ResourceInfo ri = opr.getResource(dataSetID);
String resName=ri.getResName();
//创建一个资源节点供列表中使用
JSONObject resJsonObject=new JSONObject();
resJsonObject.put("resID",dataSetID);
resJsonObject.put("resName",resName);
resourceListArray.put(resJsonObject);
}
break;//不再处理
}
}
}
out.println(resourceListArray.toString());
示例页面位置: mis2\custom\fastReport\jsp\selectURLResPage.jsp
示例实现效果:
数据分析设置字段超链接时,弹出数据集选择窗口:
root用户可选择的超链接如下:
zhangsan用户可选择的超链接如下: