如果要设置模糊查询, 一般要在QueryCommand中这样写:

var name = dsQuery.getValue("NAME");
var parameters = command.parameters();
if (name) {
parameters.setValue("NAME", "%" + name + "%")
}

dataset如果没有分页的话, 默认一次是只取100条, 这也意味着如果记录超过100条就要考虑分页了, 如果我们不希望分页但是记录又操作了100条的话, 这需要将pageSize设置为-1

对于SQLDataset来说, orginTable属性是必须设置的, 这个比较奇怪, 我觉得这个orginTable只是对数据的修改才会有效, 虽然通过UpdateCommand做了提交,但是如果没有设置originTable就不应该做修改操作, 但是dorado内部却没有这么做, 所以这里除了无奈的设置originTalbe属性之外,还要借助Record.setState(none)的方式来避免做更新操作

还有一个可能会经常碰到的奇怪的地方,就是如果数据库中用一个char(1)来表示一个boolean值,在dataset中不能直接将其属性设置为boolean,而是必须设置为string, 然后手工设置editerType为checkbox, 而且在编辑的时候还需要在编辑器的onSetValue()事件中写如下代码: 
checkBox.checked = dsEntity.getValue("admin") == 1 ? true : false;否则打勾选中跟dataset之间的同步会有问题

单表操作是一个系统中会经常碰到的问题, 它简单,繁琐, 重复, 堪称无聊中的无聊. 因此我们在处理这种操作界面的时候通常会考虑到尽可能的重用, 因为没法做到继承, 所以我们只好不停的copy&paste, 当然通过插件提供的模板也可以简化我们的工作, 不过我在开发中更喜欢copy&paste, 毕竟做一个比较通用的模板也不是分分钟就能搞定的. 那么如何保证我们的copy&paste更有效, 改动更少呢? 我发现在在命名上有一定的技巧, 就是对各种通用的dataset和control采用泛型化的命名方式, 比如对一个公告表的单表操作, 在dataset上可以命名为dsEntity, 对于数据的列表显示可以命名为tblEntity, 编辑AutoForm可以命名frmEntity如此等等, 这样在对这些id进行引用时可以保证具有一定的稳定性, 不会因为换成另外一个单表的维护配置文件, 而需要对这些常用的id进行修改, 这样做多了, 模板自然而然就形成了. 因此我不推荐一开始就去建一个模板, 而是应该在应用中通过不断提炼总结而得到一些通用的模板

subwindow不要在view.xml文件中创建, 直接在jsp中定义, 否则在使用show(true, true)打开subwindow的时候出现无法居中的问题

通过远程调用不需要使用将WrappedDataset转换成具体的dataset(使用updatecommand执行远程调用时需要转换), 但是在复写init之类的方法则需要这样做, 即在ViewModel中需要将Dataset转换成指定类型的Dataset需要这样做:

Dataset dsRole = this.getDataset("dsEntity");
DatasetWrapper dr = (DatasetWrapper) dsRole;
SqlDataset ds = (SqlDataset) dr.getWrappedDataset();

在复写initDatasets方法的时候,需要注意通过getState()判断当前的请求的状态,因为在执行updatecommand之类的command,也会调用initDatasets方法

给某个日期字段设置为当前日期的写法

var current = dsQuery.getCurrent();
current.setValue("datetime", "${Util.getDate('yyyy-MM-dd HH:mm:ss')}");

或直接在dataset的指定field设置defaultValue属性为${Util.getDate("yyyy-MM-dd")}

对于formdataset来说,通过listener来为其加载数据(比如使用dataset.insertRecord()方法),在对应的的autoform中是不会取得数据的

dorado与报表 
交叉表只能放在summery区,否则会出现

引用
Error filling print... Error incrementing crosstab dataset 
net.sf.jasperreports.engine.JRRuntimeException: Error incrementing crosstab dataset

java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 607, local class serialVersionUID = 608

错误原因是 jasperreports.jar  版本不统一 
jrxml complie to jasper 是在 iReport  中完成的,然后直接把 .jasper  拷贝 到应用中使用,一直抛错,后来发现是 iReport   和应用中使用的 jar 版本不一致, 
iReport   :jasperreports-1.1.1.jar 
应用:jasperreports-1.2.0.jar 
统一为 jasperreports-1.2.0.jar 就可以了

如果要使用主从更新的话, 那么要取消掉主从之间的外键约束,否则在同时保存主从表的时候会出现违反主从外键约束的异常

