在很多业务场景,同一个操作,会同时影响到多个数据表。例如在入库表增加一件商品,相应的库存表中该商品数量就会增加,在出库表中增加一件商品,相应的库存表中该商品的数量就会减少。又如公司的某个部门整体裁撤,该部门的记录从部门表中删除,则该部门所属的员工可以整体删除。在MisShop中,我们可以用联动保存、级联删除等操作实现以上功能。
联动保存
我们新建入库表,字段有名称和数量;新建库存表,字段有名称和数量。在入库表的配置页面点击联动保存,设置影响表为库存表,条件为table.库存.商品==it.商品
,表示对商品相同的记录进行更改,在影响字段第一行设置字段为商品,方式为相等,数据为it.商品
,第二行设置字段为数量,方式为增加,数据为it.入库量
,表示商品字段直接赋值,数量字段增加入库量这么多。设置完后,新增入库表的记录,保存时库存表就会同步更新。
注意第一行不可省略,如果库存表有联合主键,例如由商品名和仓库名决定的记录,则需要把商品和仓库都写上。同时条件里面也要用
与
操作同时写上,如table.库存.商品==it.商品 && table.库存.仓库==it.仓库
。
数量只能选为增量,如果是出库,可写成-it.出库量
。
级联删除
创建用户表时,添加部门字段,字段类型为引用部门表。点击字段类型,弹出选择类型对话框,选择引用时,右侧有一个级联删除,勾选后,就能实现级联删除。一旦删除该部门,则所有引用该部门的用户将删除,默认不勾选。
保存至
我们设计常用页面,例如编辑页面,单元格中数据是 =it.名称
、=it.id
等,这表示这个格会显示数据表中这条记录这个字段的数据,如果这个单元格是一个输入框,那么我们在输入框中修改以后,点击保存,修改后的值就会保存会对应数据表中对应记录的同一个字段,这都是默认设置的。
有时候我们希望输入框中的数据保存到别的数据表中,或同时保存到多个数据表中,这时候就可以使用单元格的保存至属性。我们同样以入库表和库存表的同步更新为例,之前用联动保存实现,这次用配置保存至属性的方法实现。
-
在入库单的"新增"页面上建立变量
it_库存
,泛型是库存表,类型是记录,初值可以为空,仅用来表示保存至。 -
在入库单的新增页面里,选择
=it.商品
,=it.仓库
,=it.入库数量
等单元格,双击右侧基本属性的保存至属性的公式一栏,弹出设置对话框。
=it.商品
单元格:it.商品 | it_库存.商品
(特别注意连接符是 |,不是 || )
=it.仓库
单元格:it.仓库 | it_库存.仓库
=it.入库数量
单元格:it.入库数量 | save.dbIncrement(it_库存.数量)
save.dbIncrement()
表示把这个数值作为增量存储到库存表的对应记录的数量里(对应记录一般是根据id查找的记录,如果没有id,可以由联合主键的字段商品和仓库共同决定)。这样在插入一条库存记录的同时,库存对应商品和仓库的记录的数量会增加。
更新属性
更新属性是对页面单元格对应数据表及字段的属性查找,系统不断的在浏览页面进行数据输入,而对应的信息也在不断的更新和保存,而其中的经过则可以通过更新属性进行查看。我们之前使用的保存至属性,是否按照需求设置好,在页面的更新属性就能够很好地显示。查看更新属性的过程如下。
- 点击工具条中的 翻译报表 工具条,平台会对页面所有单元格的更新属性进行收集。点击完后多出一个结果查看页面,页面部分单元格左上角带 红色三角形,表示这些单元格有更新属性。如果有区域,要点击区域,右键>在新页面打开区域,才能看到有更新属性的单元格。
- 点击带红色三角形的单元格, 右键>更新属性 ,就能看到平台收集到的更新属性。
查看更新属性最常用来检验 保存至 属性是否设置正确。
条件保存
有时候,不希望保存页面值的更改或者满足一定条件才保存,例如有个复选框,勾选了才保存页面数据。可以使用条件保存功能。
save.abandon(it)
: 表示 it 记录符合条件则不保存。把条件的公式写在一个格子里,公式结果是true或false,格子的 保存至
属性里写这个函数。或者更新属性中添加Space_ds_save或Space_it_save的更新,具体哪个看更新是ds的还是it的,字段名是misdb_abandon,更新值为=C2(例),设置完后再翻译,这个更新会和其他ds或it的更新合并到一起。如果这个格子计算结果是 true,那么保存会放弃执行。
同样,有时需要设置数据库只接受新增数据,不接受修改数据,或相反,则可以用下面两个函数,设置方式与条件保存一致。
save.onlyInsert(it)
: 表示it 在新增的时候才保存,可以在任意一个格子的保存至表达式里写。
save.onlyUpdate
: 如果是更新,执行。如果是插入,不执行。
后台保存
有的系统,访问量特别大,例如好几个人同时新增数据,那么自动设置的id怎么计算,如果在前台计算,几个人设置的重复了,就会出错。或者,我们需要在保存时记录当前时间,如果当前时间在前端计算,则每个人的电脑时间有快有慢,标准不一致,不能体现出记录的早晚。这种情况可以用serverCalc函数实现,serverCalc表示在页面不计算,保存时在后台,也就是服务器端计算。
例如可以在更新属性里这样设置,表示在后台计算这些数据,然后更新到数据表。
字段名:名称,更新值:=serverCalc(me.部门.名称)
字段名:登记时间,更新值:=serverCalc(Date.now())
字段名:序号,更新值:=serverCalc(Sequence.increment(“用户序号”))
以上设置也可以直接在该单元格的保存至属性里,填写后边的公式。
最常见的当我们新增一条数据时,新增数据的对话框中显示一个id,但那个id不一定是最终存放在数据库中的id,数据库存放的是在点击保存时在后端用Sequence.increment(“用户序号”)函数计算的id值。
网友评论