展示当前用户在决策系统中能看那些报表及帆软请求json返回值的处理方式
1. 问题描述
1.客户在使用决策系统的时候,希望主页能够直接展示该用户能看到的报表的结构图,可能还有扩展功能,比如点击节点跳转到对应的页面。
2.部分二次开发人员知道帆软的接口,但是返回的是一个复杂的json,对象希望有个通用点的解决方式。
2.使用说明
2.1原理
使用程序数据集调用帆软的当前用户的权限模板数据(还有其他的接口,可以咨询企业QQ或者查找帮助文档),对返回的数据进行2次开发,使其可以反映一个2维素组,满足程序数据集要求。
2.2 步骤
--构建程序数据集
1.构造函数,定义表结构。定义一个参数currenName,代表着当前用户名即参数$fr_useranme
public getUserAuthData() {
// 定义参数
this.parameters = new Parameter[] { newParameter("currentName") };
// 定义程序数据集列名
columnNames = new String[columnNum];
for (int i = 0; i < columnNum; i++) {
columnNames = "column#" + String.valueOf(i);
}
}
2.处理数据
public void init() {
// 确保只被执行一次
if (valueList != null) {
return;
}
//获取userid
String userid = null;
try {
//调用接口UserControl.getInstance().getByUserName(parameters[0].getValue().toString()).getId(),将当前用户名转换成ID
userid =String.valueOf(UserControl.getInstance().getByUserName(parameters[0].getValue().toString()).getId());
} catch (Exception e) {
e.printStackTrace();
}
FRContext.getLogger().info("userid="+userid);
//获取当前userId对应的权限模板数据
valueList = new ArrayList();
colNum =5;
try {
JSONArraymyJson=EntryControl.getInstance().getRootNode().createAuthorizedEntryJSONArray(Long.valueOf(userid));
for (int j=0;j<myJson.length();j++ )
{
intnn=myJson.length();
Object[] zItem = new Object[colNum];
zItem[0]=myJson.getJSONObject(j).getString("id");
zItem[1]="-1";
zItem[2] = myJson.getJSONObject(j).getString("text");
zItem[3] =myJson.getJSONObject(j).getString("type");
zItem[4] =myJson.getJSONObject(j).getString("description");
valueList.add(zItem);
valueList.addAll(filter(myJson.getJSONObject(j).getJSONArray("ChildNodes"),null));
}
} catch (Exception e) {
e.printStackTrace();
}
}
3.递归处理json结构
public ArrayList filter(JSONArraynewNodes, ArrayList result) throws JSONException {
if (null == newNodes &&newNodes.length() ==0) {
return null;
}
if(result==null) {
result = new ArrayList();
}
for (int i = 0, l = newNodes.length();i<l;i++) {
Object[] zItem = newObject[colNum];
zItem[0]=newNodes.getJSONObject(i).getString("id");
FRContext.getLogger().info("11111");
zItem[1]=newNodes.getJSONObject(i).getString("parentId");
zItem[2]=newNodes.getJSONObject(i).getString("text");
zItem[3]=newNodes.getJSONObject(i).getString("type");
zItem[4]=newNodes.getJSONObject(i).getString("description");
if(newNodes.getJSONObject(i).has("ChildNodes"))
{
if(newNodes.getJSONObject(i).getJSONArray("ChildNodes").length()>0)
{
filter(newNodes.getJSONObject(i).getJSONArray("ChildNodes"),result);
}
}
result.add(zItem);
}
return result;
};
将生成的程序数据集放到WEB-INF-classes->com->fr->function中
完整代码查看附件
--设计模板调用程序数据集
添加程序数据集