隨筆 - 225  文章 - 98  trackbacks - 0
          <2011年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          隨筆分類

          相冊

          報表工具廠商們

          搜索

          •  

          最新評論

          閱讀排行榜

          問題:實際應用環境中,不同角色的人可能對數據具有不同的訪問權限,通過直接在SQL語句中篩選出需要的數據制作模板可以解決該需求,但對于角色較多的情況,就需要制作很多張樣式相同只是數據集不同的報表,不利于后期的維護并且加大了報表制作的工作量。

          方案:針對該問題,在Java報表FineReport中,可以利用SQL參數配合參數處理器再結合權限以完成該需求。使用該方案只需要制作一張表樣,利用SQL中的參數進行動態過濾達到該目的。下面具體描述該方案的實施過程。

           

          第一步:數據準備

              這里使用的是DEMO數據,主要為了演示該方案的操作,具體使用的時候需要根據具體的數據情況進行調整:

          表:datas

          ID

          DATA

          ROLE

          1

          100

          0

          2

          200

          0

          3

          300

          0

          4

          400

          1

          5

          500

          1

          6

          600

          2

          7

          700

          2

          8

          800

          3

           

          ID:編號

          DATA:數據

          ROLE:可查看角色編碼

           

          表:roles

          ID

          ROLENANME

          ROLE

          1

          總裁

          0

          2

          總經理

          1

          3

          部門經理

          2

          4

          銷售人員

          3

          ID:編號

          ROLENAME:角色名稱

          ROLE:角色編碼

           

          第二步:制作模板

          2.1 新建一張模板,報表數據集中新建一個“數據庫查詢數據集”,名稱為:datas,SQL語句寫成“select * from datas where ROLE>=[?ROLE?]

          2.2 拖拽新建的報表數據集datas的數據列至報表中,如下圖所示:

          http://www.finereport.com/forumimages/tgqxkzsjfw1.jpg

          2.3 新建一個服務器數據字典,用于進行角色名稱與角色編碼的轉換,因為這里是演示用,就直接將數據寫死了,使用自定義的服務器數據字典,用戶可以根據具體的情況使用數據庫查詢數據字典來定義,關鍵點是要將“角色名”設置為key,“角色編碼”設置為value。因為在應用的過程中,一個用戶的角色是通過角色名來定義的,而對數據的訪問控制是通過角色編碼來控制的,這里需要一個值轉換的過程。如果角色名與角色編碼一致則可以不經過下列步驟的設置。

          數據字典的名稱為:roles_map

          http://www.finereport.com/forumimages/tgqxkzsjfw2.jpg

          2.4 設置參數處理器,選擇菜單中的“報表-“參數處理器”,定義先前SQL語句中定義的參數“ROLE”的參數處理器,這里采用公式類型,用于將角色名處理為角色編碼,公式為:“MAP($ROLE,”roles_map”)”如下圖所示:

          http://www.finereport.com/forumimages/tgqxkzsjfw3.jpg

          2.5 保存模板文件即可。

          2.6 用戶在集成應用的時候,需要在系統登錄后設置當前登錄的用戶的角色,或者使用FineReport自帶的權限管理系統。如果采用FineReport自帶的權限管理系統,上述SQL語句中的ROLE參數可使用FR_ROLE_NAME來替代,該參數是FineReport權限系統中的默認登錄角色參數名。具體登錄角色設置方式請參見FineReport權限集成幫助文檔或咨詢FineReport服務人員。
          文章轉自:http://blog.vsharing.com/fanfanzheng/A1448107.html



          了解Java報表工具就從這里開始
          posted on 2011-11-21 10:49 season 閱讀(272) 評論(0)  編輯  收藏 所屬分類: Java報表—技術知識
          主站蜘蛛池模板: 太仆寺旗| 聊城市| 郴州市| 桐柏县| 寿宁县| 盖州市| 阳新县| 徐州市| 台山市| 九龙县| 泾川县| 通化市| 崇左市| 子洲县| 库车县| 葫芦岛市| 林周县| 织金县| 平和县| 桃源县| 宜宾县| 瑞金市| 双江| 天峻县| 江安县| 文登市| 冀州市| 宜良县| 义乌市| 卢龙县| 日照市| 惠水县| 南开区| 泗洪县| 大新县| 宝鸡市| 南木林县| 沧州市| 抚远县| 吉水县| 宁陵县|