本文讲解docker版jxTMS的数据查询,整个系列的文章请查看:docker版jxTMS使用指南
请按前文所述先做好相关的准备工作,然后多在helloWorld界面输入各种数据后点【点我】按钮,以多创建点数据来为查询做下准备。
分页查询
首先在web文件中增加一个查询界面:
//分页查询的演示界面
web listDemoData type div;
web listDemoDataT2 bind tableTotalCount parent listDemoData type table title="分页查询演示数据列表",
width=900,pagination=true,query=search;
with listDemoDataT2 col joID head joID hide=true;
with listDemoDataT2 col demoTime head 日期 width=100;
with listDemoDataT2 col demoType head 类型 width=100;
with listDemoDataT2 col demoName head 名称 width=200;
保存web文件。
然后清空sql文件,然后在其中输入:
sql sqlListDemoData
from demoData as ta
select ta.ID as joID,ta.CreateTime as demoTime,ta.Type as demoType,ta.Name as demoName
orderBy ta.CreateTime DESC;
保存sql文件。
注:现在提供的sql文件中含有还未讲到的内容,所以sql文件必须清空后再输入sqlListDemoData,否则上传后会出错
然后在op.py文件中增加:
@biz.Demand('disp','listDemoData')
@biz.OPDescr
def op1(json):
#在快捷栏中添加一个新的快捷入口【演示->列表演示数据】
json.setShortcut('演示'.decode('utf-8'),'列表演示数据'.decode('utf-8'))
#指示listDemoData是一个数据表的查询功能,请求系统自动介入
json.setParam('dispType','list')
#指示从数据库中查询出来的结果是一个json数组
json.setParam('resultType','json')
#将上述的json数组发送到web中的哪个数据表
json.setParam('listTable','listDemoDataT2')
#为本次查询指定数据源,demo.sqlListDemoData定义在sql文件中
json.setParam('dataSource','demo.sqlListDemoData')
保存op.py文件。
然后上传web、sql、op.py这三个文件,并热机刷新并退出后重新登录。
注:由于我们在op.py文件中添加了新的快捷栏入口,所以必须重新登录才能看到刚添加的快捷栏中的入口
然后点击快捷栏【演示->列表演示数据】,就会看到一个带分页的数据列表:
我只输入了两次,而分页表每页默认是15行,所以大家看到的就只有一页。
条件查询
上面演示的数据查询用处非常有限,我们大多用到的都是带条件的查询,所以我们继续演示简单的条件演示。
首先在web文件中修改listDemoData界面:
//分页查询的演示界面
web listDemoData type div;
//增加的是listDemoDataT1
web listDemoDataT1 parent listDemoData type table title="查询条件",width=900,alone=true;
with listDemoDataT1 row 0 col c0 web n type text text='类型:',width=150;
with listDemoDataT1 row 0 col c1 web n bind joType type combobox width=150,useText=true,
values=[{'text':'类型甲'},{'text':'类型乙'}];
with listDemoDataT1 row 0 col c2 web n type text text='名称:',width=150;
with listDemoDataT1 row 0 col c3 web n bind joName type input width=150,
placeholder="请输入名称...";
with listDemoDataT1 row 1 col c0 web n type button width=80,motion=cmd,demand=reSearch,text='搜索',onlyOnce=false;
//上面是增加的部分
web listDemoDataT2 bind tableTotalCount parent listDemoData type table title="分页查询演示数据列表",
width=900,pagination=true,query=search;
with listDemoDataT2 col joID head joID hide=true;
with listDemoDataT2 col demoTime head 日期 width=100;
with listDemoDataT2 col demoType head 类型 width=100;
with listDemoDataT2 col demoName head 名称 width=200;
保存web文件。
然后在capa.py文件中增加:
def setSearchCondition(self, db, ctx):
if self.dataSource == 'demo.sqlListDemoData':
cn = self.getInputString('joType')
if utils.valid(cn):
self.sql.addContion('demoData', 'Type', jxCompare.Equal,cn)
cn = self.getInputString('joName')
if utils.valid(cn):
#Name是全文索引,要用Match算子
self.sql.addContion('demoData', 'Name', jxCompare.Match,cn)
注:注意对齐
然后保存并上传capa.py、web,并热机刷新。
然后点击快捷栏【演示->列表演示数据】,并输入条件就会看到条件查询的效果:
大家试一下,在名称栏中只输入一个字【我】会是什么情况?
很奇怪是吧?输入【我的】能查出来,而只输出【我】反而查不出来。这是因为mysql的全文搜索要求关键字必须是两个字符以上。
此外,大家有没有发现一个问题,按钮【搜索】为什么会这么长?其是定义在c0列的,为什么不与上一行中的c0列的【类型:】对齐呢?!
大家看一下listDemoDataT1表的定义,会发现其多了一个属性:alone=true。这将指示listDemoDataT1表的每一行都是各自设置列宽的,而不会各行同列对齐。也就是说,listDemoDataT1表的1行就只有一列:c1列,所以它就占了整个的表宽。
详细的讲解,请大家参考下面参考资料中的相关文章。
参考资料:
jxTMS设计思想
jxTMS编程手册
下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:
如何用jxTMS开发一个功能
下面的系列文章讲述了jxTMS的一些基本开发能力:
jxTMS的HelloWorld