客户化资源保存-与其他应用集成
目录

客户化资源保存

应用场景

产品中资源的保存需要根据客户系统的需要进行调整,比如在平台保存的同时还需要将资源ID记录到客户系统相关表中,客户自行处理资源的保存和管理、资源的分目录存放,自定义保存页面等等。

客户化方案

产品提供资源客户化接口以满足客户系统集成调用时的个性化资源保存需求。资源保存客户化包括资源保存时的客户化和资源保存位置选择的客户化。

客户化资源保存页面:

客户在实际使用中可能要将资源的实际信息记录到客户系统,在客户化资源保存页面中,可以定义按钮等,调用系统定义的JS方法实现客户化的功能

产品默认的保存页面如下图

可通过自定义资源保存页面实现如增加资源信息在客户系统的保存,改变原来保存窗口的布局等客户化的功能。

需调用数据分析本身的保存js函数进行资源必要信息的保存,如保存资源id和目录等必须的信息 ,然后利用保存数据分析之后的回调函数进行客户化信息的保存。

在页面中调用该方法,可以弹出指定的“客户化资源选择页面”,资源选择页面如何指定,下文将有描述。

写法(该写法固定):

parent.showCustomOpenDialog("选择资源目录","ResOnly","window.frames['dialogframeSaveDialog'].frames['customSaveFrame'].setResDirPath_custom",'openDataAnalysis',"256",true,"",true,"10000");

该方法在“客户化资源选择页面”执行指定的确认信息方法后调用,该方法名固定

//该方法中做一些客户化的操作:传入参数值受客户化资源选择页面中parent.chooseRes(resID,customParams)影响。
function setResDirPath_custom(resJson,customParam)
参数:
     resJson:调用parent.chooseRes(resID,customParams)方法时,第一个参数集深平台资源ID中的资源信息,格式为js对象
     customParam:调用parent.chooseRes(resID,customParams)方法时,第二个参数,格式为js对象

该方法可在,资源保存页面信息填写无误后,由客户通过点击指定的按钮调用,提交数据。

/*
自定义保存页面中调用,平台保存方法
@_resName 资源名称
@_resDic 资源保存的目录ID (如不确定,可传值为null)
@_resDesc 资源描述
@customfileName 资源的文件名称
@_customParams 自定义参数,自定义参数会在保存后传入相应的回调方法
*/
function _saveResResource(_resName,_resDic,_resDesc,customfileName,_customParams){}

集深平台在保存资源完毕后会将集深平台该资源的资源ID,以及客户所定义的customParams,返回给该回调函数,客户可在回调函数中做一个符合自己业务逻辑的操作,该方法定义位置将在下文“客户化示例”中说明。

function saveDataAnalysisCallBack(resJSON,customParams)
参数:
     resJSON 资源信息json
     customParams 选择保存目录时的自定义信息

客户化资源选择页面

有时客户需要将集深平台资源记录到客户系统的对应资源目录或硬盘文件中,在这种情况下,往往需要用到客户化资源选择页面。

在产品保存页面上点击“修改资源目录”弹出产品默认的资源目录选择窗口,如下图

产品支持该选择窗口的自定义,如实现与客户应用中用户权限结合的资源过滤选择,直接基于客户系统数据库中的资源信息进行资源选择等。

该方法定义了两个参数,可在勾选客户资源后,由某个点击事件来调用。

例:parent.chooseRes("10000",resJSONString);

parent.chooseRes(resID,customParams);
    参数:
        resID:希望集深系统将资源存储到的集深平台目录资源ID
        customParams:客户化内容,例如客户系统目录ID等,JSON对象格式

集深平台资源ID为产品的资源id(10000为资源中心的资源id,即选择的目录为资源根目录;resJsonString为自定义参数是客户化的参数可传递给自定义保存页面使用)

该方法会关闭当前窗口。

parent.cancelSelect();//该方法会关闭当前客户化资源选择弹窗

 

