當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

FR模塊的語法彙總

1. 公式編輯框

FR 用到公式的地方非常多,單元格(以=開頭的便被解析爲公式),條件顯示,數據字典,報表填報屬性值定義,圖表标題,軸定義,頁眉頁腳,甚至單元格的其他屬性中的鼠标懸浮提示内容都可以寫公式,雖然那個編輯框非常不像。

1. 語句語法剛接觸感覺比較奇怪,if(條件式子,值 1,值 2),if 可以嵌套,if(條件式子1,值1,if(條件式子2,值2,值3))。

2. switch 語句。詳細請查看: Switch 函數

3. 對於判斷用單等号和雙等号都行。

4. 對於字符串用單引号和雙引号都行。

(1)bool 只有 true 或者 false。與邏輯還是 && 或邏輯還是||。

(2)判斷爲空的話用 isnull() 或len($$$)=0。

(3)format 公式。format 公式比較靈活。format($$$,"0.00") 可以把當前單元格的數字轉換成兩位小數的形式,也可以用 format(12,"預算值:0.00萬元") 把 12 變成預算值:12.00 萬元,這個是不是和自定義顯示數據字典神馬的有異曲同工之妙啊。有一點要注意的是,滿位數年月日的話樣式是"yyyy-MM-dd",而不是"yyyy-mm-dd",小寫的 mm 的意思是分鍾(minute)。

5. 公式中取單元格的話直接用 A1 這種或者 b2,跨 sheet 取值的語法是 sheet1!A1。

6. SQL 函數,直接調用數據庫的方法。詳情請查看:SQL 函數

7. 數據集公式。

數據集公式是公式直接調用數據集的方法。詳情請查看:數據集函數

比如有個模板數據集 ds1,其字段爲地區、銷售員、銷量,則可以用 ds1.group(地區) 獲取 ds1 的地區字段,group 是分組,從而容易知道 select 是列表,ds1.select(銷售員) 便是列表形式獲取銷售員字段,可以加上限制條件,比如 ds1.select(銷售員,銷量=111) 就是獲取銷售量爲 111 的銷售員集合。跟數據集相關的幾個函數有 colcount、colname、row、rowcount 等。

8. 層次坐标。詳情請查看:層次坐标函數

層次坐标是公式裏面比較難點的,“可玩性”非常強,東西比較多,只能記住最常用的幾個,能解決各種各樣BT的需求。較爲常用的一個就是排名公式了=count(B3[!0]{B3 > $B3})+1。自己看吧。

9. 過濾公式。詳情請查看:篩選過濾

過濾有兩個條件類型,其一是公式條件。這個公式有一點點不同的是,可以直接寫當前單元格的字段所在數據集的任何字段,相對於普通公式要靈活很多。還拿自帶的銷量表爲例,給地區字段所在單元格過濾,公式條件可以直接寫:銷量==111

10. 條件屬性。詳情請查看:條件屬性

簡單說:條件屬性面板,上面是屬性,下面是條件。當下面的條件滿足,也就是返回值是 true 的時候,執行上面的屬性設置。


2. SQL 編輯框

數據集定義的面板,也是報表中最常用的模塊之一。


2.1 執行過程

這裏其實是生成一個字符串,FR 将這個字符串通過設置的數據連接傳遞到報表中執行。在這個過程中報表應該是先把報表規則的東西(比如現在的規則是 ${} 中放參數),替換成大家都認得的字符串後,對應的數據庫執行完,會反饋值,有可能返回報錯信息,也有可能返回數據集。這個報錯信息應該是對應的數據庫給的。所以說同樣的 SQL 語句,不同的數據庫用不同的 SQL 語法來執行有可能是不同的結果。比如 select 'sdf' 在 Access 和 SQLServer 正常顯示,在 Oracle 就抛錯。用 select version() 或者 show status 或者 show tables 能在MySQL 的數據集定義裏正常執行,其他則不行。SQL 中的 and 和 or 要和公式區别開,可能有人在公式裏面把 && 用成 and。還有公式裏面的或||在 Oracle 中是字符串的連接符。


