展示当前用户在决策系统中能看那些报表及帆软请求json返回值的处理方式

楼主
我是社区第8408位番薯,欢迎点我头像关注我哦~
本帖最后由 sevn 于 2015-9-6 21:18 编辑

展示当前用户在决策系统中能看那些报表及帆软请求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中
完整代码查看附件
    --设计模板调用程序数据集
  添加程序数据集
[size=15.3333330154419px]    测试数据用管理员名字
[size=15.3333330154419px]   
     构建树数据集
   
   添加一个模板参数
设计模板为组织树(见文档组织),可查看附件模板
登录决策系统,添加该模板数据分析预览地址到主页

管理员登入:
普通用户登录Anna



分享扩散:
参与人数 +1 F币 +325 理由
传说哥 + 325 赞一个!

查看全部评分

沙发
发表于 2015-9-6 20:52:37
楼主还是用word来发帖吧 这个格式如果不做处理  评分人 很累  
板凳
发表于 2015-9-8 16:22:44
地板
发表于 2017-11-17 18:31:58
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

3回帖数 1关注人数 11308浏览人数
最后回复于:2017-11-17 18:31

返回顶部 返回列表