通过在dataset的listener中使用insertRecord()添加一条记录的时候,记录的状态是none,然后放到前台来修改,最终提交的时候注意设置该记录的状态为new,因为该记录的状态仍然为none

在后台通过DBStatement插入记录的时候,如果有字段为date类型,那么插入的日期默认情况下是不带日期的(其他不清楚,反正oracle下是如此),要使得数据带日期,需要这样做:

Variant variant = new Variant();
variant.setDataType(12);
variant.setValue(new Date());
params.setVariant(fieldName, variant);

在staticTable中给日期字段设置显示格式的pattern写法:

引用
Util.formatDate(record.getDate("AUDIT_DATE"),"yyyy-MM-dd HH:mm:ss")

true和false转男女的写法:

引用
Util.switchValue(record.getBoolean("sex"),Resource.hr.male,Resource.hr.female)

格式化日期的表达式:

引用
Util.formatDate(record.getString("XXX"),"yyyy-MM-dd")

el表达式在server运行,一律是java对象。 
record就是Record对象,Util是com.bstek.dorado.common.rtexpr.impl.ExpressionUtils

在dorado写sql的时候,参数名最好采用下划线的方式命名, 这样更简洁

如果需要实现alert(message) + AbortException的功能, 请这样使用:

throw new DoradoException(message); 

dbstatement.close请谨慎使用, 因为close是关闭连接, 事务结束, 如果有多个操作的时候, 可能因为是在多个事务中操作而导致数据不一致

对于customdropdown来说, 从dropdown向外面传递选中的数据, 需要在指定的地方这样写: 
DropDown.closeFrame(dsEntity.getCurrent()); 
在外面接收需要在dropdown的onSelect事件中这样写:

if (selectedObject) {
var params = dsRichFormItem.parameters();
var formId = selectedObject.getValue("ID");
params.setValue("paymentFormId", formId);
params.setValue("formId", formId);
dsRichFormItem.flushData();
}
return true;

向customdropdown传递参数需要在ViewModel中通过指定路径后面添加参数来实现:

protected void initControl(Control control) throws Exception {
super.initControl(control);
if (getState() == STATE_VIEW && control.getId().equals("lstEmployee")) {
CustomDropDown lstEmployee = (CustomDropDown) control;
lstEmployee.setPath(lstEmployee.getPath() + "?employeeId=" + getInitiatorId());
}
}

在command中使用dsAssign.postRecord()验证语句时要这样用:

if (dsAssign.postRecord()) {
var employeeId = dsAssign.getValue("employeeId");
command.parameters().setValue("employeeId", employeeId);
command.parameters().setValue("accountId", dsAssign.getValue("accountId"));
}else{
return false;
}

否则在出错的时候也会提交

除了可以使用autosqldataset来做自动提交之外, 还可以使用sqldataset来做自动提交, 由于sqldataset具有更大的灵活性, 所以一般都采用之, 要使得能提交, 这里需要做一些设置, 一个是要设置dataset的originTable以及keyFields属性, 以及设置每一个要更新字段对应的数据库中表字段名

在设置dataset的只读, 可写属性之后记得refreshControl, 否则会有一些延迟的问题, 比如这样写:

dsEntity.getField("employee_name").setReadOnly(false);
dsEntity.refreshControls();

在使用QueryCommand+FormDataset做查询的时候, 有时候多次查询, 前一次查询的参数不会清除, 仍然会带到下一次查询, 这里我们需要在command的onSuccess事件中写这样的代码:

cmdQuery.parameters().clear(); 

在使用sqldataset做模糊查询的时候, 要模拟autosqldataset的支持逃逸功能, 需要象这样做: 
比如在sql中有这样一句:

a.name like :accountName  

那么需要写这样的一个parameter:

<Parameter dataType="" name="accountName" value="%%"/>  

在使用了FormDataset+QueryCommand来做查询操作的时候, 有时候url后面存在参数与FormDataset中字段同名的话, 会造成自动赋值的问题, 解决的办法就是将FormDataset的autoLoadData设置为false

对于datetime的处理, 有时候需要让日期加上时分秒, 则必须将绑定字段设置为datetime类型, 但是又希望必须以string的方式来取该datetime字段, 典型的情况就是QueryDataset+QueryCommand的情况, 这时需要将日期字段设置为string类型, 绑定一个DataDropDown, 并给DateDropdown的onselect事件中写如下的脚本:

