wuxiren123

          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          2017年3月21日 #

          FineReport中樹數據集如何實現組織樹報表

          組織樹報表中由id與父id來實現組織樹報表,若層級數較多時,對每個單元格設置過濾條件和形態會比較繁瑣,因此FineReport提供了一種特殊的數據集——樹數據集,只需要簡單的設置就能自動遞歸出層級,方便的實現如下圖組織樹報表:

          圖一

          圖二


          構建樹

          • 新建報表,添加數據集

          新建工作薄,添加數據集ds1取出原始數據,SQL語句為SELECT * FROM 公司部門。

          • 定義樹數據集

          1)根據父字段構建樹

          使用情形:原始表結構中符合ID、parentID結構,我們可以通過父ID這個字段生成樹,添加樹數據集,如下圖:

           

          2)根據數據長度構建樹

          使用情形:原始表結構中所有ID都在一列中,且沒有父ID字段,但是ID是有規律的,每組的長度相同,且子級的前N位就是父級編號,添加樹數據集,如下圖:

           

           

          •  預覽數據

          預覽樹數據集,可看到已自動生成遞歸樹數據,FR_GEN_0為最高層,依次往下,如下:

          縱向組織樹編輯

          按照下圖所示將對應的數據列拖入到單元格中,并將A2單元格的左父格設置為A1,A3單元格的左父格設置為A2:

            

          • 條件屬性

          有上面預覽數據可以看到從二層FR_GEN_1開始,就會有空白數據,這是因為數據庫中存儲的數據有上一級部門本身的部門名稱和部門ID,其上一級部門的部門級數會低一級,比如說上述數據的第一行為總部,雖然總部下面有子部門,但是數據庫中還是要存儲總部這個部門的部門名稱和部門ID的,總部對應的級數為一級,那么其對應的數據記錄行里面就只有FR_GEN_0層,下面的FR_GEN_1和FR_GEN_2這兩層就會沒有數據,顯示為空白。

          在模板制作過程中,從第二層級開始就會有空白數據,需要將空白數據隱藏掉,選中A2和A3單元格,添加條件屬性,當數據為空時隱藏該行,如下圖: 

          如果組織結構的層級結構不確定,即有的層級有子層,有的層級沒有子層時,其組織樹報表的實現方式請查看不規范組織樹報表

          • 其它設置

          由于自動生成的字段是編碼,可以使用數據字典將其轉為對應的部門名稱,如下圖:

           

          • 保存與預覽

          保存模板,點擊分頁預覽,效果如圖一。

          橫向組織樹編輯

          按照下圖所示將對應的數據列拖入到單元格中,在右側單元格屬性表-擴展屬性中將B1、C1單元格的擴展方向設為橫向,

          并將B1單元格的左父格設置為A1,C1單元格的左父格設置為B1:

           

          • 條件屬性

          有上面預覽數據可以看到從二層FR_GEN_1開始,就會有空白數據,這是因為數據庫中存儲的數據有上一級部門本身的部門名稱和部門ID,其上一級部門的部門級數會低一級,比如說上述數據的第一列為總部,雖然總部下面有子部門,但是數據庫中還是要存儲總部這個部門的部門名稱和部門ID的,總部對應的級數為一級,那么其對應的數據記錄列里面就只有FR_GEN_0層,下面的FR_GEN_1和FR_GEN_2這兩層就會沒有數據,顯示為空白。

          在模板制作過程中,從第二層級開始就會有空白數據,需要將空白數據隱藏掉,選中B1和C1單元格,添加條件屬性,當數據為空時隱藏該列,如下圖:

          如果組織結構的層級結構不確定,即有的層級有子層,有的層級沒有子層時,其組織樹報表的實現方式請查看不規則組織樹報表

          • 其它設置

          由于自動生成的字段是編碼,可以使用數據字典將其轉為對應的部門名稱,如下圖:

           

          • 保存與預覽

          保存模板,點擊分頁預覽,效果如圖二。

          posted @ 2017-04-06 15:56 喝水居然長肉 閱讀(132) | 評論 (0)編輯 收藏

          FineReport中如何自定義登錄界面

          在登錄平臺時,不希望使用FR默認的內置登錄界面,想通過自定義登錄界面實現登錄操作,內置登錄界面如下圖:



           

          登錄界面,獲取到用戶名和密碼的值,發送到報表系統,報表服務帶著這兩個參數訪問認證地址進行認證。

          自定義登錄界面

          登錄界面設置

          自定義html登錄頁面:命名為login.html,并保存在%FR_HOME%\WebReport下,代碼如下:

          <html>  
          <head> 
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <script type="text/javascript" src="ReportServer?op=emb&resource=finereport.js"></script>  
          <script type="text/javascript">  
          function doSubmit() {  
              
          var username = FR.cjkEncode(document.getElementById("username").value); //獲取輸入的用戶名  
              var password = FR.cjkEncode(document.getElementById("password").value);  //獲取輸入的參數  
              jQuery.ajax({  
               url:
          "http://localhost:8075/WebReport/ReportServer?op=fs_load&cmd=sso",//單點登錄的管理平臺報表服務器  
               dataType:"jsonp",//跨域采用jsonp方式  
               data:{"fr_username":username,"fr_password":password},//獲取用戶名密碼  
               jsonp:"callback",  
               timeout:
          5000,//超時時間(單位:毫秒)  
               success:function(data) {  
                      
          if (data.status === "success"
              window.location
          =data.url;//認證成功跳轉頁面,因為ajax不支持重定向所有需要跳轉的設置 
                            //登錄成功     
                      }
           else if (data.status === "fail"){  
                           alert(
          "用戶名或密碼錯誤");//登錄失敗(用戶名或密碼錯誤)  
                      }
            
               }
          ,  
               error:
          function(){  
                     alert(
          "超時或服務器其他錯誤");// 登錄失敗(超時或服務器其他錯誤)  
               }
            
          }
          ); 
          }
            
          </script>  
          </head>  
          <body>  
          <p>請登錄</p>  
          <form name="login" method="POST">  
              
          <p>  
                  用戶名:  
                  
          <input id="username" type="text" />  
              
          </p>  
              
          <p>  
                  密 碼:  
                  
          <input id="password" type="password" />  
              
          </p>  
              
          <input type="button" value="登錄" onclick="doSubmit()"/>  
          </form>  
          </body>  
          </html>

           Dosubmit()是主要的邏輯判斷,實現的是將對應的值傳給報表服務的邏輯實現過程。

          調用登錄界面

          登錄系統,選擇管理系統>外觀配置,在登錄頁選項中選擇設置登錄網頁,并輸入自定義登錄頁面的路徑:login.html,如下圖所示:



           

          總結

          比如說若用戶有自己的系統,將FR繼承到自己已有系統中,該系統有自己的登錄界面,希望登錄自己系統的同時也登錄報表(即將輸入的用戶名密碼也發送到報表服務進行認證),從而訪問報表時不需要再次登錄即單點登錄,步驟如下:

          1、找到您系統登錄頁面如login.jsp;

          2、在login.jsp頁面head中引入finereport.js;

          3、在login.jsp頁面JavaScript中定義function如dosubmit,在dosubmit中獲取到輸入的用戶名密碼,并通過iframe方式或者ajax方式進行認證。

          4、在FineReport平臺系統中設置自定義登錄頁面地址為您系統的登錄地址。

          若是OA系統或者報表系統和項目系統不再同一個服務器上,可以進行ajax跨域異步單點登錄。

          Session傳值

          對于java系統來說,可將用戶名與密碼放在session中,把報表集成在同一環境下面,報表可自動獲取到用戶名和密碼的值進行驗證。

          還原默認登錄界面

          如果在決策系統修改了登錄界面后,希望還原成系統默認登錄界面,應該如何實現呢?

          1)打開安裝目錄%FR_HOME%\WebReport\WEB-INF\resources,找到fsconfig.xml



           

          2)刪除loginUrl屬性

          右擊fsconfig.xml文件,選擇編輯器打開,刪除文件中的loginUrl屬性,如下,刪除login.htm:



           

          此時請務必關閉設計器,重新開啟,再次進入數據決策系統,即可回到默認的登錄界面。

          還原到默認的登錄界面后,如果再需要設置登錄界面,可以用管理員賬戶登錄,進行設置即可。

          posted @ 2017-03-21 16:58 喝水居然長肉 閱讀(117) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 安泽县| 汉沽区| 行唐县| 绥滨县| 公主岭市| 高平市| 福清市| 河池市| 丰都县| 通渭县| 喀喇| 安康市| 阿巴嘎旗| 新密市| 清流县| 永年县| 屏东县| 石屏县| 上犹县| 农安县| 南郑县| 威海市| 伊通| 奉新县| 隆子县| 高青县| 边坝县| 南丰县| 仁怀市| 蒙山县| 抚顺县| 汨罗市| 河北省| 富裕县| 漯河市| 阆中市| 长武县| 元朗区| 特克斯县| 乌拉特后旗| 贺州市|