




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
灵活使用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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衡阳师范学院《马克思主义哲学(下)》2023-2024学年第二学期期末试卷
- 电子科技大学中山学院《车辆建模与仿真》2023-2024学年第二学期期末试卷
- 甘肃省兰州市第六十三中学2025届高三3月期初测试化学试题含解析
- 武汉科技大学《数字化教学资源设计与开发(C)》2023-2024学年第二学期期末试卷
- 许昌职业技术学院《植物保健与和谐植保》2023-2024学年第二学期期末试卷
- 湖南吉利汽车职业技术学院《日本文学》2023-2024学年第二学期期末试卷
- 工程造价领域发展趋势
- 工程教育基础
- 厂房强化护栏施工方案
- 屋面设备基础施工方案
- 2019年10月自考03706思想道德修养与法律基础试题及答案含解析
- 无人机操控技术 课件全套 项目1-6 绪论-无人机自动机场
- 江苏红豆实业股份有限公司偿债能力分析
- 四川省2023年普通高等学校高职教育单独招生文化考试(中职类)数学试题(原卷版)
- 水力机械原理与设计课件
- 江苏电子信息职业学院单招职业技能测试参考试题库(含答案)
- 充电桩采购安装投标方案(技术方案)
- 7.1开放是当代中国的鲜明标识课件-高中政治选择性必修一当代国际政治与经济(1)2
- 2024年浙江首考英语听力原文解惑课件
- 民族团结教材
- 煤矿顶板管理技术培训课件
评论
0/150
提交评论