• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:16来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

我们暂且封装该任务,看看服务器端的操作。
16.9.2 服务器端
迅速查看一下G e t A S P ( )能够知道词汇表P e r f o r m a n c e R e p o r t是与名为H i s t o r y. a s p的A S P相关
的。该脚本的主体与s t a ff . a s p大同小异。程序首先获取传输的文档,建立某些数据库资源,然后
根据文档的词汇表执行适当的操作。如前所述, P e r f o r m a n c e R e p o r t文档是C o l l e c t i o n的一部分。
下面显示了H i s t o r y. a s p主体部分与该文档相关的分支语句:
程序清单1 6 - 2 3
1. 处理成果报告
P r o c e s s P e r f o r m a n c e R e p o r t函数构建S Q L语句,并将它提交给数据库。同样,我们在程序设
计上保留了一定的灵活性,它能够处理一个C o l l e c t i o n文档中包含多个报告的情况:
712使用XML 高级编程
下载
程序清单1 6 - 2 4
我们处理根节点C o l l e c t i o n的每个子元素。如果它是P e r f o r m a n c e R e p o r t—谁知道任意一个
客户会发送哪些信息?—从中提取详细的文本描述以及程序员I D和项目I D,并将它们作为参
数传递给I n s e r t P e r f R e p o r t ( )。该函数构造用于插入信息的S Q L语句,并执行它。
2. 插入成果报告的数据库操作
我们不允许管理员编辑现有的成果报告—任何人都不能掩盖有利或不利的项目评价!同
时它能够简化程序设计。我们不必担心是使用I N S E RT还是U P D AT E。所有与提交成果报告任务
相关的命令都是I N S E RT。例如,我们可能生成以下S Q L语句:
因此,用于插入新的成果报告的代码如下:
程序清单1 6 - 2 5
生成S Q L语句之后,我们要执行该命令并判断是否出现错误。如果一切正常,将返回简短的
X M L文档< / A C K >。
细心的读者会发现上面的SQL INSERT语句在D e t a i l s表中插入了对一个项目的引用,却没
有验证P r o j e c t s表中是否存在相应的行。由于本例侧重于说明X M L,而不是数据库问题,
因此我采取了简略的形式,忽略了维护项目信息的问题。如果你打算将该原型扩展为真
第16章实例研究2—XML和分布式应用程序使用713 下载
正的应用程序,应该执行一致性检查。我可能还会利用触发器和存储过程协助你维护数
据库的完整性。
16.10 清除成果报告历史表单
当你在成果报告历史表单中点击C l e a r按钮时,将执行这项任务,它与清除程序员表单的过程类
似。我们首先将名为x m l P r o j s的数据岛的解析树重新设置为包含一个P r o j R e p o r t元素的C o l l e c t i o n文档。
P r o j R e p o r t元素及其子元素不包含文本值,只包含元素。下面是用于完成上述任务的源代码:
程序清单1 6 - 2 6
16.11 获取程序员的成果历史
现在,我们只剩下一项功能了,这就是获取页面上显示的程序员的全部成果报告。该过程
由P r o j Tr a c k . h t m l页面的O n S t a ff H i s t o r y ( )处理器开始。在该函数中,我们将P r o j P e r f o r m a n c e Q u e r y
文档上传到服务器,并接收包含零个或多个P r o j R e p o r t元素的C o l l e c t i o n文档。接收到来自服务的
文档后,我们将更新数据绑定。
16.11.1 客户端
构造查询文档的工作非常简单,因为我们只需要发送S t a ff I D字段的值:
程序清单1 6 - 2 7
714使用XML 高级编程
下载
F i x H i s t o r y B i n d i n g ( )函数执行动态更新操作,在本章的实例研究中,我们已经多次看到类似
的操作。唯一的特殊之处在于我们绑定的是重复的H T M L元素。根据XML DSO,表格的每一行
与一个P r o j R e p o r t元素匹配。P r o j Tr a c k . h t m l只需要提供包含一行的模板。下面是程序设计阶段存
在的表格:
程序清单1 6 - 2 8
当我们获取数据时, I N P U T和T E X TA R E A元素与p r o j N a m e、p r o j I D Te x t和p r o j D e t a i l动态绑
定。我们首先删除当前文档中除第一个节点之外的所有节点,之所以保留第一个节点是为了防
止绑定失败。然后,添加所有新节点,最后删除旧文档的其余节点:
程序清单1 6 - 2 9
第16章实例研究2—XML和分布式应用程序使用715 下载
16.11.2 服务器端
一旦H i s t o r y. a s p接收到我们的查询文档,它就从根节点开始处理:
P r o c e s s H i s t o r y Q u e r y ( )负责将X M L转化为SQL SELECT语句。这类S Q L语句类似于以下形
式:
在执行查询之前, P r o c e s s H i s t o r y Q u e r y ( )利用函数M a k e H i s t C o n s t r a i n t ( )构造S Q L语句的查询
条件:
程序清单1 6 - 3 0
发出查询命令之后,程序必须依次处理结果记录集合中的每条记录,并将每一行作为一个
成员写入C o l l e c t i o n文档:
716使用XML 高级编程
下载
程序清单1 6 - 3 1
以下是两个辅助性函数: M a k e H i s t C o n s t r a i n t ( )和Wr i t e H i s t B o d y ( )。M a k e H i s t C o n s t r a i n t ( )
从查询文档中提取程序员I D,并构造SQL WHERE从句的核心部分。Wr i t e H i s t B o d y ( )是在函
数P r o c e s s H i s t o r y Q u e r y ( )中调用的,它将数据库查询的结果转化为要发送给客户端的X M L文
档:
程序清单1 6 - 3 2
第16章实例研究2—XML和分布式应用程序使用717 下载
16.12 经验教训
既然我们已经完成了本章开始提出的用于管理程序的项目,现在应该根据提出的开发原则
对我们的工作进行评价。应用程序能够满足项目的功能需求,只需要极少的代码,就能够保证
平台独立性。在本例中,采用了特定平台的技术—用于可视化表示的数据绑定—但是我们
将它与服务器端的代码实现相分离。类似地,服务器端使用了A D O和关系型数据库,但是它对
客户端是屏蔽的。这种设计方式提高了代码重用的可能性。特别是服务器页面可以“原封不动
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程下(63)