客户化示例

数据分析

下面以数据分析资源客户化为例进行介绍。

数据分析资源保存客户化包括资源保存时的客户化和资源保存位置选择的客户化,可通过以下步骤实现:

1.数据分析客户化JS中进行弹窗客户化设置,指定资源保存页面及资源目录选择窗口

客户化JS设置说明:

文件位置:\mis2\custom\fastReport\customAnalysisResourceSetting.js

//是否开启客户化窗口,返回值true/false
function getEnableCustom();
返回值:
      true:使用客户化窗口
      false:不使用客户化窗口
客户可根据情况在方法中返回值
//客户自定义数据分析保存时的资源选择窗口
function genSelectAnalysisSavePath()
返回值:
     url路径,例“/mis2/custom/fastReport/jsp/selectSaveAnalysisPage.jsp”

该方法为上文中“客户化资源保存页面”所述的“数据保存后回调函数”,函数需在该位置下实现

function saveDataAnalysisCallBack(resJSON,customParams)
参数:
     resJSON 资源信息json
     customParams 选择保存目录时的自定义信息

该方法可定义客户化资源保存窗口

//自定义资源保存窗口的内容页,返回值为自定义资源保存页面jsp路径
    function genAnalysisSavePage(){
       return "/mis2/custom/fastReport/jsp/customSaveDialogContent.jsp";
    }

下面介绍一个具体的资源保存客户化示例。

示例说明:

示例实现数据分析资源的客户化保存,客户系统调用数据分析新建后,保存资源至指定json文件中。在json中可对资源进行分目录管理,并在保存资源时可选择保存目录。

示例实现:

资源json格式说明:

[
    {
        "resID": "custom_KHXT_300",
        "resName": "资源目录名称",
        "resUser": "root;zhangsan",
        "resList": [
            {
                "resID": "10052",
                "resName": "abc",
                "resUser": "root",
                "gezResID": "集深平台系统ID"
            },
            {
                "resID": "10053",
                "resName": "abc",
                "resUser": "zhangsan",
                "gezResID": "平台系统资源ID"
            }
        ]
    }, ……]

其中每个节点代表一个目录,节点属性包括目录名称(resName)、目录ID(resID)、拥有目录权限的用户(resUser)及目录下包含的资源(reslist),reslist包含多个资源,每个资源包含属性资源id(resID),资源名称(resName),资源创建用户(resUser),平台中保存的资源ID(gezResID)。

json文件位置:mis2\custom\fastReport\json\resourceTable.json

一.客户化js设置:

