首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

JCFXBL平台客户端XML数据的储存与查询

2012-09-17 
JCFXBL平台客户端XML数据的存储与查询JCFXBL平台客户端XML数据的存储与查询 程序调试:王强、杨鹏文档整理:

JCFXBL平台客户端XML数据的存储与查询

JCFXBL平台客户端XML数据的存储与查询

 

程序调试:王强、杨鹏

文档整理:杨鹏

 

本系列文章由ex_net(张建波)编写,转载请注明出处。

http://blog.csdn.net/ex_net/article/details/7837517

作者:张建波    邮箱: 281451020@qq.com  电话:13577062679  欢迎来电交流!

 

 

一、前提条件

1、  控件命名规范

在使用SQL XML字段存储查询功能时,需要规范要传入XML控件id,

例如:

项目编号通常我们定义它的id为”txtXMBH”,但是在本功能中,要将id设置为”Fx_XML_TXT_XMBH”。

“Fx_XML_”为本功能标准的空间前缀名。

“TXT”为控件类型。下拉框、单选框为”CMB”,多选框为”CHK”。

“XMBH”即为字段名。

2、  数据库表中字段的属性

在数据库的表中,你需要一个字段,名称任意,但是类型一定要是XML。

3、  调用相关函数

当控件命名完成后,在相关的js中执行函数getDomXmlData()并传入界面的document属性,由于函数是放在总的js文件夹下的,因此在页面中要执行parent. getDomXmlData(document)函数既可以完成XML文件的制作(详细看示例)。

4、  查询SQL中XML字段中对应的值

当我们从数据库中查询出对应的XML字段时,就可以调用setXmlValue()函数来实现对对应的控件进行赋值。注意,要传入一个window来获取界面中的控件(详细看示例)。

 

 

二、示例

(一)保存信息到XML字段

1、  制作如图所示界面

JCFXBL平台客户端XML数据的储存与查询

2、 将准备放入XML字段的控件id进行规范化命名

项目名称:Fx_XML_TXT_XMMC

负责人:Fx_XML_TXT_FZR

负责人性别:Fx_XML_CMB_XB

年龄:Fx_XML_TXT_NL

好人:Fx_XML_CMB_HR

坏人:Fx_XML_CMB_HR1

香蕉:Fx_XML_CHK_XJ

西瓜:Fx_XML_CHK_XG

 

3、建表

在数据库中建一张新表,表名为”T_TEST_XML”

JCFXBL平台客户端XML数据的储存与查询

 

4、新建存储过程、

新建一个存储过程,名为”ACT_TEST_XML_ADD”

  

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[ACT_TEST_XML_ADD](@XMBH nvarchar(50),@QT xml,@return_value  int output,    @return_msg  nvarchar(50) output,    @result nvarchar(100) output)ASBEGINinsert into T_TEST_XML(XMBH,QT)values(@XMBH,@QT)set @return_value=1    set @return_msg='保存成功!'    set @result=''END

 

5、客户端代码(JavaScript)

