客户管理页面中,可以对所有客户进行展示和编辑。
实际业务中,页面可能要求仅展示重要客户或者我负责的客户等。
那么应该怎么做呢?还记得我们用过的数据引用公式 ds.xx
吗?
ds
:页面定义的 数据 ,这里表示所有客户记录的数据集。
ds.手机
: 客户数据集 ds 的 手机字段。
ds.联系人
: 客户数据集 ds 的 联系人字段。
所以如果我们想让页面仅按照我们的要求进行筛选的话,那么就想办法让 ds 不代表所有数据,而是按照业务要求筛选后的数据
1.页面数据的定义
我们用 简单列表 模板生成一个客户管理页面,然后打开 页面视图,左下角就是 页面数据 面板。
可以看到这个模板生成的管理页面定义了两个 页面数据 : ds 和 me ,我们点击 ds 右边的 齿轮 进入数据的配置窗口。
名称(ds):数据的名称。公式里通过名称使用这个数据的信息。
-
类型(数据集):数据的类型。数据的类型包括:
- 记录:数据表中的一条记录,一般用于编辑或者详情页面。例如编辑页面中的
it
就是客户的记录,表示客户表的一个客户。 - 数据集:数据表中的多条记录组成的集合,一般用于列表页面。例如本页面中
ds
就是客户的数据集,表示客户表的多个客户。 - 整数,数值,字符串(文本),是非项(是还是否)等普通类型。
- 数组:例如[1,3,5]就是由3个数组成的数组。
- 记录:数据表中的一条记录,一般用于编辑或者详情页面。例如编辑页面中的
泛型(客户):数据的类型参数,类型是 记录 或者 数据集 时必须配置的,因为泛型表示究竟是哪个数据表的数据集/记录。例如这里就表示 ds 是客户的数据集。
简单介绍剩下2个参数:用途 :表示数据是用于后端还是前端浏览器中,一般都是后端。保存 :表示这条数据在页面上修改后是否回存数据。
试试看
- 修改 ds 的名称,改为 ds2 ,看看会发生什么。(答案:页面上的公式
ds.xx
变成了ds2.xx
。query.ds.xx
变成了query.ds2.xx
)- 修改 ds 的泛型,改为 用户 ,看看会发生什么,你能把页面上的错误都改掉吗?
2.页面数据的公式
初始化函数(公式)是页面数据最重要的公式。页面数据就是执行这个公式,得到的结果。
在数据集的初始化函数中的参数:
- 筛选条件:表示数据表中筛选的条件。
需要配置一个返回是非项(是还是否,真还是假,true or false)的公式。数据集将由数据表中筛选条件最后判断为true(真)的记录组成。
筛选条件为空或者为true表示不筛选,获得所有数据。- 排序参数:表示数据集按照什么字段排序。
["id"]
: 按照id顺序["-id"]
: 按照id逆序["重要度","性别"]
:先按照字典项重要度顺序(一般,重要,非常重要),然后按照性别顺序(男,女)。["-重要度","性别","-提交时间"]
:先按照字典项重要度逆序(非常重要,重要,一般),然后按照性别(男,女),最后按照提交时间逆序(提交时间晚的在前面)
3.系统数据 me
me是系统定义的页面数据,表示用户表中,当前登录的用户的记录。
可以看到筛选条件是去用户表查找 id 等于 参数me_id 的记录。
@me_id是一个系统参数,表示当前登录用户的id。
在格子中写一些me的公式,运行试试:
-
me.id
:当前用户的id。 -
me.名称
:当前用户的名称。 -
me.部门
:当前用户的部门(部门的id)。 -
me.部门.名称
:当前用户所在的部门的名称。 -
me.部门.主管
:当前用户所在的部门的主管(用户的id)。 -
me.部门.主管.名称
:当前用户所在的部门主管的名称。
4.根据需求给 ds 配置筛选条件。
-
需求:筛选出非常重要的客户。
筛选条件栏配置为table.客户.重要度==Dict.重要度.非常重要
。表示在客户表中,筛选出 字段 **重要度 为 非常重要 的客户table.客户.重要度
:数据表 客户 的重要度 字段。(和ds.重要度
的不同 )
==
:判断等号左右两边是否相等,注意是“==” 而不是 “=”,这点 和Excel不同。
Dict.重要度.非常重要
:字典项 重要度 非常重要的值。 按照字典项 重要度的 定义,“非常重要”是 3。为什么不直接写3?可以通过公式提示来避免记忆出错
将来如果修改或删除了该项,平台会自动提示。 需求:筛选出我的客户。
筛选条件栏配置为table.客户.联系人==me.id
。表示在客户表中,筛选出 字段 联系人 等于 当前用户的 id。需求:筛选出不是我的客户。
筛选条件栏配置为table.客户.联系人!=me.id
。表示在客户表中,筛选出 字段 联系人 不等于 当前用户的 id。
需求:筛选出我所在的部门的客户。
筛选条件栏配置为table.客户.联系人.部门==me.部门
。需求:筛选出我管理的部门的客户。
筛选条件栏配置为table.客户.联系人.部门==me.部门
。-
需求:筛选出提交时间为今天的客户。
筛选条件栏配置为table.客户.提交时间 > = Date.today() && table.客户.提交时间 < Date.today().addDay(1)
。表示提交时间大于等于当前日期(0点),小于明天(0点)。Date.today()
: 当前日期(0点)。
addDay(1)
: 日期往后一天。 -
需求:筛选出1个小时内提交的非常重要的客户。
筛选条件栏配置为table.客户.提交时间 >= Date.now().addHoure(-1) && table.客户.重要度==Dict.重要度.非常重要
。表示提交时间大于等于一个小时前,并且重要度是非常重要的客户。Date.now()
: 当前时间(精确到毫秒)。
addHour(-1)
: 时间往前一个小时。
&&
: and 关系,只有当符号左右都为true(真)的时候,才返回true(真)。也就是这两个条件都要满足。
5.看看界面配置背后是什么。
在初始化配置页面的右方,有一个高级按钮,我们点击可以看到,原来我们配置的是一个公式。table.客户.find(table.客户.联系人==me.id,["-id")]
。这个公式按照我们配置的筛选条件,产生客户数据集。
table.客户
:表示在客户表查询。
table.客户.联系人==me.id
是我们刚才配置的筛选条件。
["-id"]
是我们配置的排序条件。
所以也直接写公式。特别是一些复杂的,例如使用 if(条件语句)的,就只能直接写公式的。
这一章我们用公式实现数据筛选,初步领略到公式的强大和便捷。想要更好的开发,是离不开公式的,下一章我们将会介绍各种常见公式。
- 展示相关表的字段,或者根据相关表的字段查询。例如根据联系人所在部门进行查询。
附录:页面数据的其他两个属性的作用(后面会详解)
使用时机(后端):该数据是在后端生成页面的时候用,还是在前端浏览器里使用,除非特殊介绍,一律默认为“后端”。
保存(是):表示页面上展示的数据修改后,是否还要保存回数据库。是表示会回存。(这里因为页面不可编辑,并且没有保存按钮,所以没有实际效果,但编辑页面里我们可以看到 页面数据
it
是可以回存的)