function getEnableCustom(){
  return true;
 }
 
 function genSelectAnalysisSavePath(){
  return "/mis2/custom/fastReport/jsp/selectSaveAnalysisPage.jsp";
 }
 
 function genAnalysisSavePage(){
  return "/mis2/custom/fastReport/jsp/customSaveDialogContent.jsp";
 
/*
 *保存数据分析之后的回调函数
 @customParams 选择保存目录时的自定义资源
 */
 function saveDataAnalysisCallBack(resJSON,customParams){
  var resId=resJSON.resID;
  var resName=resJSON.resName;
  var resDesc=resJSON.resDesc ;
  var resGradePath=resJSON.resGradePath;
  var resDirId=resJSON.resDirId;
  var resType=resJSON.type;
  var customResID=customParams.resID;
  var customResName=customParams.resName;
  //保存数据到json中
 $.ajax({
  url : $.contextPath+"/mis2/custom/fastReport/jsp/customSaveResource.jsp",
  data : {
   resId:resId,
   resName:resName,
   resDesc:resDesc,
   resGradePath:resGradePath,
   resDirId:resDirId,
   resType:resType,
   customResID:customResID,
   customResName:customResName
  },
  type : 'POST',
  dataType : 'json',
  context : this,
  success : function(data) {
   alert("保存客户化定义成功");
  },
  error:function(XMLHttpRequest, textStatus, errorThrown){
   //获取数据失败
  }
 });
 }

 

二、自定义页面

1.自定义保存窗口

页面实现功能:保存资源至json

示例代码:

a.保存窗口代码:

 <script>
      var relativeJspUrlPrefix = "<%=relativeJspUrlPrefix %>";
       var relativeUrlPrefix = "<%=relativeUrlPrefix %>";
       var absoluteUrlPrefix = "<%=absoluteUrlPrefix %>";
       var absoluteJspUrlPrefix = "<%=absoluteJspUrlPrefix %>";
   var appPhyPath = "<%=appPhyPath %>";
   $(function(){
    var jsondata = [];
    var jsonSettings = {"data":jsondata,"datatype":"json"};
    $("#toolbar").rqtoolbar(jsonSettings);
    $(".operateBtn").rqtoolbar(jsonSettings);
   });
   function chooseResDir_custom(){
    parent.showCustomOpenDialog("选择资源目录","ResOnly","window.frames['dialogframeSaveDialog'].frames['customSaveFrame'].setResDirPath_custom",'openDataAnalysis',"256",true,"",true,"10000");
   }
  
   /**
   * 设置资源目录路径
   */
  function setResDirPath_custom(resJson,customParam){
   //这里显示客户化的信息
   var resName = resJson["resName"];
   //接口中获得客户化的信息
   //转成json(视客户的原本数据格式而定,本示例使用JSON)
   var customParamJSON=customParam;
   var customResDir=customParamJSON.resName;
   var customParamString="";
   try{
    customParamString=JSON.stringify(customParam);
   }catch(e){
  
   }
   $("#customParams").val(customParamString);
   $(".resDir").val(customResDir);
   $("#resDirId").val(resJson["resID"]);
   $("#resGradePath").val(resJson["resGradePath"] + "," + resJson["resID"]);
  
  }
  /**
   * 确定保存
   */
  function doSave(){
   var resName = $(".resName").val();
   var resDirId = $("#resDirId").val();
   var customParams = $("#customParams").val();
   var resGradePath = $("#resGradePath").val();
   parent._saveResResource(resName,resDirId,"",null,customParams);
  }
 
      </script>
   </head>
   <body style="width:100%;height:100%">
   <div id="container">
      <input type="hidden" id="resDirId" value=""></input>
   <input type="hidden" id="customParams" value=""></input>
   <input type="hidden" id="absFilePath" value=""></input>
   <input id="resGradePath" type="hidden"></input>
   <!-- 存为资源和文件: -->
   <div class="resNameDiv">
      <span class="resTitleSpan">名称:</span>
      <input class="resName" size="30"></input>
   </div>
   <div class="saveDirDiv">
      <span class="resTitleSpan">保存目录:</span>
   <input type="text" class="resDir" readonly />
      <span class="operateBtn">
         <button onclick="chooseResDir_custom();">修改资源目录</button>
      </span>
   </div>
   <br/>
   </div>
   <div id="toolbar"  class="saveAndLoadBar">
       <button id="submitBtn" onclick="doSave();">保存</button>
       <button onclick="cancelSave();" >取消</button>
   </div>
   <iframe name="hidden" id="hidden" style="display:none;"></iframe>
   <iframe name="delTemFile" id="delTemFile" style="display:none;"></iframe>
    </body>
</html>
示例页面位置:mis2\custom\fastReport\jsp\customSaveDialogContent.jsp

b.保存资源代码:

String relativeJspUrlPrefix = PathUtils.getRelativeJspUrl(request,"/");
    String relativeUrlPrefix = PathUtils.getRelativeUrl(request,"");
    String absoluteUrlPrefix = PathUtils.getAbsoluteUrl(request,"/");
    String absoluteJspUrlPrefix =PathUtils.getAbsoluteJspUrl(request,"");
 String appPhyPath = PathUtils.getAppPhyPath();
 String jsonFilePath=appPhyPath+"/mis2/custom/fastReport/json/resourceTable.json";
 
 String resId = request.getParameter("resId");
 String resName = request.getParameter("resName");
 String resDesc = request.getParameter("resDesc");
 String resGradePath = request.getParameter("resGradePath");
 String resDirId = request.getParameter("resDirId");
 String resType = request.getParameter("resType");
 String customResID = request.getParameter("customResID");
 String customResName = request.getParameter("customResName");
 
 //获得系统当前登录用户名称
 String userId = null;
 UserInfo ui = (UserInfo) session.getAttribute("sys_UserInfo");
 if(ui != null){
  userId = ui.getUserId();
 }
  
 String resourceJSONObjectString=GezConfigUtil.loadTextConfig(jsonFilePath);
 System.out.println(resourceJSONObjectString);
 
 JSONArray resourceJSONObject=new JSONArray(resourceJSONObjectString);
 String custom_res_id="custom_KHXT_"+new Random().nextInt(1000);
    
 //资源追加
 JSONObject newResourceJSONObject=new JSONObject();
 newResourceJSONObject.put("resID", custom_res_id);
 newResourceJSONObject.put("resName", resName);
 newResourceJSONObject.put("resUser", userId);
 newResourceJSONObject.put("gezResID", resId);
 
 appendResourceJSONObject(resourceJSONObject,customResID,newResourceJSONObject);
 
 String resourcesStr=resourceJSONObject.toString();
 String formatResourcesJson=formatJson(resourcesStr,"  ");
 
 //存储该文件
 File desFile = new File(jsonFilePath);
 try{
  OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(desFile),"UTF-8");     
        BufferedWriter writer=new BufferedWriter(write);         
        writer.write(formatResourcesJson);     
        writer.close();   
 }catch(Exception e){
 
 }