2.2 SQL 中調用公式

報表通過公式和參數實現與 SQL 語句的交互。

公式放在框架 ${}中。於是 ${"select * from t1"} 其實就等價於select * from t1

數據集中用公式的難點在於拼接起來比較繁瑣。

第一個例子應該是幫助文檔上參數爲空返回全部的sql語句:

SELECT * FROM 訂單 where 1=1 ${if(len(area) == 0,"","and 貨主地區 = '" + area + "'")} ${if(len(province) == 0,"","and 貨主省份 = '" + province + "'")}

舉個調用 FR 中 format 的例子:

select ${"'"+format(p1,"yyyy-MM-dd")+"'"} from aa 

如果漏掉 format 函數前後的單引号,就會得到錯誤的結果。其實有的時候可以通過一些方法簡化處理的,比如再聲明一個變量 p2,引用這個變量的定義是 format(p1,"yyyy-MM-dd"),這時候上面的 SQL 就變成了select '${p2}' from aa 


2.3 SQL中調用 SQL 函數

前面說到,SQL 語句其實是字符串。其實是可以從數據庫調用字符串作爲一個sql語句進行操作的。這個要用到 SQL 函數了,說例子:

=sql("FRDemo",sql("FRDemo","select testtext from test where id=2",1,1),1,1)

test 這個表裏面的第二條數據的 testtext 字段就是字符串 select top 1 地區 from 銷量

可以把這個字符串用在 SQL 公式中作爲 SQL 語句執行

數據集定義那邊這麽寫是可以的 ${sql("FRDemo","select testtext from test where id = 2",1,1)}


3. JS 編輯框

3.1 FR 的 JS


作爲一款 B/S 産品,browser 端的 JavaScript 是必不可少的。FR中的js是已經調用了 finereport.js 的。

預覽報表時,報表 Servlet 會将 cpt 模板轉爲 HTML,在這個 HTML 的 head 頭部中會引入 FR 的 JS,這個 finereport.js 中包含了許多内置的 function 以及一些公有的屬性,不管在模板中還是其他網頁中,只要引入了 finereport.js,就能夠通過 FR.xxx 的形式調用公有的屬性與方法。


3.2 區别

JS 大緻有兩種,頁面相關狀态的事件還有就是按鈕相關的事件。按鈕有三類,一類是工具欄的,一類是參數面板或者決策報表模式的,還有一類是填報頁面的。不同按鈕的某些語句稍微有些區别的。

決策報表是 form,填報是 write,以獲取控件并給控件賦值爲例:

this.options.write.getWidgetByName("p1").setValue("aaa");//填報
this.options.form.getWidgetByName("p1").setValue("aaa");//決策報表,參數界面
contentPane.getWidgetByName("p1").setValue("aaa");//對於工具欄的按鈕,和單元格中的不在同一個框架或者容器,不能簡單套用

3.3 JS 編輯框調用公式

公式放在框架"${}"中。

比如 var v1="${len('sdf')}";那麽 v1 就爲 3.

這個跟數據集定義和公式交互可以比較一下。JS 中""下面的就是字符串,SQL 其實就是字符串,SQL 定義的地方是 ${} 裏面的是公式,JS 編輯框中"${}"就是公式。


4. URL 地址欄

首先是 op 參數。詳情請參考:op 參數的說明

報表在默認情況下的預覽方式是分頁預覽,當op參數爲write時爲填報預覽,op=view 是數據分析,op=form 是決策報表模式

其他 op 參數的類型:

op=fs,數據決策系統   

op=excel_submit,後台 Excel 導入填報  

op=auth_login,登錄的中間頁面,需要 fine_username 和 fine_password 參數  

其他的參數:

__bypagesize__ :控制是否分頁  

__pi__ :是否顯示參數界面  

__filename__ :控制導出文件名,沒有的話默認用模板名

注:下劃線是兩條橫線。

附件列表


主題: 原簡體文檔
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

反饋已提交

網絡繁忙