JavaScript概述
JavaScript是種腳本語(yǔ)言,它可以用來(lái)制作與網(wǎng)絡(luò)無(wú)關(guān)的,與用戶交互作用的復(fù)雜軟件。它是一種基于對(duì)象(Object Based)和事件驅(qū)動(dòng)(Event Driver)的編程語(yǔ)言。 JavaScript是動(dòng)態(tài)的,它可以直接對(duì)用戶或客戶輸入做出響應(yīng),無(wú)須經(jīng)過(guò)Web服務(wù)程序。它對(duì)用戶的反映響應(yīng),是采用以事件驅(qū)動(dòng)的方式進(jìn)行的。所謂事件驅(qū)動(dòng),就是指在主頁(yè)(Home Page)中執(zhí)行了某種操作所產(chǎn)生的動(dòng)作,就稱為“事件”(Event)。比如按下鼠標(biāo)、移動(dòng)窗口、選擇菜單等都可以視為事件。當(dāng)事件發(fā)生后,可能會(huì)引起相應(yīng)的事件響應(yīng)。
JavaScript是依賴于瀏覽器本身,與操作環(huán)境無(wú)關(guān),只要能運(yùn)行瀏覽器的計(jì)算機(jī),并支持JavaScript的瀏覽器就可正確執(zhí)行。即JavaScript源代碼在發(fā)往客戶端執(zhí)行之前不需經(jīng)過(guò)編譯,而是將文本格式的字符代碼發(fā)送給客戶編由瀏覽器直接解釋執(zhí)行。
本章介紹了FineReport內(nèi)置的JavaScript函數(shù)及其用法。
觸發(fā)事件
控件的事件
在控件設(shè)置的事件編輯中,事件編輯共有七種觸發(fā)事件:編輯前、編輯后、編輯結(jié)束、點(diǎn)擊、初始化后、狀態(tài)改變及回調(diào)。
其中編輯前、編輯結(jié)束只在表單填報(bào)時(shí)起作用。
編輯后、點(diǎn)擊、初始化后、狀態(tài)改變等在表單填報(bào)及參數(shù)界面上都可以使用。
1. 編輯前
該事件是在填報(bào)時(shí)進(jìn)入編輯狀態(tài)后被觸發(fā)
簡(jiǎn)單例子
1.1 新建一張空白報(bào)表,然后設(shè)計(jì)成如下格式
1.2 設(shè)置報(bào)表填報(bào)屬性,在此不做贅述,具體設(shè)置方法可參考填報(bào)專題相關(guān)章節(jié)
1.3 定義單元格填報(bào)屬性
將B2單元格控件類型設(shè)置為文本,并在B2控件中添加編輯前事件,在function fun()函數(shù)中添加一段JS代碼: alert("事件編輯前觸發(fā)");
如下圖所示
1.4 保存并填報(bào)
點(diǎn)擊設(shè)計(jì)器中的填報(bào)預(yù)覽,進(jìn)入填報(bào)的編輯狀態(tài),效果如下
此時(shí)當(dāng)光標(biāo)移至姓名單元格進(jìn)行編輯時(shí),編輯前事件被觸發(fā)。
2. 編輯后
該事件在表單填報(bào)及參數(shù)界面上都可以被觸發(fā)。
對(duì)于文本、數(shù)字控件,當(dāng)輸入任何字母或文字標(biāo)點(diǎn)后觸發(fā);對(duì)于下拉框,復(fù)選框等控件,當(dāng)選擇下拉選項(xiàng)后被觸發(fā),具體設(shè)置方法類似于編輯前事件,在這不再贅述。
3. 編輯結(jié)束
該事件只有在填報(bào)確認(rèn)單元格輸入內(nèi)容如鍵盤輸入回車后才能被觸發(fā)
具體設(shè)置方法類似于編輯前事件,在這不再贅述。
4. 點(diǎn)擊
該事件是在點(diǎn)擊按鈕,或點(diǎn)擊下拉框、下拉樹、下拉復(fù)選框等之后被觸發(fā)
簡(jiǎn)單例子
4.1 新建報(bào)表
4.2 使用默認(rèn)的參數(shù)界面,如圖
4.3 控件設(shè)置
右擊按鈕控件,選擇控件設(shè)置,打開控件設(shè)置面板,添加點(diǎn)擊事件,在function fun()函數(shù)中添加一段JS代碼: alert("點(diǎn)擊我就觸發(fā)該事件啦!");
如下圖所示
4.4 保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的分頁(yè)預(yù)覽,點(diǎn)擊查詢按鈕,此時(shí)點(diǎn)擊事件被觸發(fā),如下圖
5. 初始化后
該事件是按鈕控件所特有,在點(diǎn)擊分頁(yè)預(yù)覽或填報(bào)預(yù)覽后初始化界面時(shí)被觸發(fā)
簡(jiǎn)單例子
5.1 新建報(bào)表
5.2 使用默認(rèn)的參數(shù)界面,如圖
5.3 控件設(shè)置
右擊按鈕控件,選擇控件設(shè)置,打開控件設(shè)置面板,添加初始化后事件,在function fun()函數(shù)中添加一段JS代碼: alert("初始化后就觸發(fā)該事件啦!");
如下圖所示
5.4 保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的分頁(yè)預(yù)覽,就可以看見如下圖所示效果
6. 狀態(tài)改變
該事件為單選按鈕、復(fù)選框組控件所特有,在其狀態(tài)改變時(shí)被觸發(fā)
簡(jiǎn)單例子
6.1 定義報(bào)表參數(shù)p1,并設(shè)置其默認(rèn)值為男
6.2 在參數(shù)界面上,定義參數(shù)p1的控件屬性,如下圖
6.3 添加事件
右擊p1的控件,選擇控件設(shè)置,打開控件設(shè)置面板,添加狀態(tài)改變事件,在function fun()函數(shù)中添加一段JS代碼: alert("單選按鈕的狀態(tài)改變啦!");
如下圖所示
6.4 保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的分頁(yè)預(yù)覽,單選按鈕默認(rèn)選中“男”,當(dāng)點(diǎn)擊“女”時(shí)就會(huì)觸發(fā)狀態(tài)改變事件,如下圖
7. 回調(diào)
該事件為文件控件所特有,是在上傳完文件之后觸發(fā)該事件
簡(jiǎn)單例子
7.1 新建報(bào)表,定義文件控件,如下圖:
7.2 添加事件
點(diǎn)擊文件控件,打開控件設(shè)置面板,添加回調(diào)事件,在function fun()函數(shù)中添加一段JS代碼: alert("回調(diào)事件觸發(fā)啦!");
如下圖所示
7.3 保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的填報(bào)預(yù)覽,上傳文件結(jié)束后,觸發(fā)回調(diào)事件,如下圖
其他事件
除了各控件中可以添加事件外,超級(jí)鏈接也可以引用JavaScript,具體使用方法將在之后的章節(jié)中詳述。同時(shí)在報(bào)表|報(bào)表Web屬性及服務(wù)器|服務(wù)器配置中也可以添加各種JS事件,如下圖所示
超鏈接引用JavaScript
該例子實(shí)現(xiàn)用戶在點(diǎn)擊超級(jí)鏈接的時(shí)候,根據(jù)輸入的頁(yè)碼,來(lái)決定鏈接到指定的頁(yè)面。
有兩種引用方式:
1. 將寫好的方法保存為js文件,放置在工程下,在超級(jí)鏈接中直接調(diào)用
1.1 新建報(bào)表
1.2 模板設(shè)計(jì)
在B3單元格中寫入公式:=range(1,40),并將其擴(kuò)張屬性改為“從左到右擴(kuò)展”,并將其設(shè)為居中,如下圖所示:
1.3 添加超鏈接
l 右擊B3單元格,選擇超級(jí)鏈接,進(jìn)入超級(jí)鏈接界面,點(diǎn)擊添加JavaScript,如下圖所示
l 寫一段Js代碼,內(nèi)容為:
function demo() {
var test = function() {
var num = parseInt(arguments[0]);
contentPane.gotoPage(num);
};
var value = FR.Msg.prompt("輸入", "頁(yè)碼", 2, test);
}
說(shuō)明:
var num = parseInt(arguments[0]); //獲得輸入框中輸入的頁(yè)碼
contentPane.gotoPage(num); //跳轉(zhuǎn)到相應(yīng)頁(yè)碼
var value = FR.Msg.prompt("輸入", "頁(yè)碼", 2, test); //參數(shù)分別為對(duì)話框標(biāo)題、對(duì)話框內(nèi)容、輸入框默認(rèn)值、回調(diào)函數(shù)
將此段內(nèi)容保存為test.js文件 ,放在WebReport目錄下,在超級(jí)鏈接界面中插入該test.js,并在下面的function fun()函數(shù)中調(diào)用demo();
效果如下圖所示:
1.4 保存并預(yù)覽
點(diǎn)擊超級(jí)鏈接,出現(xiàn)如下圖所示的輸入提示對(duì)話框
在輸入對(duì)話框中輸入需要跳轉(zhuǎn)的頁(yè)數(shù),并點(diǎn)擊確定按鈕,就跳轉(zhuǎn)到相應(yīng)的頁(yè)面。
2. 直接在超級(jí)鏈接界面上寫js方法
2.1 新建報(bào)表
2.2 模板設(shè)計(jì)
在B3單元格中寫入公式:=range(1,40),并將其擴(kuò)張屬性改為“從左到右擴(kuò)展”,并將其設(shè)為居中,如下圖所示:
2.3 添加超鏈接
l 右擊B3單元格,選擇超級(jí)鏈接,進(jìn)入超級(jí)鏈接界面,點(diǎn)擊添加JavaScript,如下圖所示
l function fun(){}函數(shù)中寫入如下JS語(yǔ)句:
function test(){
var num = parseInt(arguments[0]);
_g('${sessionID}').gotoPage(num);
};
var value = FR.Msg.prompt("輸入", "頁(yè)碼", 2,test);
說(shuō)明:
_g('${sessionID}').gotoPage(num); //跳轉(zhuǎn)到相應(yīng)頁(yè)碼
如下圖所示
2.4保存預(yù)覽
點(diǎn)擊超級(jí)鏈接,出現(xiàn)如下圖所示的輸入提示對(duì)話框
在輸入對(duì)話框中輸入需要跳轉(zhuǎn)的頁(yè)數(shù),并點(diǎn)擊確定按鈕,就會(huì)跳轉(zhuǎn)到相應(yīng)的頁(yè)面。
參數(shù)控件觸發(fā)事件
參數(shù)控件的取值與置數(shù)
參數(shù)界面中,最常見的就是獲取參數(shù)的值進(jìn)行運(yùn)算或者將其作為另一個(gè)參數(shù)的判斷依據(jù),在FineReport報(bào)表網(wǎng)頁(yè)腳本中,也提供了獲取參數(shù)控件實(shí)際值,顯示值并給參數(shù)置數(shù)的方法。
//取當(dāng)前控件的實(shí)際值
var [ParaValue] = this.getValue();
//通過(guò)參數(shù)控件名稱來(lái)獲取參數(shù)控件實(shí)際值
var [ParaValue] = this.options.form.getWidgetByName("[ParaName]").getValue();
//通過(guò)arguments[i]獲取當(dāng)前參數(shù)控件顯示值
var [DisplayedValue] = arguments[0];
//通過(guò)控件A獲取控件B的顯示值
var [DisplayedValue] = this.options.form.getWidgetByName("[ParaName]").options.items[0].text;
//獲取某個(gè)參數(shù)控件,并給其置數(shù)(實(shí)際值)
var [Para] = this.options.form.getWidgetByName("[ParaName]");
[Para].setValue([Value]);
實(shí)例:
該實(shí)例通過(guò)添加參數(shù)控件的編輯后事件來(lái)實(shí)現(xiàn)用一個(gè)參數(shù)控制另一個(gè)參數(shù),如用參數(shù)username來(lái)對(duì)state置數(shù),username為下拉框自定義的幾個(gè)用戶名,state為單選按鈕組表示狀態(tài)1和2。當(dāng)username有值時(shí),state的狀態(tài)置為1否則置為2。
1. 模板設(shè)計(jì)
1.1 新建報(bào)表
1.2 定義參數(shù)
在菜單欄中選擇報(bào)表|報(bào)表參數(shù),打開參數(shù)定義面板,定義參數(shù)state和username,如下圖
1.3 參數(shù)設(shè)計(jì)
打開參數(shù)設(shè)計(jì)界面,參數(shù)控件布局如下
l username控件類型為下拉框,數(shù)據(jù)自定義,如圖
l state控件類型選擇單選按鈕組,數(shù)據(jù)也為自定義,如圖
1.4 添加事件
在username的事件編輯中添加編輯后事件,JS代碼如下
var state= this.options.form.getWidgetByName("state");
var username = this.options.form.getWidgetByName("username").getValue();
if (!username){
state.setValue(2);
}else{
state.setValue(1);
}
該段代碼是用來(lái)對(duì)state參數(shù)置數(shù),當(dāng)username為空時(shí),!username為真,此時(shí)將state置數(shù)為2,否則當(dāng)username有值時(shí),將state置數(shù)為1,如圖所示
2. 保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器分頁(yè)預(yù)覽,當(dāng)username有值是,state置為1
當(dāng)username為空時(shí),state置為2
注意:state無(wú)法通過(guò)username置數(shù)為0,JS里面,state為0,默認(rèn)返回false
且一個(gè)控件無(wú)法對(duì)另一個(gè)控件的顯示值進(jìn)行置數(shù)
參數(shù)校驗(yàn)-日期校驗(yàn)
內(nèi)置參數(shù)查詢界面當(dāng)中可進(jìn)行一些數(shù)據(jù)校驗(yàn),例如有兩個(gè)參數(shù):開始時(shí)間和結(jié)束時(shí)間,結(jié)束時(shí)間必須在開始時(shí)間之后,否則進(jìn)行提示。
1. 在提交按鈕的事件編輯中寫JS代碼
1.1 新建報(bào)表
1.2 模板設(shè)計(jì)
按照下圖設(shè)計(jì)模板
1.3 添加數(shù)據(jù)源
新建一個(gè)名為ds1的數(shù)據(jù)庫(kù)查詢,SQL語(yǔ)句:SELECT * FROM EMPLOYEE
1.4 綁定數(shù)據(jù)列
按照下表進(jìn)行數(shù)據(jù)列綁定
單元格
數(shù)據(jù)集
數(shù)據(jù)列
屬性
B5
ds1
EMPID
上到下擴(kuò)展,居中,其余默認(rèn)
C5
ds1
EMPNAME
上到下擴(kuò)展,居中,其余默認(rèn)
D5
ds1
SEX
上到下擴(kuò)展,居中,其余默認(rèn)
E5
ds1
BIRTHDATE
上到下擴(kuò)展,居中,其余默認(rèn)
F5
ds1
ORIGN
上到下擴(kuò)展,居中,其余默認(rèn)
G5
ds1
SCHOOL
上到下擴(kuò)展,居中,其余默認(rèn)
H5
ds1
TEL
上到下擴(kuò)展,居中,其余默認(rèn)
雙擊B5單元格,在過(guò)濾頁(yè)面當(dāng)中,定義條件類型為單元格,添加條件: BIRTHDATE 大于或等于 $begintime AND BIRTHDATE 小于 $endtime
1.5 定義參數(shù)
打開菜單欄中報(bào)表|報(bào)表參數(shù),新定義兩個(gè)個(gè)名為begintime,endtime的參數(shù),如圖
1.6 參數(shù)設(shè)計(jì)
l 打開參數(shù)設(shè)計(jì)界面,參數(shù)界面布局如下
l 日期控件設(shè)置
右擊begintime的控件,選擇控件設(shè)置,控件類型選擇日期,控件名選擇begintime,具體設(shè)置如下圖所示
endtime的控件同上
1.7 數(shù)據(jù)校驗(yàn)
右擊查詢按鈕,選擇控件設(shè)置,打開控件設(shè)置面板,添加點(diǎn)擊事件,如下圖所示
在function fun(){}函數(shù)中寫入如下JS語(yǔ)句:
var start = this.options.form.getWidgetByName("begintime").getValue();
var end = this.options.form.getWidgetByName("endtime").getValue();
if( start == ""){
alert("錯(cuò)誤,開始時(shí)間不能為空");
return false;
};
if(end == ""){
alert("錯(cuò)誤,結(jié)束時(shí)間不能為空");
return false;
};
if( start > end){
alert("錯(cuò)誤,開始時(shí)間不能大于結(jié)束時(shí)間");
return false;
}
1.8 保存并預(yù)覽
begintime輸入為空,如下圖所示
endtime輸入為空,如下圖所示
輸入的endtime在begintime之前,校驗(yàn)如下圖所示:
2. 在參數(shù)控件的事件編輯中寫JS代碼
2.1 設(shè)計(jì)模板
具體操作同上。
2.2 數(shù)據(jù)校驗(yàn)
l 右擊begintime的控件,選擇控件設(shè)置,添加編輯后事件,如下圖所示:
在function fun(){}函數(shù)中寫入如下JS語(yǔ)句:
var start = this.options.form.getWidgetByName("begintime").getValue();
if( start == ""){
alert("錯(cuò)誤,開始時(shí)間不能為空");
return false;
};
說(shuō)明:這段代碼是為了驗(yàn)證begintime輸入不能為空。
l 右擊endtime的控件,選擇控件設(shè)置,添加編輯后事件,如下圖所示
在function fun(){}函數(shù)中寫入如下Js語(yǔ)句:
var end = this.options.form.getWidgetByName("endtime").getValue();
if(end == ""){
alert("錯(cuò)誤,結(jié)束時(shí)間不能為空");
return false;
};
if( start > end){
alert("錯(cuò)誤,開始時(shí)間不能大于結(jié)束時(shí)間");
return false;
}
說(shuō)明:這段代碼是為了校驗(yàn)endtime輸入不能為空以及結(jié)束時(shí)間大于開始時(shí)間。
2.3 保存并預(yù)覽
效果與在提交按鈕的事件編輯中寫JS代碼一樣
參數(shù)控件動(dòng)態(tài)顯示
由于業(yè)務(wù)的需要,很多情況下需要當(dāng)滿足某個(gè)條件時(shí),某些查詢條件才顯示出來(lái),此時(shí)參數(shù)控件就需要?jiǎng)討B(tài)的控制其是否可見。
//通過(guò)控件的visible()、invisible()屬性控制其可視、不可視
var [Widget] = form.getWidgetByName("[ParaName]"); //通過(guò)控件名獲取控件
[Widget].visible(); //設(shè)置該控件可見
[Widget].invisible(); //設(shè)置該控件不可見
實(shí)例:
該實(shí)例實(shí)現(xiàn)效果:當(dāng)選擇日?qǐng)?bào)時(shí),右側(cè)出現(xiàn)一個(gè)日期查詢控件,選擇月報(bào)時(shí),則讓用戶選擇年月,例如2008年3月,選擇年報(bào)時(shí),即讓用戶選擇年份。
1. 模板設(shè)計(jì)
1.1 新建報(bào)表
1.2 添加數(shù)據(jù)源
新建一個(gè)名為ds1的數(shù)據(jù)庫(kù)查詢,SQL語(yǔ)句:
SELECT equipment,amount,costs,updatetime,equipmentId
FROM EquipmentDetail
where 1=1
${if(type='日?qǐng)?bào)'," and format(updatetime,'yyyy-mm-dd') = '" + date + "'","")}
${if(type='月報(bào)'," and month(updatetime) = "+ month + " and year(updatetime) = " + year,"")}
${if(type='年報(bào)'," and year(updatetime) = " + year,"")}
其中設(shè)置參數(shù)type的默認(rèn)值日?qǐng)?bào),data的默認(rèn)值是字符串2009-01-13
1.3 模板設(shè)計(jì)
模板樣式如下
2.4 綁定數(shù)據(jù)列
按照下表進(jìn)行數(shù)據(jù)列綁定
單元格
數(shù)據(jù)集
數(shù)據(jù)列
屬性
C2
ds1
="財(cái)務(wù)報(bào)表( " + $type + ")"
不擴(kuò)展,居中,其余默認(rèn)
C4
ds1
=$type
不擴(kuò)展,居中,其余默認(rèn)
D4
ds1
=if(type=="日?qǐng)?bào)",$date,if(type=="月報(bào)",$year+"."+$month,$year))
不擴(kuò)展,居中,其余默認(rèn)
C7
ds1
EquipmentID
上到下擴(kuò)展,居中,其余默認(rèn)
D7
ds1
Equipment
上到下擴(kuò)展,居中,其余默認(rèn)
E7
ds1
Amount
匯總求和,居中,其余默認(rèn)
F7
ds1
costs
匯總求和,居中,其余默認(rèn)
2.5 參數(shù)設(shè)計(jì)
2.5.1 打開參數(shù)設(shè)計(jì)界面,參數(shù)界面布局如下
2.5.2 控件設(shè)置
l type控件設(shè)置
右擊type控件,選擇控件設(shè)置,打開控件設(shè)置面板,控件類型為下拉框,控件名選擇type,自定義數(shù)據(jù),如下圖所示
l date控件設(shè)置
右擊date的控件,選擇控件設(shè)置,打開控件設(shè)置面板,控件類型為日期,控件名選擇date,自定義數(shù)據(jù),如下圖所示
l year控件設(shè)置
右擊year的控件,選擇控件設(shè)置,打開控件設(shè)置面板,控件類型為下拉框,控件名選擇year,使用公式,dyear控件是由type的類型來(lái)決定他是否需要顯示的,且我們默認(rèn)的類型為日?qǐng)?bào),因此默認(rèn)設(shè)置它為不可見,如下圖所示
l month控件設(shè)置
右擊month的控件,選擇控件設(shè)置,打開控件設(shè)置面板,控件類型為下拉框,控件名選擇month,自定義數(shù)據(jù),并設(shè)為不可見,如下圖所示
2. 事件編輯
右擊type控件,選擇控件設(shè)置,打開控件設(shè)置面板,添加編輯后事件,如下圖所示:
在function fun(){}中添加如下代碼:
var form = this.options.form;
var DateWidget = form.getWidgetByName("date");
var YearWidget = form.getWidgetByName("year");
var MonthWidget = form.getWidgetByName("month");
var value = this.getValue();
if(value == "日?qǐng)?bào)"){
DateWidget.visible();
YearWidget.invisible();
MonthWidget.invisible();
}else if(value == "月報(bào)"){
DateWidget.invisible();
YearWidget.visible();
MonthWidget.visible();
}else if(value == "年報(bào)"){
DateWidget.invisible();
YearWidget.visible();
MonthWidget.invisible();
}else{
DateWidget.invisible();
YearWidget.invisible();
MonthWidget.invisible();
}
說(shuō)明:此段代碼的作用是選擇日?qǐng)?bào),那么在其下方出現(xiàn)一個(gè)日期選擇框;選擇月報(bào)時(shí),即讓用戶選擇年月,例如2008年3月;年報(bào)與月報(bào)同理,即讓用戶選擇年份。
3. 保存并預(yù)覽
默認(rèn)為日?qǐng)?bào),只顯示出日期控件,預(yù)覽效果如圖
當(dāng)選擇月報(bào)時(shí),右邊彈出月份和年份下拉框,預(yù)覽效果如圖
當(dāng)選擇年報(bào)時(shí),右邊彈出年份下拉框,預(yù)覽效果如圖
表單填報(bào)觸發(fā)事件
表單控件的取值與置數(shù)
在填報(bào)頁(yè)面,也可以得到各控件的值及對(duì)控件進(jìn)行置數(shù),方法與參數(shù)界面中類似。
// 獲得當(dāng)前控件輸入的值
var [Value] = this.getValue();
// 通過(guò)單元格名稱獲取其他單元格的值
var [curLGP] = arguments[1]; //首先,獲得當(dāng)前form對(duì)象
var [Cellvalue] = curLGP.getCellValue("[Cell]"); //通過(guò)單元格名稱獲得Cell單元格的值
// 對(duì)單元格進(jìn)行置數(shù)并顯示
var [curLGP] = arguments[1]; //首先,獲得當(dāng)前form對(duì)象
curLGP.setCellValue("[Cell]", null, [Value]); //給單元格Cell置數(shù),改變其實(shí)際值,但不顯示,字符串需要加上引號(hào)
curLGP.displayTDCell($("#[Cell]-0"), [Value]); //表示顯示出Cell單元格的實(shí)際值Value
實(shí)例:
該實(shí)例實(shí)現(xiàn)了在填報(bào)頁(yè)面上用一個(gè)表單控件控制另一個(gè)表單控件,當(dāng)控件1輸入之后,取控件2的值,判斷一下條件,若不符合條件,則置數(shù),符合則不變。
1. 設(shè)計(jì)模板
1.1 新建報(bào)表
1.2 模板設(shè)計(jì),如圖所示
1.3 設(shè)置控件屬性
單元格
屬性
A2
文本
C2
文本
1.4 添加事件
在A2單元格控件的事件編輯中添加編輯結(jié)束事件,具體JS代碼為:
var curLGP = arguments[1];
var C2value = curLGP.getCellValue("C2");
if(C2value != 10){
curLGP.setCellValue("C2", null, "10");
curLGP.displayTDCell($("#C2-0"), "10");
}
說(shuō)明:
var curLGP = arguments[1]; //獲得本form對(duì)象
var C1value = curLGP.getCellValue("C2"); //獲得C2單元格的值
curLGP.setCellValue("C2", null, "10"); //給C2置數(shù),改變其實(shí)際值,但不顯示
curLGP.displayTDCell($("#C2-0"), "10"); //表示顯示出C2的實(shí)際值
具體如圖所示
2. 保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的填報(bào)預(yù)覽,效果如圖
在控件1中輸入數(shù)據(jù)后回車,這時(shí)觸發(fā)編輯結(jié)束事件,取C2單元格的值,根據(jù)判斷,不是10,此時(shí)將C2單元格置數(shù)為10
及時(shí)校驗(yàn)-跨格數(shù)據(jù)校驗(yàn)
在實(shí)現(xiàn)填報(bào)時(shí),有時(shí)需要在編輯完數(shù)據(jù)后跟其他具體某個(gè)格子對(duì)比,進(jìn)行及時(shí)校驗(yàn)。當(dāng)報(bào)表中提供的及時(shí)校驗(yàn)不能滿足需求時(shí),可以通過(guò)JS事件來(lái)進(jìn)行及時(shí)校驗(yàn)。
1. 設(shè)計(jì)模板
2.1 新建報(bào)表
2.2 模板設(shè)計(jì),如下圖所示
2.3 控件設(shè)置
單元格
屬性
B2
數(shù)字控件
B3
文本控件
2.4 添加事件
l 對(duì)B2單元格控件添加編輯結(jié)束事件:
var D2value = arguments[1].getCellValue("D2");
if (this.getValue() < D2value){
FR.Msg.alert(FR.i18n.Alert, "該值不能小于" + D2value);
return false;
}
說(shuō)明:D2value是自定義變量,用于獲得D2單元格的值,if語(yǔ)句是用來(lái)判斷該單元格輸入后的值是否小于D2value,如果是則彈出警告:該值不能小于6。
l 對(duì)B3單元格控件添加編輯結(jié)束事件:
var D3value = arguments[1].getCellValue("D3");
if (this.getValue() != D3value){
FR.Msg.alert(FR.i18n.Alert, "該值應(yīng)等于" + D3value);
return false;
}
說(shuō)明:D3value是自定義變量,用于獲得D3單元格的值,if語(yǔ)句是用來(lái)判斷該單元格輸入后的值是否等于D3value,如果不是是則彈出警告:該值應(yīng)等于abc。
2. 保存并預(yù)覽
點(diǎn)擊填報(bào)預(yù)覽,在B2單元格中輸入數(shù)字5,并按回車確定,則彈出警告,如圖
在B3單元格中輸入add,并按回車確定,也彈出校驗(yàn)警告,如圖
表單提交超級(jí)鏈接
在填報(bào)時(shí),提交會(huì)出現(xiàn)兩種結(jié)果,提交成功和提交失敗,可以對(duì)這兩種結(jié)果進(jìn)行判斷并作出反應(yīng),從而跳轉(zhuǎn)到其他頁(yè)面。原FineReport6.2中可以在報(bào)表填報(bào)屬性中添加,如下圖所示
在FineReport6.5中同樣可以通過(guò)報(bào)表|報(bào)表Web屬性|填報(bào)頁(yè)面設(shè)置添加提交成功和提交失敗事件進(jìn)行編輯。主要用到的事件為加載頁(yè)面事件:
// 通過(guò)頁(yè)面路徑加載相應(yīng)頁(yè)面
window.open("[URL]")
實(shí)例:
1. 打開模板
2. 添加提交事件
點(diǎn)擊填報(bào)|報(bào)表Web屬性,選擇填報(bào)頁(yè)面設(shè)置,進(jìn)入填報(bào)頁(yè)面設(shè)置窗口,在右邊欄中添加提交成功和提交失敗事件,如下圖所示
具體的填報(bào)成功事件和填報(bào)失敗事件代碼如下
填報(bào)成功事件,添加JS代碼:window.open("http://www.finereport.com");
在填報(bào)成功后,連接到相應(yīng)頁(yè)面。
提交失敗事件,JS代碼:
window.open("http://localhost:8075/WebReport/ReportServer?op=fs");
該代碼用于填報(bào)提交失敗后打開產(chǎn)品演示文檔。
填報(bào)頁(yè)面居中
在填報(bào)時(shí),填報(bào)預(yù)覽默認(rèn)填報(bào)頁(yè)面是靠左的。但實(shí)際應(yīng)用可能需要居中顯示,F(xiàn)ineReport報(bào)表可以通過(guò)在瀏覽器加載報(bào)表的時(shí)候引用一個(gè)頁(yè)面樣式來(lái)控制頁(yè)面居中方式。
具體實(shí)現(xiàn)過(guò)程如下:
1. 添加加載結(jié)束事件
打開任意一張?zhí)顖?bào)表,點(diǎn)擊菜單欄報(bào)表|報(bào)表Web屬性,選擇填報(bào)頁(yè)面設(shè)置,進(jìn)入填報(bào)頁(yè)面設(shè)置窗口,在右側(cè)添加一個(gè)加載結(jié)束事件,如下圖
具體的加載結(jié)束事件代碼如圖
JS代碼如下:
var slmargin = ($('.content-container').width() - $('.sheet-container').width()) / 2;
$('.sheet-container').css('margin-left',slmargin);
說(shuō)明:表示自定義一個(gè)變量slmargin,表示頁(yè)面的居中位置,后面一句代碼調(diào)用css表示頁(yè)面加載時(shí)居中設(shè)置。
2. 保存并預(yù)覽
點(diǎn)擊設(shè)計(jì)器填報(bào)預(yù)覽,頁(yè)面居中設(shè)置 ,如圖
自定義填報(bào)
在填報(bào)時(shí),個(gè)別用戶為了需求,需要自定義填報(bào)。FR報(bào)表在報(bào)表web屬性中的填報(bào)頁(yè)面設(shè)置中可以自定義填報(bào)功能。
實(shí)例:
該實(shí)例實(shí)現(xiàn)首先在工具欄上加一個(gè)按鈕,通知服務(wù)器要做填報(bào);然后服務(wù)器獲得當(dāng)前的SessionIDInfor,取出當(dāng)前的報(bào)表,獲得報(bào)表中A1、B1擴(kuò)展后的格子,再把這組數(shù)據(jù)insert到數(shù)據(jù)庫(kù)中;最后返回客戶端一個(gè)訊息,表示填報(bào)成功了,客戶端再?gòu)梻€(gè)對(duì)話框,提示填報(bào)成功了。
1. 連接數(shù)據(jù)庫(kù)FRDemo
2. 報(bào)表設(shè)計(jì)
2.1 新建報(bào)表
2.2 模板設(shè)計(jì)
添加一個(gè)名為ds1的數(shù)據(jù)庫(kù)查詢:SELECT * FROM customer,表樣設(shè)計(jì),如圖
2.3 自定義報(bào)表填報(bào)屬性
2.4 定義單元格空間屬性
單元格
屬性
A1
文本
B1
文本
2.5 自定義報(bào)表Web屬性
點(diǎn)擊菜單欄報(bào)表|報(bào)表Web屬性,進(jìn)入報(bào)表Web屬性窗口,在填報(bào)頁(yè)面設(shè)置欄目中,將左邊需要顯示的按鈕拖到中間的窗口中,并在右邊窗口添加加載結(jié)束事件,實(shí)現(xiàn)自定義的填報(bào)功能,如圖所示
在加載結(jié)束事件窗口中添加事件的JS代碼
具體js代碼如下
var $toolbar = $('.FR-ToolBar-disabled > table > tbody > tr');
var option = {
//"icon": "css:x-emb-email",
"listeners": [ {"once": false,
"action": function(e){
var xml = _g('${SessionID}').generateReportXML();
$.ajax({
url : "test.jsp",
type : 'POST',
data : {op : 'test1', sessionID : '${SessionID}',
reportXML : xml},
complete : function(res, status) {
FR.showDialog("Relation", 300, 400, res.responseText);
}})
},
"eventName": "click"
}],
"text": "測(cè)試",
"invisible": false,
"type": "button",
"disabled": false,
"render": true};
$button = $('<div></div>');
FR.comp.create($button, "button", option);
$tc = $("<td>").append($button);
$toolbar.append($tc);
此段JS代碼引用了一個(gè)test.jsp,代碼為:
<%@ page import="com.fr.web.CustomSubmit" %>
<%@ page contentType="text/html" %>
<%
CustomSubmit.dealWithTest(request, response);
%>
將該test.jsp文件放在設(shè)計(jì)器安裝的WebReport目錄下。
該test.jsp文件又引用了一個(gè)CustomSubmit類,將該類編譯后的.class文件放在
%WebReport\WEB-INF\classes\com\fr\web目錄下,該類的代碼具體如下
package com.fr.web;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fr.base.ColumnRow;
import com.fr.report.Report;
import com.fr.report.core.FormReport;
import com.fr.report.core.PackedReport;
import com.fr.web.ParameterConsts;
import com.fr.web.core.SessionDealWith;
import com.fr.web.core.SessionIDInfor;
import com.fr.web.core.WebUtils;
public class CustomSubmit {
public static void dealWithTest(HttpServletRequest req, HttpServletResponse res) throws Exception {
String sessionID = WebUtils.getHTTPRequestParameter(req,ParameterConsts.SESSION_ID);
SessionIDInfor sessionIDInfor = SessionDealWith.getSessionIDInfor(sessionID);
List cellRelation = new ArrayList();
for(int i = 0, len = sessionIDInfor.getWorkBook2Show().getReportCount(); i < len; i++) {
Report report = sessionIDInfor.getWorkBook2Show().getReport(i);
if (report instanceof FormReport && report instanceof PackedReport) {
Report fr = (PackedReport)report;
//請(qǐng)注意這步,我想要取的是A1和B1兩個(gè)格子擴(kuò)展以后的他們之間關(guān)系和值,如果是想拿A1,B1,D5,對(duì)應(yīng)添加ColumnRow.valueOf("D5")既可
List rl = ((FormReport)report).getExtendColumnRowList(new ColumnRow[] {ColumnRow.valueOf("A1"), ColumnRow.valueOf("B1")});
for (int c = 0, cl = rl.size(); c < cl; c++) {
ColumnRow[] crs = (ColumnRow[])rl.get(c);
ColumnRowValue[] crvs = new ColumnRowValue[crs.length];
for (int index = 0, il = crs.length; index < il; index++) {
crvs[index] = new ColumnRowValue(crs[index], fr.getCellValue(crs[index].column, crs[index].row));
}
cellRelation.add(crvs);
}
}
}
//cellRelation 里面存放著擴(kuò)展以后的格子之間的關(guān)系和格子的值
//以111.cpt模板為例,數(shù)據(jù)列擴(kuò)展后 城市NewYork對(duì)應(yīng)ID 1和4,在cellRelation里面就是 cellRelation.get(0)和cellRelation.get(1),對(duì)應(yīng)著兩個(gè) ColumnRowValue[]
//第一個(gè)ColumnRowValue數(shù)組的ColumnRowValue[0]的ColumnRow是A1,Value是NewYork,ColumnRowValue[1]的ColumnRow是B1,Value是1
//第二個(gè)ColumnRowValue數(shù)組的ColumnRowValue[0]的ColumnRow是A1,Value是NewYork,ColumnRowValue[1]的ColumnRow是B2,Value是4
if (cellRelation.size() > 0) {
PrintWriter writer = WebUtils.createPrintWriter(res);
for (int i = 0, len = cellRelation.size(); i < len; i++) {
ColumnRowValue[] crvs = (ColumnRowValue[])cellRelation.get(i);
StringBuffer sb = new StringBuffer();
for (int v = 0, vl = crvs.length; v < vl; v++) {
if (v != 0) {
sb.append(" ");
}
sb.append(crvs[v].toString());
if (v == vl - 1) {
sb.append("<br />");
}
}
writer.println(sb.toString());
}
writer.flush();
writer.close();
}
}
public static class ColumnRowValue {
private ColumnRow cr;
private Object value;
public ColumnRowValue(ColumnRow cr, Object value) {
this.cr = cr;
this.value = value;
}
public ColumnRow getColumnRow() {
return cr;
}
public Object getValue() {
return value;
}
public String toString() {
return new StringBuffer().append(cr.toString()).append(":").append(value.toString()).toString();
}
}
}
3. 保存并預(yù)覽
點(diǎn)擊填報(bào)預(yù)覽,BS界面除了FR報(bào)表自帶的提交按鈕和數(shù)據(jù)校驗(yàn)按鈕外,還多了一個(gè)測(cè)試按鈕
點(diǎn)擊測(cè)試按鈕,出現(xiàn)測(cè)試界面
自定義控件CSS
在實(shí)際項(xiàng)目中,為了更符合使用者的審美觀或者讓FineReport報(bào)表和總體框架協(xié)調(diào),可能需要修改一些頁(yè)面顯示的樣式表(CSS),如更換控件的圖標(biāo)或者改變填報(bào)表單控件的顯示樣式等。
自定義控件圖標(biāo)
如下以下拉樹控件為例說(shuō)明如何改變控件的圖標(biāo)。
1.下拉樹模板制作
1.1 新建報(bào)表
1.2 定義參數(shù)
在菜單欄中選擇報(bào)表|報(bào)表參數(shù),定義報(bào)表參數(shù)tree。
1.3 參數(shù)界面設(shè)置,如下圖所示
1.4 控件設(shè)置,如下圖所示
類型選擇下拉樹,層次有兩層,定義如下圖
1.5 分頁(yè)預(yù)覽
分頁(yè)預(yù)覽可以看到默認(rèn)的控件圖標(biāo)如下
2. 引用CSS更換控件圖標(biāo)
2.1 收集圖標(biāo)
收集好需要使用的圖標(biāo),推薦大小為16×16,假設(shè)想讓樹葉的圖標(biāo)為leaf.gif。
2.2 保存圖標(biāo)
在WebReport目錄下(即和WEB-INF平行的地方)新建一個(gè)文件夾,文件名為custom,將第一步的圖標(biāo)放入該文件夾內(nèi)。
2.3 生成CSS樣式
在custom文件夾內(nèi)新建一個(gè)css文件,如叫custom_tree.css,內(nèi)容如下:
.bbit-tree-node-leaf{background:url("leaf.gif");}
說(shuō)明:該語(yǔ)句是用來(lái)置換樹葉的樣式。
2.4 引用CSS
打開使用下拉樹控件的報(bào)表,點(diǎn)擊菜單報(bào)表|報(bào)表Web屬性|引用css,在控件自定義樣式表界面點(diǎn)插入按鈕后寫上custom_tree.css的相對(duì)路徑:
custom/custom_tree.css
確定后保存報(bào)表。
2.5 分頁(yè)預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的分頁(yè)預(yù)覽,可看到更換圖標(biāo)后的下拉樹效果
3. 控件相關(guān)CSS
下拉樹控件
.bbit-tree-node-expanded.bbit-tree-node-icon //節(jié)點(diǎn)展開的樣式
.bbit-tree-node-leaf.bbit-tree-node-icon //樹葉的樣式
.bbit-tree-node-collapsed.bbit-tree-node-icon //閉合的樣式
.bbit-tree-node-loading.bbit-tree-node-icon //正在加載的樣式
填報(bào)焦點(diǎn)框變成紅色
默認(rèn)情況下,填報(bào)預(yù)覽時(shí),焦點(diǎn)所在的編輯框是用黑色加重顯示的,F(xiàn)ineReport也可以讓用戶通過(guò)引用CSS樣式來(lái)改變焦點(diǎn)框的顏色,以下就以用紅色加重顯示焦點(diǎn)框來(lái)做說(shuō)明。
3.1 打開reportlets\doc\Tutorial\Form\stuff.cpt 報(bào)表。
3.2 引用CSS改變焦點(diǎn)框顏色
l 在WebReport目錄下新建一個(gè)文件夾,文件名為write,在write文件夾下新建一個(gè)名為custom_cell.css的文件,文件內(nèi)容為:
.fDtop, .fDbottom, .fDleft, .fDright, .fDdot{ border:1px solid red; }說(shuō)明:該語(yǔ)句是用來(lái)改變焦點(diǎn)框的顏色
l 引用CSS
打開stuff報(bào)表,依次點(diǎn)擊菜單報(bào)表|報(bào)表web屬性|引用Css,在控件自定義樣式界面點(diǎn)插入按鈕后寫上custom_cell.css的相對(duì)路徑:
write/custom_cell.css
確定后保存報(bào)表
3.3 分頁(yè)預(yù)覽
點(diǎn)擊設(shè)計(jì)器中的分頁(yè)預(yù)覽,可以看到進(jìn)入編輯狀態(tài)的焦點(diǎn)框變成紅色了
注:同理,凍結(jié)線也可以按照類似的步驟進(jìn)行自定義。
其他JS函數(shù)
FineReport包含的大量的JS函數(shù)供用戶調(diào)用,現(xiàn)列表如下
1. 對(duì)象函數(shù)
Array:
indexOf //計(jì)算一個(gè)參數(shù),返回它在數(shù)組中的位置,如果不在數(shù)組中,則返回-1
remove //移除數(shù)組對(duì)象中一個(gè)指定的元素,并返回一個(gè)新的數(shù)組
String:
leftPad //返回一個(gè)左對(duì)齊的字符串
format //返回格式化后的字符串
startWith //判斷一個(gè)字符串是否以指定的字符串開始
endWith //判斷一個(gè)字符串是否以指定的字符串結(jié)束
2. 常態(tài)函數(shù)
FR.isArray //判斷一個(gè)對(duì)象是否是一個(gè)數(shù)組
FR.toRE //將普通字符串轉(zhuǎn)化為表示正則表達(dá)式的字符串
FR.extend //實(shí)現(xiàn)JavaScript類的繼承
FR.SessionMgr.get //根據(jù)sessionID生成BasePane
FR.cjkEncode //返回對(duì)中日韓問(wèn)做了特殊轉(zhuǎn)換的字符串
FR.cjkDecode //將cjkEncode處理過(guò)的字符串轉(zhuǎn)化為原始字符串
FR.jsonEncode //返回json格式的字符串
FR.jsonDecode //將json格式的字符串轉(zhuǎn)化為對(duì)象
FR.object2String //將object轉(zhuǎn)換為一個(gè)字符串并以json的格式來(lái)寫這個(gè)字符串
FR.contains //判斷對(duì)象c是否包含在對(duì)象p中
FR.accDiv //精確除法
FR.accMul //精確乘法
FR.accAdd //精確加法
FR.accMin //精確減法
3. UI函數(shù)
FR.showDialog //顯示一個(gè)對(duì)話框
FR.showIframeDialog //在一個(gè)iframe中顯示對(duì)話框
FR.showRemoteDialog //顯示一個(gè)異步加載的對(duì)話框
FR.closeDialog //關(guān)閉對(duì)話框
FR.Msg.Alert //對(duì)window的alert方法的替代實(shí)現(xiàn)
FR.Msg.Confirm //確認(rèn)信息對(duì)話框
FR.Msg.Prompt //輸入信息對(duì)話框
4. 打印
FR.doURLPDFPrint //使用PDF打印指定url的報(bào)表
FR.doURLAppletPrint //使用Applet打印指定url的報(bào)表
FR.doFlashURLPrint //使用Flash打印指定ur的報(bào)表
5. jQuery布局
__border__ //把指定dom元素按東南西北中的方式布局
__grid__ //把指定的dom元素按格子分布方式布局
6. 組件注冊(cè)和生產(chǎn)
FR.comp.reg //注冊(cè)是一個(gè)指定type的組件
FR.comp.create //在指定dom節(jié)點(diǎn)上生成一個(gè)組件
7. FR.OB(事件觀察者)
fireEvent //觸發(fā)一個(gè)有FR.OB對(duì)象定義的事件
on //給FR.OB對(duì)象添加一個(gè)事件
once //給FR.OB對(duì)象添加一個(gè)僅執(zhí)行一次的事件
un //從一個(gè)FR.OB中移除掉指定事件
purgeListeners //移除掉一個(gè)FR.OB下的所有事件
8. FR.Widget(控件) extends OB
isEnable //判斷一個(gè)控件是否可用
isVisible //判斷一個(gè)控件是否可見
enable //使控件可用
disable //使控件不可用
9. FR.Form(表單) extends OB
formSubmit //表單提交
getValueByName //根據(jù)名字獲取表單對(duì)象中控件的值
getWidgetByName //很據(jù)名字獲取表單對(duì)象中的控件
getWidgetByCell //根據(jù)單元格獲取控件
10. FR.BasePane extends Widget
Load //加載報(bào)表頁(yè)面(展現(xiàn)、填報(bào))
loadReportPane
zoom // IE6下的放大鏡
11. FR.BaseEditor extends Widget
getValue //獲取編輯器的值
setValue //設(shè)置編輯器的值
reset //重置編輯器的值,設(shè)為字符串
isValidate //判斷當(dāng)前編輯器的值是否有效
getErrorMsg //獲取編輯器值無(wú)效時(shí)的錯(cuò)誤信息
startEditing //編輯器開始編輯
stopEditing //編輯器停止編輯
12.
FR.FileUploadEditor(文件上傳控件) extends BaseEditor
FR.CheckBoxGroup(復(fù)選按鈕組控件) extends BaseEditor
FR.RadioGroup(單選按鈕組控件) extends BaseEditor
FR.ToogleButton extends BaseEditor
Selected //檢查button的選中狀態(tài)或者設(shè)置button的選中狀態(tài)
FR.CheckBox extends ToogleButton
FR.Radio extends ToogleButton
FR.TextEditor(文本控件) extends BaseEditor
selectText //選取文本編輯器值的指定位置的字符串
FR.NumberEditor(數(shù)字控件) extends TextEditor
FR.DateTimeEditor(日期時(shí)間控件) extends TextEditor
FR.TriggerEditor extends TextEditor
onTriggerClick //點(diǎn)擊trigger圖標(biāo)的事件
FR.ComboBoxEditor(下拉框控件) extends TriggerEditor
onTriggerClick
setMode //設(shè)置下拉框的模式,通過(guò)該設(shè)置可以讓下拉框強(qiáng)制重新加載數(shù)據(jù)
isExpanded //判斷下拉框的下拉菜單是否已經(jīng)展現(xiàn)
expand //打開下拉框的下拉菜單
collapse //關(guān)閉下拉框的下拉菜單
FR.CheckboxEditor(下拉復(fù)選框) extends ComboBoxEditor
FR.TreeComboBoxEditor(下拉樹) extends CheckboxEditor
13.
FR.PagePane extends BasePane
currentPageIndex //全局變量:該ReportPage所屬的ReportPage集中的序號(hào)
reportTotalPage //全局變量:該ReportPage所屬的ReportPage集所生成的總的ReportPage的個(gè)數(shù)
gotoPage //將頁(yè)面跳轉(zhuǎn)到指定頁(yè)
gotoFirstPage //頁(yè)面跳轉(zhuǎn)至首頁(yè)
gotoLastPage //頁(yè)面跳轉(zhuǎn)至最后一頁(yè)
gotoPreviousPage //頁(yè)面跳轉(zhuǎn)至當(dāng)前頁(yè)的上一頁(yè)
gotoNextPage //頁(yè)面跳轉(zhuǎn)至當(dāng)前頁(yè)的下一頁(yè)
printReportServer //服務(wù)器打印
emailReport //郵件發(fā)送
pdfPrint // PDF打印
appletPrint // Applet打印
flashPrint // Flash打印
exportReportToPDF //將報(bào)表導(dǎo)出成PDF
exportReportToExel //將報(bào)表導(dǎo)出成excel
exportReportToWord //將報(bào)表導(dǎo)出成word
14.
FR.WritePane extends BasePane
curLGP //變量:填報(bào)頁(yè)面當(dāng)前的邏輯數(shù)據(jù)處理對(duì)象
getCellValue //獲取指定格子的值
setCellValue //設(shè)置指定格子的值
stopEditing //停止當(dāng)前填報(bào)面板的編輯
verifyAndWriteReport //在自動(dòng)校驗(yàn)后才提交報(bào)表入庫(kù),如果校驗(yàn)失敗,則不會(huì)入庫(kù)
writeReport //直接提交報(bào)表入庫(kù)
saveReport //保存報(bào)表
verifyReport //校驗(yàn)報(bào)表
pdfPrint // PDF打印
flashPrint // Flash打印
exportReportToPDF //將報(bào)表導(dǎo)出成PDF
exportReportToExcel //將報(bào)表導(dǎo)出成Excel
exportReportToWord //將報(bào)表導(dǎo)出成Word
printReportServer //服務(wù)器端打印
emailReport //郵件發(fā)送
FR.WLGP(WritePane的邏輯數(shù)據(jù)處理對(duì)象) extends FR.OB
Idx //變量:報(bào)表索引
getCellValue //獲取指定格子的值setCellValue //設(shè)置指定格子的值
fireCellValueChange //單元格值改變后出發(fā)該函數(shù)
isSelectable //判斷該dom的tdCell是否可被選中
selectTDCell //選中dom tdCell。也就是加個(gè)黑邊框,并確保tdCell在屏幕顯示范圍內(nèi)
editTDCell //編輯dom tdCell
clearCellSelection //清除格子的選中狀態(tài)
displayTDCell //把值顯示在td里面