摘 要:为提高程序开发效率,本文提出了通用窗口下动态连接数据窗口对象及改变窗口属性的方法。
关键字:Powerbuild,结构,通用窗口,动态连接,数据窗口对象
一、引言
Powersoft 公司推出的PowerBuilder是一种高效而快捷的集成开发环境,它提供了可视 化的、面向对象的、基于客户机—服务器的开发环境,它是当前数据库前端开发工具最具有代表性的产品,尤其是其功能强劲的数据窗口控制(DataWindowObject),具有强大的数据提取能力,使开发人员大大提高了效率。
通常程序开发时,开发人员对每个功能都做一个窗口和与之配套的数据窗口对象,而笔者发现,如果没有很多特殊需求,一般录入窗口、打印窗口、查询窗口等可以定义成通用窗口,而根据需要动态地改变窗口标题或其他属性以及动态连接数据窗口对象,就能满足我们的需求,从而大大减少了我们建立窗口对象的数量,也减少了维护量,从而提高开发效率。
二、实现思路
在某一具体应用对象中,对功能类型相同的窗口,如果没有许多特殊要求,其功能需求几乎相似,只是对数据的处理及显示格式不同,这些可以充分利用Powerbuild的强大的datawindow功能,把数据处理部分尽量放到datawindow中完成,这样就可以把功能类型相同的窗口作成通用窗口。通用窗口的属性如窗口标题、静态文本的显示可以根据需要在窗口的script中动态改变;而数据窗口对象(datawindow)及其属性如水平、垂直滚动条等也可以在窗口script中动态设定。
以通用输入窗口、通用打印窗口为例。在录入窗口中,只需有插入、删除、保存、记录指针移动等功能即可。在通用打印窗口中,一般靠日期控制报表范围,日期完全可以在Datawindow中根据不同需求设定日期检索参数,在报表窗口的script中通过Retrieve(日期检索参数1, 日期检索参数2)检索既可。
由于 OpenWithParm 和Opensheetwithparm打开窗口并向窗口传递参数时,PowerBuilder 只允许传递一个参数,所以必须创建一个结构,把需要传递的参数如数据窗口对象名、要改变的窗口属性等以变量的形式定义到这个结构中去。
在窗口中通过Message对象,获取结构中的数据来动态改变窗口属性、数据窗口对象及其属性。
三、实现方法
1、 在应用中定义一个结构,它是全局变量:str_dataw
wtitle string //窗口标题
dname string //数据窗口对象名称
dvscrol Boolean //垂直滚动条
stext string //静态文本对象的text变量
2、分别在各自模块的menu中clicked事件的script中通过结构动态给窗口标题、数据窗口对象,数据窗口滚动条等赋初值。
(1)在标准目录录入菜单中的clicked事件定义一个结构变量实例、分别给结构赋初值、打开通用录入窗口:
close(w_input) //关闭通用录入窗口
str_dataw dataw //定义一个结构变量实例
dataw. wtitle="标准录入窗口" //改变录入窗口标题
dataw. dname="d_bookinst" //改变数据窗口对象
dw_1. dvscrol =true // 改变滚动条
opensheetwithparm(w_input,dataw,parentwindow,1,layered!) //打开通用录入窗//口并用结构向窗口传递参数
(2)订购录入菜单中的clicked事件的Script:
close(w_input)
str_dataw dataw
dataw. wtitle="订购录入窗口"
dataw. dname="d_bookin"
dw_1. dvscrol =false
opensheetwithparm(w_input,dataw,parentwindow,1,layered!)
(3)采购单报表菜单中的clicked事件的Script:
close(w_reportbz) //关闭通用打印窗口
str_dataw dataw
dataw. wtitle="采购清单报表"
dataw.dname="d_repcaig"
dataw..stext="申购时间始止"
opensheetwithparm(w_ reportbz, dataw,parentwindow,1,layered!)
(4)图书标准发放报表菜单中的clicked事件的Script:
dataw. wtitle="标准图书发放报表"
dataw. dname="d_repfaf"
dataw.stext="发放时间始止"
opensheetwithparm(w_ reportbz, dataw,parentwindow,1,layered!)
3、在通用窗口中,用程序动态地为数据窗口控件指定DataWindow Object及属性等:
(1)录入通用窗口的Open事件的script:
str_dataw dataw
dataw=message.powerobjectparm //把message对象赋值给结构变量实例
this.title= dataw. wtitle
this.dw_1.dataobject= dataw .dname
this.dw_1. VScrollBar= dataw. dvscrol
dw_1.settransobject(sqlca)
dw_1.retrieve()
(2)打印通用窗口的Open事件的script:
this.title= dataw. wtitle
this.dw_1.dataobject= dataw .dname
this.dw_1.st_1.text= dataw. stext
通用打印窗口中的“确定”按钮中的script为:
dw_1.settransobject(sqlca)
dw_1.Retrieve(date(em_1.text), date(em_1.text))
通用打印窗口数据对象为采购单d_repcaig时,检索参数为起始申购时间、截止申购时间;在数据对象为图书标准发放d_repfaf时,检索参数为起始发放时间、截止发放时间,这些处理在Datewindow中完全可以实现。
图一:通用录入窗口的两个不用应用
图二:通用打印窗口的两个不用应用
四、结束语
这种方法在Powerbuild6.7.0下调试通过,笔者的多个应用软件开发项目中一直使用,它使开发程序所占的存储空间大大降低,维护工作量减少,可以极大提高程序开发效率。
参考文献
1、Powerbuild应用开发技术详解 电子工业出版社
2、Powerbuild7开发手册 内蒙古人民出版社
|