ds.select(`ds.id`,`ds.性别==Dict.性别.男`,["部门","-id"],2,10)
:获取性别为男的用户id,先按部门排序,部门相同的按id反向排序,从第3条开始,获取10条数据
ifv(it.性别==null || it.性别=="",@xingbie,it.性别)
:是如果用户记录it的性别字段是空的,那么返回参数xingbie的值,否则返回 性别字段的值
http://localhost/misshop/index.jsp?query.ds.%E6%80%A7%E5%88%AB=1#cGFnZS_ns7vnu5_nrqHnkIYv55So5oi3566h55CG
: 在原网址中加入?query.ds.性别=1,查看都是男性的用户。或者在链接的控件属性中,普通参数项,加上参数名query.ds.性别,参数值Dict.性别.男
?query.ds.性别=1&query.ds.部门.名称=业务部
:两个参数的情况,性别是男,并且属于业务部。
query.ds.id.ngt=3
或者 query.ds.id.小于=3
:id大于等于3(不大于)
query.ds.id.lt=3
或者 query.ds.id.小于=3
:id小于3
query.ds.名称.like=张三
:名称 包含 张三
query.ds.id.in=[1,3,4]
:id 在某数组中 [1,3,4]
query.ds.部门.名称.like=业务
:部门的名称包含 业务
query.ds.部门.部长.名称=admin
:部门的部长的名称是admin
query.ds.部门.部长.名称.like=张
:部门的部长的名称包含 张
simpleauth=false
: 项目文件夹下的project.mis文件中,找到simpleauth这一行,把simpleauth=true
改为simpleauth=false
,改完后重启设计器,打开按钮级权限。
=query.ds.部门.主管
: 选择一个用户,列出该用户管理的部门的用户。
=query.ds.OM_主管^部门
: 按照选择的部门,去找这个部门的主管
=ds.OM_主管^部门.名称
: 列表项里的单元格中写,表示这个用户管理的部门的名称,一对多
单元格值为Dict.性别.男
(无等号),保存至 属性里为=query.ds.性别
: 查询区的这个格子初始有值是Dict.性别.男,这样初期进去就仅显示男性用户。
Web.Query.innerQuery(@mis_queries)
: 立即查询,控件属性高级的值改变事件加这一句
=ifv(dynamic(C2)==1,Date.today().addDay(-1*dynamic(B2)),C2==2,Date.today().addMonth(-1*dynamic(B2)), Date.today().addYear(-1*dynamic(B2)) )
,保存至 为 query.ds.生日.大于等于 : 如果C2==1,那么当前日期减去B2的值的周,如果C2==2,当前日期减去B2的值的月,否则当前日期减去B2的值的年。通过dynamic,当C2和B2的值变动时,G2的值计算为开始日期,通过生日的大于等于关系进行查询。显示这一段周期内生日的人。
= dynamic(A2)+B2
:A2是输入框,就可以实现A2变化,C2的值跟着变化的效果。
ifv(dynamic(D4)==Dict.性别.男,-16777000,-16720356)
:B4的前景色属性公式中录入动态颜色公式,如果D4值为 字典项男性(也就是1),那么是蓝色,否则是绿色)。页面属性要为可编辑,可编辑会影响生成什么样的控件,不影响保存!
dynamic(it.部门)==1
: 可视属性里填入,部门是 业务部(id为1)的时候,相片和描述可见,其他时候不可见。
ifv(dynamic(it.性别)==Dict.性别.男,Validate.长度校验(value(),5,10),Validate.长度校验(value(),10,20))
: 如果是男性,长度允许5到10,否则长度允许10到20。value()是当前单元格的动态值,跟dynamic一样
save.onlyInsert(it)
: 表示it 在新增的时候才保存,可以在任意一个格子的保存至表达式里写
save.onlyUpdate
: 如果是更新,执行。如果是插入,不执行。
save.abandon(it)
: 表示 it 记录符合条件则不保存。把条件的公式写在一个格子里,保存至 属性里写这个函数。如果这个格子计算结果是 true,那么保存会放弃执行。
it.商品:it.商品 | it_库存.商品。it.仓库:it.仓库 | it_库存.仓库
: 同步保存,联合确定记录,这里没有id,由联合主键的字段商品和仓库共同决定。有id时写一个id就够了。
it.入库数量:it.入库数量 | save.dbIncrement(it_库存.数量)
: 表示同时把这个数值作为增量存储到库存表的对应记录的数量里。
table.商品.findOne(table.商品.id==dynamic(It.商品)).单价 * dynamic(it.数量)
:根据动态商品查找单价,再乘以 动态的 数量,可以写到保存至的 总价。
单元格的值为 =me.id
,保存至 的公式填入 it.联系人
: 表示客户编辑页面中, 联系人 的初值应该是当前用户。
Mis.Formater.toJson(bumen)
: 生成Json数据。提供数据给其他地方使用的时候,在页面配置中把页面类型设置为 数据 ,访问这个页面的时候,得到会是JSON格式的页面数据。
DataSet.createByCells(Cl.A1,Cl.C2)
:用页面单元格构造数据集,第一行是列头,其他行是数据,支持扩展行列,第一个参数是起始格,第二个参数是终止格
http://localhost/misshop/cGFnZS_ns7vnu5_nrqHnkIYvYWE=.raq?mis_request_datas=juese,ds
: 前端请求的URL里添加参数mis_request_datas=juese,ds
,将仅返回juese和ds这两个数据。
把 ds.xx 改为 table.客户.xx : 查询的时候需要,就不再表示页面数据的关联列,而是数据表的关联列
=table.用户.sum(table.用户.id)
: 不分页求和
=ds.sum(ds.id)
: 分页的求和,如当ds记录条数超过20条,分成多页显示,则只对当前页的数据求和
table.客户.find(table.客户.联系人.手机号=="15010002000")
:查找联系人手机号是15010002000的客户。
table.客户.find(table.客户.联系人.部门==me.部门)
:查找联系人和当前用户相同部门的客户。
table.客户.find(table.客户.联系人.部门.主管==me.id)
:查找当前用户负责的部门的客户。
table.客户.find(table.客户.联系人.部门.主管==me.id || table.客户.联系人==me.id)
:查找当前用户负责的部门的客户,以及当前用户的客户。
ds.联系人.手机号
: 客户联系人的手机号。
ds.联系人.角色
: 客户联系人的角色。
ds.联系人.部门
:客户联系人所在的部门 (这里是部门id,但可能显示为部门名称)
ds.联系人.部门.名称
:客户联系人所在的部门的名称。
ds.联系人.部门.主管
:客户联系人所在的部门的主管(主管id)。
ds.联系人.部门.主管.名称
:客户联系人所在的部门的主管。
ds.联系人.部门.主管.手机号
:客户联系人所在的部门的主管的手机号。
query.ds.名称
:输入文本,查找名称包含输入文本的客户 。
query.ds.名称.eq
:输入文本,按照名称完全相等查询
query.ds.性别
:选择一个性别,查找性别为选中项的客户。
query.ds.联系人
:选择一个用户,查找联系人是该用户的客户。
query.ds.生日
:选择一个日期,查找生日在该天的客户。
query.ds.生日.大于等于
:选择一个日期,查找生日大于等于该天的客户
query.ds.生日.小于
:选择一个日期,查找生日小于该天的客户
query.ds.联系人.名称
: 按照名称查询,查找联系人名称包含输入文本的客户。
query.ds.联系人.名称.eq
: 按照名称查询,查找联系人名称和输入文本完全相同的客户。
query.ds.联系人.部门
: 选择一个部门,查找联系人的部门为选择的部门的客户。
query.ds.联系人.部门.名称
: 输入部门名称,查找联系人的部门名称包含输入文本的客户。
query.ds.联系人.部门.主管
: 选择一个用户,查找联系人的部门主管是选中用户的客户。
=ds.联系人.OM_主管^部门.名称
:客户的联系人管理的所有部门的名称的列表 [业务部,财务部] 。多对一关联,直接用小圆点接,这是一对多关联
ifv(ds.重要度==Dict.重要度.非常重要,"btn-outline-warning","btn-secondary")
: 动态控制显示样式,样式名把鼠标浮在“默认样式”上的黄色框中有
ifv(ds.性别==Dict.性别.男,"fa fa-chevron-up ","fa fa-chevron-down ")
:如果客户是男性,那么客户名显示 使用 向上 的图标,如果是女性,那么客户名 使用 向下 的图标
=ds.group(ds.学生.班级.名称)
:将数据按照班级分组
=avg(E3)
:统计E3格扩展后所有格的平均值
=ds.count(ds.学历==A7)
:统计学历等于A7格中值的数量
=table.简历信息.max(table.简历信息.期望薪水下限)
:求期望薪水下限的最大值
=table.简历信息.sum(table.简历信息.期望薪水下限,table.简历信息.求职人.学历=="本科"):求期望薪水本科级别薪水的和
=table.简历信息.count(table.简历信息.求职人.学历=="本科")`:求本科求职人的数量
常见的函数空间:
Date:日期函数
Math:数学函数
Str:文本函数(字符串函数)
List:数组函数
Map:键值对函数
=A1.addYear(1).addMonth(1).addDay(1).addHour(1).addMinute(1).addSecond(1)
: A1的日期往后推1年,1月,1日,1时,1分,1秒之后的日期。
=Date.now().setHour(0).setMinute(0).setSencond(0).setMilliSecond(0)
: 当前时间的时分秒毫秒都设置为0,也是Date.today()
=Date.now().year
:当前年数
=Date.now().hour
:当前小时数
=Date.now().second
:当前秒数
Date.today()
: 返回表示今天零点的日期对象。
Date.now()
: 返回表示当前时间的日期对象。
Date.parseDate("2014-10-13")
: 返回表示2014年10月13日的日期对象。
Date.today().addDay(1)
: 返回昨天的日期对象。
Date.today().setDay(1).addHour(1)
: 返回当月1号,1点的日期对象。
table.客户.提交时间 > = Date.today() && table.客户.提交时间 < Date.today().addDay(1)
: 表示提交时间大于等于当前日期(0点),小于明天(0点)。
value()>=dynamic(it.单价)*dynamic(it.数量)
:订单的校验类型里直接写公式
Validate.validRegex(value(),"/^1[3-578]\d{9}$/")
: 手机号的正则校验
=table.学生.saveRecord({"id":ds.id,"是否通过":true});null
:将学生表的是否通过字段设置为true
,并且该单元格不返回任何值。
=ifv(it.学历证书编号==null&&(it毕业状态.名称=="毕业"||it毕业状态.名称=="结业"||it毕业状态.名称=="双学位"),it宏.学历编码前缀+str(Sequence.increment(it宏.学历编码前缀),"#000000"),it.学历证书编号)
:根据状态自动生成流水证书编号
注意,ifv函数可以对多个表达式进行判断,如ifv(A1,x1,A2,x2,A3,x3,x4),表示如果条件为A1则返回x1,其余的如果条件为A2则返回x2,其余的如果条件为A3则返回x3,都不满足则返回x4。