function Save(xml){//获取传入的XML  var vXMBH=Ext.getCmp('txtXMBH').getValue();    Ext.Msg.wait('正在执行操作...','Loading...');    Ext.Ajax.request({    url:"Execute.ashx?act=ACT_TEST_XML_ADD?ms=4&formId=F0201",          success: function(res,opts){         var obj = Ext.util.JSON.decode(res.responseText);         Ext.MessageBox.hide();       if(obj.success=='success'){       if(obj.return_value==1)            {            //业务层操作正常,数据库也操作正常            Ext.Msg.alert('提示','保存成功');            }          else          {          //数据库操作有异常          Ext.MessageBox.show({  title: '警告',  msg: '数据库操作异常!原因是:'+obj.return_msg,  buttons: Ext.MessageBox.OK,  icon: Ext.MessageBox.WARNING});          }       }       else       {       //Ext --- BI 验重错误       Ext.MessageBox.show({       title: '错误',  msg: obj.return_msg,  buttons: Ext.MessageBox.OK,  icon: Ext.MessageBox.ERROR });       }     },    failure: function(res,opts){    Ext.MessageBox.show({    title: '错误',  msg: '服务器连接失败!',  buttons: Ext.MessageBox.OK,  icon: Ext.MessageBox.ERROR  });     },      headers: {'my-header': 'foo'},      params: {                sys_username : 'admin',    //不要修改                sys_password : '123456',   //不要修改                XMBH: vXMBH,                QT: xml    }   });  }


 

输入相关信息,并保存后字段会保存成XML,如图:

JCFXBL平台客户端XML数据的储存与查询

 

存入表中后该行数据为:

JCFXBL平台客户端XML数据的储存与查询

 

XML字段即为:

 

<data>  <filed id="Fx_XML_TXT_XMMC">    <value>测试项目</value>  </filed>  <filed id="Fx_XML_TXT_FZR">    <value>张三</value>  </filed>  <filed id="Fx_XML_CMB_XB">    <value>男</value>  </filed>  <filed id="Fx_XML_TXT_NL">    <value>25</value>  </filed>  <filed id="Fx_XML_CMB_HR">    <value>true</value>  </filed>  <filed id="Fx_XML_CMB_HR1">    <value>false</value>  </filed>  <filed id="Fx_XML_CHK_XJ">    <value>true</value>  </filed>  <filed id="Fx_XML_CHK_XG">    <value>false</value>  </filed>  <filed id="Fx_XML_TXT_XX">    <value />  </filed></data>


 

(二)从XML字段取出相应的字段信息

1、新建查询存储过程

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[ACT_TEST_XML_CX](@XMBH nvarchar(50),@return_value  int output,    @return_msg  nvarchar(50) output)ASBEGINdeclare @result NVARCHAR(MAX),@idoc int,@doc  xml,@zd NVARCHAR(MAX)SET @result=''SET @zd=''select @doc=QT from T_TEST_XML where XMBH=@XMBHSELECT @result=@result+(case when len(@result)>0 then ',' else @result end) +id+':'''+value+'''' from(Select b.value('@id','nvarchar(100)') id , b.value('value[1]','nvarchar(100)') value FROM (select*from T_TEST_XML where XMBH=@XMBH)b CROSS APPLY QT.nodes('/data/filed') T([b])) aSET @result='{'+@result+'}'SELECT XMBH,result=@result from T_TEST_XML where XMBH=@XMBHset @return_value=1    set @return_msg='成功!'END


2、编写查询代码(JavaScript)

function CX(){  var BH=Ext.getCmp('txtBH').getValue();         Ext.Msg.wait('正在执行操作...','Loading...');      Ext.Ajax.request({       url:'GetDbStore.ashx?act=ACT_TEST_XML_CX?ms=1&formId=F0102',      success: function(res,opts){      var obj = Ext.util.JSON.decode(res.responseText);        if(obj.success=='success'){          var r=obj.result;          if(typeof(r[0]) == "undefined"){          alert("查无此结果!");          }else{          var re=Ext.decode(r[0].result);//取到的json          Ext.getCmp('txtXMBH').setValue(r[0].XMBH);          parent.setXmlValue(window,re);//取值函数          }       }       Ext.MessageBox.hide();      },      failure: function(res,opts){       alert('服务器连接失败!');      },      headers: {        'my-header': 'foo'      },       params: {XMBH:BH}      });    }


 

测试:

单击查询前:

JCFXBL平台客户端XML数据的储存与查询

单击查询后:

JCFXBL平台客户端XML数据的储存与查询

 

与保存时的信息一致,成功。

 

总结:

     采用XML可以将客户端的多个“字段”的数据统一打包成一个“ XML 字符串 ”,然后一次性的提交(POST)到服务端,利用MS SQL 2005对XML数据的强大处理,可以减少SQL语句的编写,以及优化T-SQL程序的复杂度。

 同时,由于XML数据的可扩展性,用他来保存数据,只要把结构写好。今后可以在不改动原有程序结构的基础上,随意的增加UI上的字段。

 

 

 

 


 

热点排行