有些数据表使用数据库的自增列作为主键,这种表如何定义为概念呢?
Wex5概念的主键是必须有默认值的,不能空着,等到保存到数据表里时,由数据库计算出新的主键值,因此不能使用数据库的自增列的能力了。
取而代之,使用x5提供的nextSeq函数作为概念的主键的默认值,在新增记录时,计算出新的主键值
概念的定义如下图,在主键默认值中使用nextSeq函数,nextSeq函数的参数可以使用概念名
在映射设置中将主键的数据类型改为Integer
这样设置之后,就可以使用Integer的字段作为主键了。
上面的方法,有一个缺点,就是在新增记录时获取流水号,如果不保存记录,会导致数据表中的主键值不连续。
如果没有必须连续的要求,这样就可以。
如果要求必须连续,参考 新增数据时,数据库中产生连续不间断的序号
http://bbs.justep.com/forum.php?mod=viewthread&tid=50156
帖子中使用String类型的值作为序号,使用了方法 BizUtils.createNextSequenceString(“CDRS”+date,”0000”);
我们这里要使用Integer类型的值作为序号,因此使用 BizUtils.getNextSequence(key); 方法,其中key不能和主键默认值里面的key一样
代码如下
public static void buyProcessBeforeSaveER_CGSQZBAction() { //获得table参数 Table table = (Table)ContextHelper.getActionContext().getParameter("table"); //获得所有新增的行 Iterator<Row> rows = table.iterator(com.justep.system.data.ModifyState.NEW ); while (rows.hasNext()){ Row row = rows.next(); //产生新的序号,给主键赋值 row.setValue("ER_CGSQZB",BizUtils.getNextSequence("ER_CGSQZB_real")); } }
当然这样使用会造成界面上的主键值和刚存入数据库的主键值不同,如果不关闭页面,就立刻修改并且保存,会因为在数据表中找不到界面上的主键值而无法更新数据表,所以如果这样使用,必须在保存(saveData)之后执行刷新数据(refreshData)。
本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5!
阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443
评一波