kbmmw 与extjs 的初次结合
前面写了extjs 的安装,今天写一下kbmmw 与extjs 的结合,参照delphi 产品经理marco文章 。
由于extjs 设计时要读取服务器端的数据,所以先要做一个rest 服务器。
先要用kbmmw 建一个web 服务器,可以参照我以前写的例子。
由于要返回数据库,因此加入对应的数据库访问控件,我使用unidac 加postgresql,需要的可以在
www.hoasql.com 去下载。
我们开始写服务器端。加上必要的数据库访问控件,并保证运行正常。
进入webservice 单元,加对应的代码。
function Twebsrv.Performget(ClientIdent:TkbmMWClientIdentity; const AURL:string; const Args:array of Variant):Variant;
var
mystringstream:Tstringstream;
MimeType,s,scallback:string;
Charset,tablename:string;
qv:TkbmMWHTTPQueryValues;
dataurl,mysql,swhere:string;
I: Integer;
begin qv:=TkbmMWHTTPQueryValues.Create;
dataurl:=args[];
qv.AsString:=Args[];
if length(Args)< then
kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING,'Missing URL.'); try if args[]='/version' then
begin
result:='kbmmw 5.03';
exit;
end; if args[]='/getdata' then begin tablename:=qv.ValueByName['tname'] ; if tablename='' then
begin result:='表名不能为空!';
exit;
end; swhere:= qv.ValueByName['where']; //where 需要编码。注意注入 if swhere<>'' then
begin
if pos(';',swhere)> then
begin
result:='非法条件!';
exit;
end;
swhere:=' where '+swhere;
end; mysql:='select * from '+tablename; mysql:=mysql+swhere; s:=datatojson(tablename, mysql,'',''); scallback:=qv.ValueByName['callback'];
if scallback<>'' then
result:=scallback+'('+s+')'
else
Result:=s;
exit; end; result:=inherited Performget(ClientIdent,aurl,Args) ;
finally
qv.Free;
mystringstream.Free; end;
end;
下面是数据库转json 的代码
function Twebsrv.datatojson(tname,datasql, startp, endp: string;
inparams: tstringlist = nil): string;
var
sjosn:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
datajson: TkbmMWJSONArray;
recordjson: TkbmMWJSONObject;
starti, endi, i: integer;
idate:int64;
mydate:Tdatetime;
begin if startp = '' then
starti :=
else
starti := strtoint(startp); alljson := TkbmMWJSONObject.Create;// ( (stobject); sjosn:=TkbmMWJSONStreamer.Create;
try
with cx do
begin
sql.clear;
sql.add(datasql); if inparams <> nil then
begin
for i := to inparams.Count - do
begin
if inparams.Names[i] <> '' then
begin
cx.Parambyname[inparams.Names[i]].AsString :=
inparams.ValueFromIndex[i];
end;
end;
end;
try
Open;
except
result:='数据库打开错误!2';
exit; end;
datajson :=TkbmMWJSONArray.Create;//(starray);
while not eof do
begin
recordjson :=TkbmMWJSONObject.Create; for i := to fields.Count - do
begin
case fields[i].DataType of
ftDate, ftTime, ftDateTime:
begin
mydate:=fields[i].AsDateTime; recordjson.AsString[fields[i].FieldName]:=formatdatetime('yyyy-mm-dd hh:nn:ss',mydate);
end else
recordjson .AsString[fields[i].FieldName ]:= fields[i].AsString; end;
end;
datajson.add(recordjson); next;
end; alljson.AsArray[tname] := datajson;
end;
result := sjosn.SaveToUTF16String(alljson);
finally
sjosn.Free;
alljson.Free;
end; end;
保存并运行。可以在浏览器里面输入http://localhost/getdata?tname=emp 访问服务器。
firefox 会返回这样
原始数据
好了,服务器做好,让它正常运行。
我们下载打开extjs 设计器
开启一个空白新工程
点击加号,选择一个新模型。
再新建一个Stores.选择JSONStore.
再右面属性栏,设置它的model.并选择autoload。
把MyajaxProxy 转换成MyJSONPProxy
设置myJSONPProxy 的URL.
ok, 可以右键选择datastore, loaddata, 然后就会出现一下眼睛图标。点击就可以看见服务器返回的数据了。
说明服务器工作正常。
现在拖一个gridpanel 到设计器上。
系统自动生成几个列。先不要管它,选择它的datastore 为myjsonstore.
右键选择,开始gird builder.
加入对应的字段,就可以生成gird了
ok, 保存工程文件。
在主文件菜单选择发布 命令(或者按F5)。
选择kbmmw 的web 服务器的文件目录并发布文件。
发布完成。
回到浏览器,输入http://localhost/index.html。
可以正常显示数据了。
当然了,还没有添加增、删、改的功能,这些对应服务器上也要做对应的处理,今天就不做了。
等以后有机会再做。
kbmmw 与extjs 的初次结合的更多相关文章
- kbmmw 与extjs 通过JSON Base64 显示图片
delphi 官网上开始也来越多的介绍delphi与extjs 结合的例子,今天我就把官方的例子翻版一下. 官方使用C++builder 和webbroker 实现. 我使用kbmmw 来实现一下. ...
- kbmmw 的HTTPSmartService中的跨域访问
有同学在使用kbmmw 与extjs 结合的时候,涉及到了跨域访问,这个在 kbmmw 里面已经完全解决. extjs 在访问跨域的时候,首先会使用OPIONS 调用,服务端要根据浏览器请求的 he ...
- kbmmw 中简单返回 extjs 数据JSON
以前,我们通过自己写json 来返回数据表的内容.在delphi 10.2.2中,官方自带了一个FDBatchMoveJSONWriter1 来直接处理数据库内容.把结果推送到浏览器客户端. 今天我们 ...
- ExtJS 4.2 业务开发(一)主页搭建
本篇开始搭建一个ExtJS 4.2单页面应用, 这里先介绍主页的搭建,内容包括:主页结构说明.扩展功能等方面. 目录 1. 主页结构说明 2. 扩展功能 3. 在线演示 1. 主页结构说明 1.1 主 ...
- ExtJs 4.2.1 复选框数据项动态加载(更新一下)
最近在做博客项目,后台管理用的是ExtJs4.2.1版本,因为是初学所以在使用的时候也遇到不少的这样或那样的问题,也写了不少这方面的博客,今天要写的博客是关于复选框数据项动态的加载功能,以前也没用过, ...
- ExtJs 自定义Vtype验证
最近公司开发项目在用ExtJs,碰到验证的就大概的总结了一些常用的验证.自定义的验证主要有两种方式:一种是单字段的自定义验证,另一种是多字段间的验证.对于单字段的验证主要通过regex配置项指定自定义 ...
- ExtJS 4 树
Tree Panel是ExtJS中最多能的组件之一,它非常适合用于展示分层的数据.Tree Panel和Grid Panel继承自相同的基类,所以所有从Grid Panel能获得到的特性.扩展.插件等 ...
- extjs表单验证
extjs表单验证 //放在onReady的function(){}中 Ext.QuickTips.init(); //为组件提供提示信息功能,form的主要提示信息就是客户端验证的错误信息. Ext ...
- ExtJS 4.2 评分组件
上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...
随机推荐
- poj3252(组合数)
题目链接:http://poj.org/problem?id=3252 题意:给定s.e,求[s,e]之间的Round Number的个数,RN数为二进制表示中0的个数大于1的个数的数,s.e< ...
- unity3d休闲篮球类游戏《Flick Basketball 》上线项目完整源码
下载地址: https://item.taobao.com/item.htm?id=576135964241
- ES6之导入模块时的内存共享
项目结构 主页面 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> &l ...
- js数组排序实用方法集锦
前言: 据说程序员三个月就能忘记自己写的代码,所以最好是在有空的时候及时做些总结,记录下来,这样后边遇到类似问题的话,就可以直接先查看自己的博客了.写技术博客,对自己是一种总结,对别人,是一种参考. ...
- echarts故障统计多维柱状图 堆叠柱状图 柱状图Demo2
黑底:echarts链接:http://gallery.echartsjs.com/editor.html?c=xnP8JPeu4R option = { backgroundColor: 'blac ...
- EasyUI 在Tab页用button打开新Tab
标签: <a href="javascript:void(0)" class="easyui-linkbutton" id="ipConfig& ...
- php使用sftp上传文件
搞这个SFTP文件传输搞了一整天真是醉了,从sftp安装,到php的ssh2扩展安装,最后到php应用ssh2来上传文件:最后就没有最后了 Failure creating remote file: ...
- 用Python监听鼠标和键盘事件
PyHook是一个基于Python的“钩子”库,主要用于监听当前电脑上鼠标和键盘的事件.这个库依赖于另一个Python库PyWin32,如同名字所显示的,PyWin32只能运行在Windows平台,所 ...
- mysql乐观锁总结和实践(一)
最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下: 悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持 ...
- python 使用内置方法读取注册表
#coding:utf-8 import _winreg key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"键值") #获取该键的 ...