示例页面位置:mis2\custom\fastReport\jsp\customSaveResource.jsp

2.自定义资源保存路径选择页面

页面实现功能:选择资源保存位置(资源保存目录),获取资源json中的目录

示例代码:

a.资源列表展现页面

<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");
    var res_Name=$(content).attr("resName");
    var resJSON={};
    resJSON["resID"]=res_id;
    resJSON["resName"]=res_Name;
    var resJSONString=JSON.stringify(resJSON);
    $("#resJson").val(base64.encode(resJSONString));
   }
  
   function submit(){
    var resIDBase64=$("#resJson").val();
    var resJSONString=base64.decode(resIDBase64);
    parent.chooseRes("10000",resJSONString);//声明该资源参数不是集深平台资源
   }
   function cancelLoad(windowName){
    parent.cancelSelect();
   }
  
   function createResourceList(){//只是简单示例,这里处理数据的jsp可能是客户系统的一个servlet,返回数据格式也不一定
   $.ajax({
    url : $.contextPath+"/mis2/custom/fastReport/jsp/getDicResourceList.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>
   </head>
   <body>
  <input type="hidden" id="resJson" name="resJson" value=""/>
  <div  id="reourceList" class="bl-vernav-warp" style="width:100%;height:100px;overflow:auto">
   <ul class="bl-vernav vernav-level" id="list"></ul>
  </div>
 
  <div id="toolbar">
       <button onclick="submit();">选择</button>
     <button onclick="cancelLoad(window.name);">取消</button>
    </div>
    <div style="clear:both;"></div>
    </body>
</html>
示例页面位置:mis2\custom\fastReport\jsp\selectSaveAnalysisPage.jsp

b.资源读取页面

String relativeJspUrlPrefix = PathUtils.getRelativeJspUrl(request,"/");
String relativeUrlPrefix = PathUtils.getRelativeUrl(request,"");
String absoluteUrlPrefix = PathUtils.getAbsoluteUrl(request,"/");
String absoluteJspUrlPrefix =PathUtils.getAbsoluteJspUrl(request,"");
 String appPhyPath = PathUtils.getAppPhyPath();
 //这个页面只返回数据集信息,调用平台资源接口
 String userId = null;
 UserInfo ui = (UserInfo) session.getAttribute("sys_UserInfo");
 if(ui != null){
  userId = ui.getUserId();
 }
 //读取json文件(改为后台方式)
 String jsonFilePath=appPhyPath+"/mis2/custom/fastReport/json/resourceTable.json";
 String resourceJSONString=GezConfigUtil.loadTextConfig(jsonFilePath);
 
 //生成一个资源JSON
 JSONArray resourceListArray=new JSONArray();
 if(resourceJSONString!=null&&!"".equals(resourceJSONString)){//读取配置中的json信息
  JSONArray resourceJSONArray=new JSONArray(resourceJSONString);
  for(int i=0;i<resourceJSONArray.length();i++){//资源对象,没有考虑树层级
   JSONObject resourceJSONObject=resourceJSONArray.getJSONObject(i);
   String resUser=resourceJSONObject.has("resUser")?resourceJSONObject.getString("resUser"):"";
   String resID=String.valueOf(resourceJSONObject.has("resID")?resourceJSONObject.get("resID"):"");
   String resName=resourceJSONObject.has("resName")?resourceJSONObject.getString("resName"):"";
  
   String[] resUserArray=resUser.split(";");
   //判断资源权限中是否含有用户名
   Arrays.sort(resUserArray);
   int index =  Arrays.binarySearch(resUserArray, userId);
   if(index>=0){//当前用户拥有该资源权限
    //创建一个资源对象添加到列表
    JSONObject _resourceJSONObject=new JSONObject();
    _resourceJSONObject.put("resID",resID);
    _resourceJSONObject.put("resName",resName);
    resourceListArray.put(_resourceJSONObject);
   }
  }
 }
 out.println(resourceListArray.toString());
示例页面位置:mis2\custom\fastReport\jsp\getDicResourceList.jsp

示例实现效果:

保存资源时,弹出资源保存框,选择“修改资源目录”后弹出根据json生成的目录结构.

点击“确定”保存资源,对应会在json中的对应目录节点下增加资源信息。

 

复杂报表

下面以复杂报表资源客户化为例进行介绍。

复杂报表资源保存客户化包括资源保存时的客户化和资源保存位置选择的客户化,可通过以下步骤实现:

1.复杂报表客户化JS中进行弹窗客户化设置,指定资源保存页面及资源目录选择窗口

客户化JS设置说明:

文件位置:\mis2\custom\flexdesigner\customResourceSetting.js

//是否开启客户化窗口,返回值true/false
function getEnableCustom();
返回值:
      true:使用客户化窗口
      false:不使用客户化窗口
客户可根据情况在方法中返回值
//客户自定义数据分析保存时的资源选择窗口
function genSelectAnalysisSavePath()
返回值:
     url路径,例“/mis2/custom/fastReport/jsp/selectSaveAnalysisPage.jsp”

该方法为上文中“客户化资源保存页面”所述的“数据保存后回调函数”,函数需在该位置下实现

function saveDataAnalysisCallBack(resJSON,customParams)
参数:
     resJSON 资源信息json
     customParams 选择保存目录时的自定义信息

该方法可定义客户化资源保存窗口

//自定义资源保存窗口的内容页,返回值为自定义资源保存页面jsp路径
    function genAnalysisSavePage(){
       return "/mis2/custom/fastReport/jsp/customSaveDialogContent.jsp";
    }

下面介绍一个具体的资源保存客户化示例。

示例说明:

示例实现复杂报表资源的客户化保存,客户系统调用复杂报表新建后,保存资源至指定json文件中。在json中可对资源进行分目录管理,并在保存资源时可选择保存目录。

示例实现:

资源json格式说明:

[
    {
        "resID": "custom_KHXT_300",
        "resName": "资源目录名称",
        "resUser": "root;zhangsan",
        "resList": [
            {
                "resID": "10052",
                "resName": "abc",
                "resUser": "root",
                "gezResID": "集深平台系统ID"
            },
            {
                "resID": "10053",
                "resName": "abc",
                "resUser": "zhangsan",
                "gezResID": "平台系统资源ID"
            }
        ]
    }, ……]

其中每个节点代表一个目录,节点属性包括目录名称(resName)、目录ID(resID)、拥有目录权限的用户(resUser)及目录下包含的资源(reslist),reslist包含多个资源,每个资源包含属性资源id(resID),资源名称(resName),资源创建用户(resUser),平台中保存的资源ID(gezResID)。

json文件位置:mis2\custom\flexdesigner\json\resourceTable.json

一.客户化js设置:

function getEnableCustom(){
  return true;
 }
 
 function genSelectAnalysisSavePath(){
  return "/mis2/custom/fastReport/jsp/selectSaveAnalysisPage.jsp";
 }
 
 function genAnalysisSavePage(){
  return "/mis2/custom/fastReport/jsp/customSaveDialogContent.jsp";
 
/*
 *保存数据分析之后的回调函数
 @customParams 选择保存目录时的自定义资源
 */
 function saveDataAnalysisCallBack(resJSON,customParams){
  var resId=resJSON.resID;
  var resName=resJSON.resName;
  var resDesc=resJSON.resDesc ;
  var resGradePath=resJSON.resGradePath;
  var resDirId=resJSON.resDirId;
  var resType=resJSON.type;
  var customResID=customParams.resID;
  var customResName=customParams.resName;
  //保存数据到json中
 $.ajax({
  url : $.contextPath+"/mis2/custom/fastReport/jsp/customSaveResource.jsp",
  data : {
   resId:resId,
   resName:resName,
   resDesc:resDesc,
   resGradePath:resGradePath,
   resDirId:resDirId,
   resType:resType,
   customResID:customResID,
   customResName:customResName
  },
  type : 'POST',
  dataType : 'json',
  context : this,
  success : function(data) {
   alert("保存客户化定义成功");
  },
  error:function(XMLHttpRequest, textStatus, errorThrown){
   //获取数据失败
  }
 });
 }

 

二、自定义页面

1.自定义保存窗口

页面实现功能:保存资源至json

示例代码:

a.保存窗口代码:

 <script>
      var relativeJspUrlPrefix = "<%=relativeJspUrlPrefix %>";
       var relativeUrlPrefix = "<%=relativeUrlPrefix %>";
       var absoluteUrlPrefix = "<%=absoluteUrlPrefix %>";
       var absoluteJspUrlPrefix = "<%=absoluteJspUrlPrefix %>";
   var appPhyPath = "<%=appPhyPath %>";
   $(function(){
    var jsondata = [];
    var jsonSettings = {"data":jsondata,"datatype":"json"};
    $("#toolbar").rqtoolbar(jsonSettings);
    $(".operateBtn").rqtoolbar(jsonSettings);
   });
   function chooseResDir_custom(){
    parent.showCustomOpenDialog("选择资源目录","ResOnly","window.frames['dialogframeSaveDialog'].frames['customSaveFrame'].setResDirPath_custom",'openDataAnalysis',"256",true,"",true,"10000");
   }
  
   /**
   * 设置资源目录路径
   */
  function setResDirPath_custom(resJson,customParam){
   //这里显示客户化的信息
   var resName = resJson["resName"];
   //接口中获得客户化的信息
   //转成json(视客户的原本数据格式而定,本示例使用JSON)
   var customParamJSON=customParam;
   var customResDir=customParamJSON.resName;
   var customParamString="";
   try{
    customParamString=JSON.stringify(customParam);
   }catch(e){
  
   }
   $("#customParams").val(customParamString);
   $(".resDir").val(customResDir);
   $("#resDirId").val(resJson["resID"]);
   $("#resGradePath").val(resJson["resGradePath"] + "," + resJson["resID"]);
  
  }
  /**
   * 确定保存
   */
  function doSave(){
   var resName = $(".resName").val();
   var resDirId = $("#resDirId").val();
   var customParams = $("#customParams").val();
   var resGradePath = $("#resGradePath").val();
   parent._saveResResource(resName,resDirId,"",null,customParams);
  }
 
      </script>
   </head>
   <body style="width:100%;height:100%">
   <div id="container">
      <input type="hidden" id="resDirId" value=""></input>
   <input type="hidden" id="customParams" value=""></input>
   <input type="hidden" id="absFilePath" value=""></input>
   <input id="resGradePath" type="hidden"></input>
   <!-- 存为资源和文件: -->
   <div class="resNameDiv">
      <span class="resTitleSpan">名称:</span>
      <input class="resName" size="30"></input>
   </div>
   <div class="saveDirDiv">
      <span class="resTitleSpan">保存目录:</span>
   <input type="text" class="resDir" readonly />
      <span class="operateBtn">
         <button onclick="chooseResDir_custom();">修改资源目录</button>
      </span>
   </div>
   <br/>
   </div>
   <div id="toolbar"  class="saveAndLoadBar">
       <button id="submitBtn" onclick="doSave();">保存</button>
       <button onclick="cancelSave();" >取消</button>
   </div>
   <iframe name="hidden" id="hidden" style="display:none;"></iframe>
   <iframe name="delTemFile" id="delTemFile" style="display:none;"></iframe>
    </body>
</html>
示例页面位置:mis2\custom\flexdesigner\jsp\customSaveDialogContent.jsp

b.保存资源代码:

String relativeJspUrlPrefix = PathUtils.getRelativeJspUrl(request,"/");
    String relativeUrlPrefix = PathUtils.getRelativeUrl(request,"");
    String absoluteUrlPrefix = PathUtils.getAbsoluteUrl(request,"/");
    String absoluteJspUrlPrefix =PathUtils.getAbsoluteJspUrl(request,"");
 String appPhyPath = PathUtils.getAppPhyPath();
 String jsonFilePath=appPhyPath+"/mis2/custom/flexdesigner/json/resourceTable.json";
 
 String resId = request.getParameter("resId");
 String resName = request.getParameter("resName");
 String resDesc = request.getParameter("resDesc");
 String resGradePath = request.getParameter("resGradePath");
 String resDirId = request.getParameter("resDirId");
 String resType = request.getParameter("resType");
 String customResID = request.getParameter("customResID");
 String customResName = request.getParameter("customResName");
 
 //获得系统当前登录用户名称
 String userId = null;
 UserInfo ui = (UserInfo) session.getAttribute("sys_UserInfo");
 if(ui != null){
  userId = ui.getUserId();
 }
  
 String resourceJSONObjectString=GezConfigUtil.loadTextConfig(jsonFilePath);
 System.out.println(resourceJSONObjectString);
 
 JSONArray resourceJSONObject=new JSONArray(resourceJSONObjectString);
 String custom_res_id="custom_KHXT_"+new Random().nextInt(1000);
    
 //资源追加
 JSONObject newResourceJSONObject=new JSONObject();
 newResourceJSONObject.put("resID", custom_res_id);
 newResourceJSONObject.put("resName", resName);
 newResourceJSONObject.put("resUser", userId);
 newResourceJSONObject.put("gezResID", resId);
 
 appendResourceJSONObject(resourceJSONObject,customResID,newResourceJSONObject);
 
 String resourcesStr=resourceJSONObject.toString();
 String formatResourcesJson=formatJson(resourcesStr,"  ");
 
 //存储该文件
 File desFile = new File(jsonFilePath);
 try{
  OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(desFile),"UTF-8");     
        BufferedWriter writer=new BufferedWriter(write);         
        writer.write(formatResourcesJson);     
        writer.close();   
 }catch(Exception e){
 
 }
示例页面位置:mis2\custom\flexdesigner\jsp\customSaveResource.jsp

2.自定义资源保存路径选择页面

页面实现功能:选择资源保存位置(资源保存目录),获取资源json中的目录

示例代码:

a.资源列表展现页面

<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");
    var res_Name=$(content).attr("resName");
    var resJSON={};
    resJSON["resID"]=res_id;
    resJSON["resName"]=res_Name;
    var resJSONString=JSON.stringify(resJSON);
    $("#resJson").val(base64.encode(resJSONString));
   }
  
   function submit(){
    var resIDBase64=$("#resJson").val();
    var resJSONString=base64.decode(resIDBase64);
    parent.chooseRes("10000",resJSONString);//声明该资源参数不是集深平台资源
   }
   function cancelLoad(windowName){
    parent.cancelSelect();
   }
  
   function createResourceList(){//只是简单示例,这里处理数据的jsp可能是客户系统的一个servlet,返回数据格式也不一定
   $.ajax({
    url : $.contextPath+"/mis2/custom/flexdesigner/jsp/getDicResourceList.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>
   </head>
   <body>
  <input type="hidden" id="resJson" name="resJson" value=""/>
  <div  id="reourceList" class="bl-vernav-warp" style="width:100%;height:100px;overflow:auto">
   <ul class="bl-vernav vernav-level" id="list"></ul>
  </div>
 
  <div id="toolbar">
       <button onclick="submit();">选择</button>
     <button onclick="cancelLoad(window.name);">取消</button>
    </div>
    <div style="clear:both;"></div>
    </body>
</html>
示例页面位置:mis2\custom\flexdesigner\jsp\selectSaveAnalysisPage.jsp

b.资源读取页面

String relativeJspUrlPrefix = PathUtils.getRelativeJspUrl(request,"/");
String relativeUrlPrefix = PathUtils.getRelativeUrl(request,"");
String absoluteUrlPrefix = PathUtils.getAbsoluteUrl(request,"/");
String absoluteJspUrlPrefix =PathUtils.getAbsoluteJspUrl(request,"");
 String appPhyPath = PathUtils.getAppPhyPath();
 //这个页面只返回数据集信息,调用平台资源接口
 String userId = null;
 UserInfo ui = (UserInfo) session.getAttribute("sys_UserInfo");
 if(ui != null){
  userId = ui.getUserId();
 }
 //读取json文件(改为后台方式)
 String jsonFilePath=appPhyPath+"/mis2/custom/flexdesigner/json/resourceTable.json";
 String resourceJSONString=GezConfigUtil.loadTextConfig(jsonFilePath);
 
 //生成一个资源JSON
 JSONArray resourceListArray=new JSONArray();
 if(resourceJSONString!=null&&!"".equals(resourceJSONString)){//读取配置中的json信息
  JSONArray resourceJSONArray=new JSONArray(resourceJSONString);
  for(int i=0;i<resourceJSONArray.length();i++){//资源对象,没有考虑树层级
   JSONObject resourceJSONObject=resourceJSONArray.getJSONObject(i);
   String resUser=resourceJSONObject.has("resUser")?resourceJSONObject.getString("resUser"):"";
   String resID=String.valueOf(resourceJSONObject.has("resID")?resourceJSONObject.get("resID"):"");
   String resName=resourceJSONObject.has("resName")?resourceJSONObject.getString("resName"):"";
  
   String[] resUserArray=resUser.split(";");
   //判断资源权限中是否含有用户名
   Arrays.sort(resUserArray);
   int index =  Arrays.binarySearch(resUserArray, userId);
   if(index>=0){//当前用户拥有该资源权限
    //创建一个资源对象添加到列表
    JSONObject _resourceJSONObject=new JSONObject();
    _resourceJSONObject.put("resID",resID);
    _resourceJSONObject.put("resName",resName);
    resourceListArray.put(_resourceJSONObject);
   }
  }
 }
 out.println(resourceListArray.toString());
示例页面位置:mis2\custom\flexdesigner\jsp\getDicResourceList.jsp