




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
靈活使用dorado5v1.0
靈活使用dorado5
2007年9月
靈活使用dorado5v1.0
目錄
靈活使用doardo54
前言4
事例一:用于資源分配的DataTable5
情景描述5
典型界面5
數據庫準備6
解決思路7
知識點7
使用自定義的數據源7
利用keyGenerator屬性為記錄自動分配主鍵9
服務器端動態為Dataset添加字段。10
重視EventManager的使用13
DataTable的footer的用法14
通過Dataset的beforeChange事件維護業務約束15
代碼清單15
事例二:模擬多行表頭的DataRble22
情景描述22
典型界面23
數據庫準備24
解決思路25
知識點25
服務器端動態生成Dataset25
VBC:一種面向業務的客戶端的代碼風格29
客戶端動態生成DataBble34
使用onRefresh事件控制顯示形式35
利用listDatasets()函數得到頁面所有的Dataset35
控制Dataset部分記錄可以被編輯36
控制DataBble的部分Cell可以被編輯36
手動修改記錄的狀態36
UpdateCommand的reduceReturnlnfo屬性37
事例三:具有三種狀態的靜態樹38
情景描述38
典型界面39
Dataset結構40
解決思路41
代碼清單41
知識點47
_CONTEXT_PATH常量47
手動為節點添加子節點48
利用遞歸方法構造完整的樹48
靈活使用dorado5v1.0
自定義Tree的onRefreshNode事件49
同步父子節點狀態同步的算法50
事例四:分組顯示的RadioBox53
情景描述53
典型界面53
數據庫準備54
Dataset結構55
解決思路55
代碼清單55
知識點61
引入用戶JavaScript庫62
按照面向對象的思想擴展組件62
組件包裝器63
擴展組件的激活函數63
客戶端創建菜單64
視圖約束(ViewRules)的入口65
自定義組件的Model層66
自定義組件Model層對外的數據接口67
事例五:代碼翻譯69
情景描述69
幾種常見的方案69
方案一:數據庫翻譯69
方案二:服務器端翻譯69
方案三:客戶端翻譯69
一種另類的翻譯70
使用步驟70
解決思路72
源代碼72
靈活使用dorado5v1.0
靈活使用doardo5
刖B
《靈活使用dorado5》是面向具有dorado中級開發能力的群體,即滿足《dorado
學習建議》中3級要求的開發者。如果您對文中的概念或者API不是非常熟練可以參考
dorado5的其他資料,強烈推薦《dorado5用戶指南》。
Dorado是款結合了RIA/AJAX技術的面向企業級的交互型應用的展現層中間件。
獨特的Dorado引擎維護了客戶端MVC模型以及客戶端與服務器端的AJAX通信。將數據
與展現形式分離的思想導致Dataset數據集和Control組件的誕生,從此客戶端的關注
點山展現形式轉移到了對數據的控制上,提高了對業務邏輯的抽象層次,增強了對業務邏輯
的控制能力,加速了對展現形式變化的響應速度。
Dorad。是按照企業應用通用場景建模的,幾乎滿足所有的企業交互型應用的需要。由
于這個建模基礎使得我們在很多情況下只要通過配置或者編寫少量的腳本就可以滿足需求。
對于某些特殊業務可能需要我們編寫一定量的代碼才能滿足,好在我們是站在巨人的肩膀上
思考問題,有了Dorado為我們提供的服務器端與客戶端的完整易用的框架模型,只要稍
加思考通常可以在此基礎上快速找到解決方案。本文檔也是站在這樣的高度向大家展示如何
靈活運用Dorado模型以及按照Dorado的思維來解決非典型的應用需求,文檔重點以思
路分析與代碼展示為主,并且講述了一種叫做VBC的面向業務的客戶端代碼的編寫風格,
幫助我們保持業務流程和腳本結構的清晰度。
靈活使用dorado5v1.0
事例一:用于資源分配的DataTable
情景描述
本事例是按照客戶向供應商購買服務包的應用場景制作的關于有限資源完全與非完全分配
的模型,圖1.2是我們希望達到的效果。
典型界面
為了完整的模擬這種場景,我們將演示其中最重要的兩個步驟:
第一步:登記資源,如圖1.1。
主徒?分組?標題急救量順序
?eb4d2a84b7…fruit蘋果51
eb4d2a84b7…fruit橘子42
eb4d2a84b7...fruit香蕉33
eb4d2384b7…fruit苣喔64
eb4d2384b7…fruit芒果25
保存添加刪除
圖1.1資源登記
第二步:分配資源,如圖1.2。
名麻蘋果幡子香蕉草套芒果一
,李芳偉0□□□□
輻0□□□□
李桂平回□□□□
柳香回□□□□
孫靜0□□□□
王小亮□0□□口
張揚口0□□口
趙文力口回□□□
趙欣欣口0□□□
周明明口口□□□
已分配/總量5/54〃0/30/60/2▼
保存
靈活使用dorado5v1.0
圖1.2分配資源
另外在資源分配時還要做一些保護工作,如圖1.3。
保護:當沒有資源可以分配時,需要給出提醒并阻止不正確的分配。
林
府草莓芒果'
李芳偉0□
□□□
李
3回□
□□□
平
李桂0□
□□□
柳
W回
□1—11—;1—I
靜
回
孫VindovsInternetExplorer|^|
□R0/
□0小已經達到了最大數量,不能再分配了
□
趙
史力0
£確定一,
趙
欣欣
□回
周
明明
口
口
□□□
已分配/總量5/54/40/30/60/2
圖1.3資源分配中的約束
數據庫準備
我們需要3張表:
第一張:Mark_Resource資源信息表,結構如下圖:
列名1數據類型1長度1允i轉
9idvarchar50
groupbyvarchar50
titlevarchar50
totalint4
orderbyint4?
第二張:Mark_People人員信息表,結構如下圖:
列名1數據類型1長度1允詳空
id“archer50
namevarchar50
dept」dvarchar50?
salarydecimal9?
第三張:Mark_People_Resource資源分配表,結構如下圖:
列名|數據類型|長度|允許空|
peoplevarchai,50
resource“archer50
groupbyvarchar50
靈活使用dorado5v1.0
解決思路
圖1.1資源登記的思路如下:
1.使用keyGenerator為資源分配主鍵。
2.使用DataTable組件,保證批量數據的錄入。
圖1.2與圖1.3分配資源的思路如下:
1,定義一個CustomDataset叫做datasetResourceo
2.datasetResource預定義兩個字段key>name分別代表資源分配接收者的主鍵和名
字。
3.在服務器端視圖模型的initDatasets方法中根據資源分組依據訪問數據庫,從
Mark_Resource資源表中獲得資源。
4.根據藐得的資源為datasetResource添加字段。其中資源的主鍵作為字段的name,
資源的名稱作為字段的label;每個資源的最大數量信息被記錄在dataResource的
$maxSumString參數中。
5.在服務器端視圖模型的doLoadData方法中為datasetResource填充記錄。訪問數
據庫,從Mark_People表中獲得人員信息,向datasetResource中填充記錄,可
以正確填充key與name字段內容;根據資源分組依據從Mark_People_Resource
獲得資源的已分配的信息,正確填充動態生成字段的內容。
6.客戶端使用DataTable顯示信息。
7.資源字段使用CheckBox渲染,并且自定義兩個屬性sum和maxSum分別表示資源總
量和已經分配的數量。maxSum的值通過解析datasetResource的$maxSumString
參數值獲得,sum通過遍歷datasetResource獲得。
8.利用DataTable的onFooterRefresh事件實時反應資源的分配情況。
9.利用Dataset的beforeChange事件保證資源分配的正確性。
知識點
使用自定義的數據源
在JDBC盛行的時代里很多公司自主開發了持久層解決方案,經過多個項目的考驗后,
通常能夠滿足特定領域的需求。Dorado為這類持久層提供了方便的集成接口,步驟如下:
1.在datasource.xml聲明我們自定義的數據源,配置如圖1.4:
k?xiixlveision=°l.encodingcf,UTF-B,r>>
<datasources>
<datasourcenanie=rrcustoiafrtvpe=,rUSERrr>
<dialect>com.bstek.dorado,data.db.dialect.MSSQLDialect</dialect>
<clazz>com.bstek.mark.db.CustomConnectionFactory</clazz>
</dat-asource>
</datasources>
圖1.4自定義數據源的配置信息
從上圖中我們可以看出如下信息:
靈活使用dorado5v1.0
1.自定義數據源的類型一定是USER(即type=〃USER〃)。
2?該數據源的名稱為customo
3?該數據源的方言為com.bstek.dorado.data.db.dialect.MSSQLDialect,
即使用SQLServer數據庫。
4.該數據源的實現類為com.bstek.mark.db.CustomConnectionFactory,當
我們需要使用java.sql.Connection時,dorado會自動的從這個類中獲取。
2.你大概又寸com.bstek.mark.db.CustomConn6ctionFactory感興趣了,事實上
它繼承了com.bstek.dorado.common.ds.DataSourceConfig類,并且僅僅需要實
現publicConnectiongetConnection()方法,如卜代碼。
publicConnectiongetConnection(){
Stringurl='*jdbc:microsoft:sqlserver:'1+
n//localhost:1433;DatabaseName=markdemon;
Stringuser=nsan;
Stringpassword=nn;
Connectionconn=null;
try(
Class.forName(ncom.microsoft.jdbc.'1+
Hsqlserver.SQLServerDriver*').newlnstance();
conn=DriverManager.getConnection(url,user,password);
}catch(InstantiationExceptione){
e.printStackTrace();
}catch(IllegalAccessExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(SQLExceptione){
e.printStackTrace();
)
returnconn;
}
上面的代碼硬編碼了使用JDBC獲取數據庫的連接僅僅是為了演示該功能的代碼接口
而已,實際生產中這里會調用公司內部持久層來獲得與數據庫的連接。
3.經過了上面的兩個步驟后,我們就可以使用該數據源了,方法與使用JDBC或JND1
方式完全相同。例如在圖1.5中我們使用custom數據源定義了一個AutoSqlDataset,
id為datasetResource,對應的數據庫表為mark_resource。
靈活使用dorado5v1.0
ZPropertiesInspector]EventsInspector/SourceEditor
圖1.5使用自定義數據源
利用keyGenerator屬性為記錄自動分配主鍵
在圖1.5中注意到在字段id中定義了?叫做keyGenerator的屬性,這是在使用
Dorado的主鍵生成功能,保證我們不需要書寫JAVA代碼就可以自動的為插入到數據庫的
記錄分配主鍵,這樣可以脫離枯燥的分配主鍵的循環的JAVA代碼,具體步驟如下:
1.定義全周的主鍵生成策略,在setting.xml中配置data.keyGenerator。
<propertyname="data.keyGenerator**value=n
com.bstek.mark.key.DemoKeyGenerator”/>
2.上面的com.bstek.mark,key.DemoKeyGenerator類就是產生主鍵的工廠,需要
實現com.bstek.dorado.data.KeyGenerator接口,事例代碼如下:
publicclassDemoKeyGeneratorimplementsKeyGenerator{
publicStringgetKey(Datasetdataset,ReadRecordrecord,Stringvalue)
throwsException{
Stringkey=UniqueKey.getKey();
returnkey;
)
}
3.在DBDataset的主鍵字段中配置keyGenerator屬性,如圖1.6。
Outime:
*StandardViewiRotatedView—MergedView
Xlew
PropertykeyGenerator
」Datasets
namekeyGenerator
?-fdatasetResource
口Joinsvalue
a匕Fields
七Gid
三Properties
keyGenerator
靈活使用dorado5v1.0
圖1.6使用keyGenerator
在上圖中并沒有配置keyGenerator屬性的value值,事實上這里配制的value值
會傳遞到DemoKeyGenerator的getKey方法的第三個參數中(即Stringvalue的參
數),也就是說如果我們具有很多個主鍵生成策略,那么可以通過的值來選擇不同的
策略,所以DemoKevGenerator的職能更力口像是主鍵分配策略的工廠。當然我們也可以
通過Dataset或者ReadRecord參數來選擇策略,不過這樣的設計復雜了一些,最簡單
的就是僅僅使用一種策略。如果項目中使用的是Oracle數據庫并且唯一的主鍵分配策略
是從不同的Sequence中獲得的鍵值,那么Dorado已經為我們提供了這樣的
keyGenerator,使用時setting.xml做如下配置:
<propertyname='*data.keyGenerator"value=n
com,bstek.dorado.data.db.dialect.OracleSequenceKeyGeneratorn/>
另外主鍵字段的keyGenerator屬性的value中填寫Sequence的名稱,如圖1.7。
ip________________L
Outline:
-StandardView?Rotat&dViewMergedView
*TviewA
PropertykeyGenerator
:一」Datasets
namekeyGenerator
.BifdatasetResource
valueresource_sequence
OJoins
啟OFields
母@ld
5Properties
圖1.7使用OracleSequenceKeyGenerator的字段配置
注:實現圖1.1的功能我們只用到了上面的兩個知識點,沒有書寫任何JAVA代碼,主體
功能只需要配置信息就可以完成,所以具體實現不在這里累述,圖1.2的功能需要重點描
述。
服務器端動態為Dataset添加字段。
在訪問圖1.2即資源分配的頁面時,我們需要知道對哪組資源進行分配,分組信息通
過URL參數傳遞,所以URL中應該包含groupby=xxx的參數,本事例中使用
groupby=fruito當知道了資源分組信息后,我們就可以訪問數據庫得到該組下的所有資
源了,每一種資源作為dataset的一個字段存在,所以字段的數量不是確定的,我們需要
調用Server端Dataset與BaseField的AP工動態的為dataset添加字段,通常來說
這個步驟是在視圖模型的initDatasets()中做。圖1.8是該方法的完整代碼:
protectedvoidinitDatasets()throwsException{
super.initDatasets();
if(this.getState()==ViewModel.STATE_VIEW){
//@1.檢驗groupby參數
Stringgroupby=DoradoContext.getContext().
getParameter("groupbyn);
if(null==groupby||nn.equals(groupby)){
thrownewException("請在url后添力口groupby參數,”+
”例如:?groupby=fruitn);
)
靈活使用dorado5v1.0
StringBuffermaxSumParameter=newStringBuffer();
ViewBaseFieldfield=null;
ViewDatasetdatasetResource=
this.getDataset(,,datasetResourceH);
//@2.獲得需要分配的資源
DBStatementdbStmt=newDBStatement();
dbStmt.setDataSource("custom");
dbStmt.setSql(^select*frommark_resource”+
"wheregroupby=:groupbyorderbyorderby");
dbStmt.parameters().setstring("groupby”,groupby);
Listresult=dbStmt.queryForList();
dbStmt.close();
//03.為datasetR一source添力「字段
for(inti=0<size=result.size();i<size;i++){
VariantSetvs=(VariantSet)result.get(i);
field=(ViewBaseField)datasetResource.
addField(vs.getString("id"));
field.setDataType("int");
field.setDefaultvalue(0);
field.setLabel(vs.getString(ntitlen));
maxSumParameter.append(field.getName()+":"+
vs.getInt("total")+n;n);
)
datasetResource.parameters().setstring(n$maxSumStringH,
maxSumParameter.toString());
}
}
圖1.8動態為Dataset添加字段
在圖1.8中我們遍歷通過資源分組信息得到的資源列表為datasetResource添加
字段,資源的id作為了字段的id,資源的title作為了字段的label,并且字段為int類
型默認值為0。還注意到為datasetResource添加了$maxSumString的參數,其值為:
'、資源工D:資源數量;〃格式組成的字符串,作用是在客戶端為資源分配的限制提供依據。
既然字段是動態生成的那么向dataset中添加數據是不是很困難呢?通常不會很困
難,因為字段是根據業務動態添加的,數據也是根據業務填充的,由于來源于相同的依據,
所以并不會有很大的阻力,圖1.9是向datasetResource填充正確數據的完整代碼,
由于在這個場景中不能一次給予datasetResource正確的記錄,所以使用了一個小技巧,
利用HashMap為datasetResource記錄建立ID的索弓I。
protectedvoiddoLoadData(ViewDatasetdataset)throwsException{
super.doLoadData(dataset);
if(this.getState()==ViewModel.STATE_VIEW&&
dataset.getld().equals("datasetResource")){
//01.檢驗groupby
靈活使用dorado5v1.0
Stringgroupby=DoradoContext.getContext().
getParameter(ngroupbyH);
if(null==groupby||"H.equals(groupby)){
thrownewException("請在url后添加groupby參數,”+
“例如:?groupby=fruitn);
)
//@2.向datasetResource中添力口初始化的記錄,并構造resourceRecordMap
DBStatementdbStmt=newDBStatement();
dbStmt.setDataSource("custom0);
dbStmt.setSql(DBStatement.SELECT,"mark_peoplen);
ListpeopleList=dbStmt.queryForList();
dbStmt.close();
MapresourceRecordMap=newHashMap(peopleList.size());
for(inti=0;KpeopleList.size();i++){
VariantSetvs=(VariantSet)peopleList.get(i);
Recordr=dataset.insertRecord();
n11
r.setstring(keyzvs.getString("id"));
r.setstring(unamen,vs.getString(nnameH));
r.setState(Record.STATE_NONE);
resourceRecordMap.put(vs.getString("id"),r);
)
dataset.moveFirst();
//@3.為datasetResource填充真正的數據
dbStmt.setSql(DBStatement.SELECT,nmark_people_resourcen);
dbStmt.parameters().setstring("groupby”,groupby);
ListpeopleResourceList=dbStmt.queryForList();
dbStmt.close();
for(inti=0;KpeopleResourceList.size();i++){
VariantSetvs=(VariantSet)peopleResourceList.get(i);
Stringpeopleld=vs.getString(npeoplen);
Recordresource=(Record)resourceRecordMap.get(peopleld);
if(null!=resource){
resource.setlnt(vs.getString("resource”),1);
resource.setState(Record.STATE_NONE);
)
)
)
}
圖1.9給datasetResource添加正確的數據
靈活使用dorado5v1.0
重視EventManager的使用
到目前為止我們已經可以將存儲在數據庫中的資源分配信息加載到Dataset中了,服
務器端的工作已經結束。對頁面和組件的展現形式需要通過客戶端的JavaScript控制,
在介紹客戶端的代碼之前,現看一下該視圖模型的配置信息,如圖1.10。
Outline:-StandardView'IRotatedViewi~MeraedView
*7*view
PropertytableResource
5Datasets
confirmCancel
〈£■ifadatasetResource
?MasterLlnkconfirmDelete
idcjFieldsdatasetdatasetResource
Si。keyeditable
電國&namefixedColumn
+」ParametersifooterHelght
,:「PropertiesheaderHeight
SOControlsheight300
七曲黨國賽
highlightselection
日name
idtableResource
t-'QcmdSave
Ignored
3Datasetinfos
-datasetResourceleft
三:ParameterslocalSort
?groupbymaxRow
劍btSavereadonlytrue
見btEditrowDraggable
OPropertiesrowHeight
圖1.10資源分配視圖模型的配置信息
由圖1?9和圖1.10可見,先定義了datasetResource的key與name字段,其
他的字段是服務器端動態生成的。tableResource綁定了datasetResource但只定義
了name歹U,那么其他的列是什么時候在哪里怎樣添加的呢?
答:是在客戶端視圖模型的onDatasetsPrepared(ViewModel)事件中最終調用
EventManager添力H的。
圖1.11是客戶端onDatasetsPrepared(ViewModel)事件完整代碼。
baseDataset=datasetResource;
//@1.初始化dataset.field.maxSum
Base?initFieldMaxSum(baseDataset);
//@2,初始化dataset.field.sum
Base.initFieldSum(baseDataset);
//@3.給dataset添加約束
EventManager.addDoradoEvent(baseDataset,
“beforeChange",Base.updateFieldSum);
//@4.初始化datatable.column
Base.initDatatableColumn(baseDataset,tableResource);
//@5.初始化btEdit的。nClick事件
EventManager.addDoradoEvent(btEdit,"onClick',,
function(button){
Base,DataTabletoEditState(tableResource);
button.disabled=true;
靈活使用dorado5v1.0
btSave.disabled=false;
});
//@6.成功保存后的動作
EventManager.addDoradoEvent(cmdSave,"onSuccess**,
function(command){
Base,DataTabletoReadState(tableResource);
btSave.disabled=true;
btEdit.disabled=false;
});
圖1.11onDatasetsPrepared(ViewModel)事件完整代碼
圖1.11中的代碼非常簡單,只做了兩件事情:
第一件:為了完成業務功能進行的初始化工作。
第二件:通過EventManager為DoradoElement添力II事件。
當查看該視圖模型的源文件時,你會發現我們并沒有通過studio為組件和Dataset
添加任何事件,事實上這些事件是使用JavaScript禾!]用EventManager添力口的。這種
做法的意義遠大于EventManager的功能,詳細內容我們將在事例二中介紹,并且引入一
種叫做VBC的面向業務的客戶端編碼風格。
現在需要說明客戶端代碼的思路了,還記得我們在服務器端為datasetResource添
加一個叫做$maxSumString的參數嗎?里面記錄著每種資源可分配的數量。在客戶端我們
就會使用它了,通過調用Base.initFieldMaxSum(baseDataset);將資源可分配數量
信息記錄在對應字段的maxSum屬性上;通過調用Base.initFieldSum(baseDataset);
將資源已分配數量記錄在字段的sum屬性上;這兩個信息通過DataTable的
onFooterRefresh事件顯示在footer上,對資源分配的限制是通過
datasetResource的beforeChange監視的。
DataTable的footer的用法
在圖1.2中我們看到了DataTable的footer的效果,近距離觀看如下圖。
巳分配/總量5/54/41/33/60/2
如果您想使用DataTable的footer,只需要將DataTable的showFooter屬性
設置為true。
sh^F^ote?k
使用footer顯示什么內容可以通過onFooterRefresh事件來實現。
Ige1.'inu
巳OControls
-ffltableResourcefunctiononFooterRefresh(column,cell,value){
nametell.innerHTML="已分配/總量”;|
由于dorado提供了事件編程接口,所以可以在footer上實現動態的復雜的顯示效
果,在該事例的每個資源對應的Column的onFooterRefresh事件的代碼是這樣的:
Base.drawFooter=function(column,cell,value){
varfield=baseDataset.getField(column.getField());
靈活使用dorado5v1.0
varfootHtml=n<divstyle=*width:100%;text-align:center1>n
+Base.getFieldSum(baseDataset,field)
++field.maxSum+n</div>n;
cell.innerHTML=footHtml;
}
通過Dataset的beforeChange事件維護業務約束
該事件的關鍵特性是:如果返回值為AbortException或DoradoException可以
阻止用戶對Dataset中值的修改,如果返回的是AbortException則系統會終止默認的
后續操作,如果返回的是DoradoException系統會首先給出提示信息然后終止默認操作。
圖1.12中的Base.updateFieldSum就是datasetResource的beforeChange的
事件句柄,如果用戶分配資源的數量大于資源總量會返回DoradoException,效果見圖
1.3:
Base.updateFieldSum=function(dataset,record,field,value){
varsum=field.sum;
if(sum===undefined||sum===null){return;}
varresultSum=0;
switch(value){
case"0”:
Base.setFieldSum(null,field,parselnt(sum)-1);
break;
case"1":
resultSum=parselnt(sum)+1;
if(resultSum>parselnt(field.maxSum)){
returnnewDoradoException("已經達至U了最大數量,不能再4個西己了”);
}else{
Base.setFieldSum(null,field,resultSum);
}
break;
default:
alert(nother.value="+value);
)
}
圖1.12通過Dataset的beforeChange事件維護業務約束
代碼清單
到目前為止我們已經對客戶端的代碼總體分析了?次,下面是詳細代碼,也許你還會從
中看出幾分珠磯,見圖1.13。
varbaseDataset;
varBase={};
/**
靈活使用dorado5v1.0
*初始化field,sum
*?paramDatasetdataset
*?paramField[]fieldArray[optional]
*注:如果fieldArray沒有值,則遍歷dataset的所有field
*/
Base.initFieldSum=function(datasetAfieldArray){
if(!fieldArray){
varfieldCount=dataset.getFieldCount();
for(vari=0;i<fieldCount;i++){
Base.setFieldSum(dataset,dataset.getFieId(i));
}
}else{
varfieldCount=fieldArray.length;
for(vari=0;i<fieldCount;i++){
Base.setFieldSum(dataset,fieldArray[i]);
)
)
}
/**
*初始化field.maxSum
*?paramDatasetdataset
*@paramintdefaultvalue
*/
Base.initFieldMaxSum=function(dataset,defaultvalue){
var$maxSumString=dataset.parameters().getValue(n$maxSumStringH);
vargetFieldMaxSum=function(parameterName){
varindexl=$maxSumString.indexOf(parameterName);
if(indexKO){returnparselnt(defaultValue);}
nn
varindex2=$maxSumString.indexOf(:z
indexl+parameterName.length);
varindex3=$maxSumString.indexOf(";n,index2+l);
varmaxSum=$maxSumString.substring(index2+lzindex3);
returnmaxSum;
);
varfield,fieldName;
for(vari=0,fieldCount=dataset.getFieldCount();i<fieldCount;i++){
field=dataset.getField(i);
fieldName=field.getName();
if(fieldName==ukeyn||fieldName==,,nameH){continue;)
field.maxSum=getFieldMaxSum(field.getName());
*給dataset添加I約束
BSTEK靈活使用dorado5v1.0
*@paramDatasetdataset
*?paramRecordrecord
*?paramFieldfield
*QparamAnyvalue
*注:在dataset.beforeChange事件中調用的,僅僅用至U了field和value參數
*/
Base.updateFieldSum=function(dataset,record,field,value){
varsum=field.sum;
if(sum===undefinedI|sum===null){return;}
varresultSum=0;
switch(value){
case”0":
Base?setFieldSum(null,field,parselnt(sum)-1);
break;
case”1”:
resultSum=parselnt(sum)+1;
if(resultSum>parselnt(field.maxSum)){
returnnewDoradoException("已經達至!j了最大數量,不能再分配了”);
}else{
Base.setFieldSum(null,field,resultSum);
}
break;
default:
alert(nother.value="+value);
}
|
/**
*初始化datatable.column
*@paramDatasetdataset
*@paramDataTabledatatable
*注:根據dataset給datatable添加column,并設置column的相關屬性和事件
*/
Base.initDatatableColumn=function(datasetzdatatable){
varfieldcount=dataset.getFieldCoun
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林省長春市2025年七年級下學期語文期末試題及答案
- 社團新聞稿寫作培訓指南
- 化工工程員工培訓課件
- 合規部制度培訓
- 《腰椎間盤突出課件》課件
- 車位租賃轉讓協議合同
- 退休返聘雇傭合同協議
- 春游家校協議書
- 進貨化妝品合同協議
- 沒給調解協議書
- 2025中小學學校校服采購工作方案
- 輸變電工程建設管理綱要
- 全球化背景下高中歷史家國情懷教育的策略
- 租地臨時建房合同協議
- 中央2024年市場監管總局直屬事業單位招聘筆試歷年參考題庫附帶答案詳解
- 四川達州鋼鐵集團招聘筆試題庫2025
- 護士法律法規知識培訓課件
- 檢驗科質量安全制度和流程
- 資源與運營管理-第二次形考任務-國開-參考資料
- 2025-2030激活素A行業市場現狀供需分析及重點企業投資評估規劃分析研究報告
- 多尺度矢量數據融合-全面剖析
評論
0/150
提交評論