- 变量集的概念:
如果你有编程基础的话,就可以认为变量集和编程语言里的变量是类似的概念。变量集是MisShop页面的组成部分,代表了页面中的可变数据。一个页面可以拥有多个变量集。变量集既是页面的数据操控对象,又是公式、函数及表达式的合法参数。变量集最核心的属性是名字、类型和值。页面通过变量集的名字引用变量集。 - 变量集的作用:
- 向数据库取数据,以供页面使用。
- 与控件配合动态保存用户操作结果
- 获取变量集自身的数据,调用变量集自带的功能函数
- 向公式、函数及表达式传递正确的参数类型和参数值。
- 变量集的类型
- 数据集
- 记录
- 数组
- 键值对
- 整数
- 数值
- 日期
数据集和数据库表是对应关系,一般可以认为数据集是包含了多条数据库表记录的集合。通过数据集可以向数据库表取数据,以供页面使用。
记录和数据库表的一条记录是对应关系。通过记录变量集可以向数据库表获取或者保存一条记录。
数组变量集的值代表一个一维的数组。
键值对变量集和编程语言中的Map或者HashMap或者HashTable是对应关系,也可以认为是一个数组,这个数组的每个元素是一个键值对。
整数变量集的值代表一个整数,这个和传统编程语言中的int声明的变量类似。同理,数值变量集的值代表一个小数,日期变量集的值代表一个日期。
-
添加变量集
当我们在Misshop设计器中打开一个页面后,界面左侧有三个标签页,其中的“数据”标签页就代表了本页面的数据资源集合,其中包括了页面参数,当然也包括了页面的变量集。点击该标签页面里左上方的“增加”按钮即可为页面添加变量集。
变量集需要初始化,如果不处理初始化标签,那么这个变量集的值就是null。不同类型的变量集有不同的初始化方法。
-
修改或删除变量集
点击“数据”标签页里每个变量集名字后面的配置按钮,即可启动变量集编辑页面。其中的删除按钮可以删除该变量集。
- 使用变量集
- 数据集变量集的用法:请参考https://www.jianshu.com/p/32cd546e4257
- 记录变量集的用法
记录变量集用的最多的场景就是新增和编辑界面。这种界面通常由模板自动生成,这里简介一下用法:
由于记录对应数据库表中的某一条数据,那么它是需要给定一个查询条件才能确定是哪条数据,这个条件就是在初始化标签里的条件参数给出的:举例如下:
在这个例子中,it_id是这个页面的参数,通过@it_id就取到了这个参数的值。那么当用户访问这个页面时,这个"it用户"记录变量集会自动地初始化为用户表中id为指定参数的那条记录。
作为平台的惯用法,记录的名字建议以it开头,如上图所示。记录的泛型就是它对应的数据库表,在设计器页面的单元格里输入=it用户., 后面就会出来用户表的所有字段名,选择一个字段名如名称后,单元格值变为=it用户.名称, 那么这个单元格就和用户表记录的“名称”字段产生了绑定关系,即可以显示记录对应记录的字段值,也可以将这个单元格对应控件里的值保存到该字段。对于泛型对应表的关联表,比如要显示用户的对应角色的名称,我们知道用户表有一个字段“角色”关联到了角色表,那么就可以输入=it.用户.角色.名称来获取关联表关联记录的名称信息。
假设有这样一个需求,每产生一个订单,就需要同时产生和订单关联的一个各种成本和收益的财务数据行(考虑资金的敏感问题,我们希望订单相关的资金字段独立成表仅供财务角色修改查看)。这时候数据库表分为订单表和订单资金表。具体实现的时候可以在订单的录入页面,加入it订单和it订单资金两个记录变量集,然后将it订单的id字段单元格同时保存至it订单.id和it订单资金.订单即可。 - 数组变量集的用法
在新建变量集的界面里,有一个用途选项,对于数据集和记录而言,绝大多数场景都是选择"back", 但是对于其他类型,通常都是要选择"front"。数组变量集通常也是用途要选为"front"。我们称之为前端变量集,前端变量集可以保存前端控件的值的变化。下面以系统自带的用户管理页面的批量删除为例阐述一下数组变量集的使用。
如图所示,用户管理页面的数据标签页里有一个叫checked的数组变量集,这个变量集的作用呢就是用户每次勾选用户列表里的复选框,就往这个checked数组里保存一个对应用户的id,取消勾选则反之。这一点是由复选框控件的内置逻辑来保证的,我们查看一下“B7”单元格的属性,它是一个复选框,里面配置了关联数组变量集和关联数组变量集里面的元素的值(A7)
当我们点击用户管理上方的批量删除按钮时,这个按钮为什么知道要去删除哪些对应用户id的用户呢?是因为批量删除按钮配置了checked数组变量集,它只要读取这个变量集里面的用户id就可以了。配置如下图:
在这个例子中,数组变量集checked记录了用户操作控件的变化,而记录的结果被另外一个控件所引用。-
数组变量集的初始化:
数组变量集的初始化通常有两种,一种是数组初始化为一个空数组,这时候要用List.create()函数,如下图所示:
另一种是从其他类型的变量转化,这种情况下初始化后数组里会有多个元素。
-
下面再举一个例子,做一个平均值计算,这个样本里一开始有5个初始数据
页面内容如下:
B3是个数字输入框,C3是个按钮,每次点击按钮,我们把B3的值追加到样本数组变量集中,页面重新计算平均值。
所以在按钮的高级配置中,点击事件处理如图:
这样配置完就可以了。
在这个例子中,数组变量集listNumbers是按钮处理函数里的脚本的主体,也是avg函数的参数。
+ 键值对变量集的用法
键值对和数组很像,只是键值对的每一项都是两个值,可以很方便地根据键得到值。
键值对的初始化:
初始化一个空的Map:
从其他数据来源初始化:
下面也举一个例子,这个例子中的键值对变量集叫mapFruitPrices,因为演示效果呢需要它是一个后端变量集,也就是它的用途需要设为back。
页面内容如下图所示
B2是一个数字输入框,A2的背景色设置一个公式ifv(dynamic(B2)>35,-52429,-1),如下图所示:
这样我们就可以看到当数字输入框的数字大于35的时候,它的标签就变成了红色。
+ 整数变量集的用法
整数变量集的值就是一个整数,它的初始值可以给一个整数常量,比如0.
整数变量集也举一个例子,在这个例子中,比如说酒店的指标项,可能有免费WiFi,免费矿泉水、接送服务、洗漱用品提供、翻译服务,具体到数据库表中,指标太多太多,为了节省字段,不是每个指标都建立字段,而是整体用一个整数字段指标集合来代表这些指标的任意组合集合。
页面如下:
从A2到A6都是用复选框来表达这个指标项,当用户选择或取消选择时,我们需要改变这个整数变量集index,这就需要配置复选框控件的高级模式中的值改变:如下图所示:
上图是A2格的,再给一个A3格的
其他的都是依次类推,只是index加减的数字是4,8,16,...
结果如下:
后续只要把A7保存至it酒店.指标集合就可以达成目标了。
+ 数值变量集
(略)
+ 日期变量集
初始化如下:
- 单元格变量集
在制作一些统计报表的时候,常常需要在扩展行中临时产生变量,这种变量个数不固定,初始化参数也不固定,这种情况下就会用到单元格变量集。这种临时产生的变量集不会出现在数据标签页里面。
下面给一个例子加以说明:
最终效果如下:
在部门数据集ds部门的扩展过程中,我们对于每个部门临时生成一个和部门相对应的用户数据集变量集,而这个数据集的参数需要用到当前的部门,页面如下图所示:
注意C2单元格的值:=table.用户.find(table.用户.部门==A2), 这样一个函数调用就可以产生一个单元格数据集变量,后续对这个变量的引用都是用格名来进行的,比如D2单元格用到了C2.select(C2.id)。
如果要产生一个单元格记录数据集,可以参考如下:
=table.用户.findOne(table.用户.id==A3),这样的话这个单元格就是一个id等于A3的用户记录数据集。 - 变量集的取值函数
我们之前说过,像数据集或记录这样的复杂类型,通常都是后端变量集,初始化后就不变了;但是特殊场景下也可以做成前端变量集,可以根据情况多次“初始化”,这就会用到取值函数。
在下面这个例子中,输入用户ID,立刻显示用户名称,用户每输入一次,记录变量集it用户就重新取一次值:
页面设计如下:
其中B1是一个数字输入框,用来输入用户id
it用户是一个前端记录变量集,它没有初始化,但是拥有一个取值函数:
每次B1动态变化时,it用户都要重新取值,而B2单元格=it用户.名称则会自动更新。.
感谢您的关注,希望您似乎已经体会到了MisShop变量集的巨大用途,Enjoy It!