editor.getRecord().setValue(editor.getField(), formatDate(selectedObject, "yyyy-MM-dd HH:mm:ss"));   

dorado 常用的更多相关文章

  1. 初学dorado

    初学dorado 1.dorado使用视图来写界面代码,超级轻松:还需要画流程,页面间的跳转应该很轻松了. 2.先新建dorado项目,再创建dorado视图 3.在Servers里双击tomacat ...

  2. dorado事件

    //----------------------------------------------------------------------------// //校验实体数据是否填写if(enti ...

  3. dorado7常用内容

    1.dataset添加数据this.get("#dsProduct").getData().insert();或者this.get("#dsProduct"). ...

  4. dorado中的视图实现类和监听器

    视图模型实现类(DefaultViewModel.java)的主要功能:  1. Dataset的初始化以及数据导入  2. 各种View组件的初始化工作 DefaultViewModel也是动态创建 ...

  5. dorado开发模式下实现动态查询

    使用dorado开发模式,我们可以实现以下开发技巧 开发技巧1.实现动态查询功能: 1. 查询按钮的onClick事件中写入: datasetEmployee.parameters().setValu ...

  6. 基于OceanStor Dorado V3存储之数据保护 Hyper 特性

    基于OceanStor Dorado V3存储之数据保护 Hyper 特性 1.1  快照 1.2  HyperCDP 1.3  HyperCopy 1.4  克隆(HyperClone) 1.5   ...

  7. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  8. 分布式锁1 Java常用技术方案

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...

  9. Visaul Studio 常用快捷键的动画演示

    从本篇文章开始,我将会陆续介绍提高 VS 开发效率的文章,欢迎大家补充~ 在进行代码开发的时候,我们往往会频繁的使用键盘.鼠标进行协作,但是切换使用两种工具会影响到我们的开发速度,如果所有的操作都可以 ...

随机推荐

  1. MFC工程名称与所包含文件名称的关系(工程名可以更改,输出的.dll.exe.lib都以最后工程名命名为准)

    创建MFC应用程序时,可以规定MFC程序的工程名称,假设初始为MFCApp,则此后该应用程序的资源文件名称,继承自CWinApp的那个类,包括.def文件,.odl文件等都会以MFCApp打头. 但是 ...

  2. Mex混合编程专题一:Mex环境搭建

    使用Matlab时间长了,难免会碰到使用mex文件的经历,不管是别人的还是自己的,就比如MatConvNet(http://www.vlfeat.org/matconvnet/)使用了混合编程的技术实 ...

  3. hdu-1025 Constructing Roads In JGShining's Kingdom(二分查找)

    题目链接: Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)     Memory Li ...

  4. BZOJ5362: [Lydsy1805月赛]quailty 算法

    BZOJ5362: [Lydsy1805月赛]quailty 算法 https://lydsy.com/JudgeOnline/problem.php?id=5362 分析: 题意即求一个最小基环树森 ...

  5. ACM学习历程—HDU4417 Super Mario(树状数组 && 离线)

    Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability re ...

  6. 一步一步学RenderMonkey

    http://blog.csdn.net/tianhai110/article/details/5668832 转载请注明出处:http://blog.csdn.net/tianhai110/ 网上一 ...

  7. java静态方法(变量)、非静态方法(变量)区别

    java静态方法.静态变量在调用时生成唯一标识,即在内存中给定一个静态位子,这样在调用时可以直接找到,而且会节省内存.但如果声明的静态方法.静态变量过多,会占用过多内存,有可能导致内存溢出. 非静态方 ...

  8. 如何恢复,迁移,添加, 删除 Voting Disks

    如何恢复,迁移,添加, 删除 Voting Disks恢复流程 在11gR2 之前,我们可以直接直接使用dd命令对voting disk进行备份.DD示例 备份votedisk盘:[root@raw1 ...

  9. bzoj 4006 管道连接 —— 斯坦纳树+状压DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4006 用斯坦纳树求出所有关键点的各种连通情况的代价,把这个作为状压(压的是集合选择情况)的初 ...

  10. 问题7:如何实现用户的历史记录功能(最多n条)

    实例:制作猜字游戏,添加历史记录功能,显示用户最近猜过的数字 解决方案:使用容量为n的队列存储历史记录 使用标准库colections中的deque,一个双端循环队列 程序退出前,可以使用pickle ...