基于数据窗口技术用户可管理界面软件的实现
2014-05-30张新业张振友
张新业 张振友
摘要:利用Powerbuilder数据窗口技术实现最终用户对应用软件界面的管理,并将用户对界面的修改结果持久存储到数据库,软件开发者无需对软件重新编译和连接,提高了软件的适应性,降低了软件维护成本。
关键词:数据窗口;用户可管理界面软件;用户界面;Powerbuilder
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)08-1654-03
用户可管理界面软件也称为用户可配置界面软件,是指允许软件使用者,也就是软件的最终用户通过软件自带的功能对用户界面进行管理,如修改界面的外观,增加或减少界面元素等,并且将这些变化持久存储,而无需软件开发商对已发布的软件进行重新编译和发布,因此用户可管理界面软件可以提高软件的适用性,降低软件的维护成本。
用户可管理界面软件既是一种技术,也是一种编程思想和方法,可以在任何开发工具中加以贯彻。该文给出的是基于Powerbuilder数据窗口技术的一种实现。
1 总体设计思路
Powerbuilder应用程序中,界面元素包括窗口、菜单、窗口中的各种控件等,数据窗口(DataWindow)控件是窗口控件的一种,数据窗口控件通过与数据窗口对象相结合,用多种风格向用户展示数据并将用户对数据操作的结果保存到数据库中,因此数据窗口构成了应用程序界面的最主要的元素。该文主要介绍数据窗口界面用户可管理的实现,窗口及窗口中其它控件的实现思想与此类似。
对用户界面的管理包括获取用户界面的各种界面元素、对界面元素的属性进行重新设置、持久存储修改结果、界面再次被载入时通过最后一次的修改结果重构数据窗口等主要内容。总体结构图如图1所示。
2 系统实现
首先构造一个数据窗口类型的用户可视对象,所有的编程都是面向该用户对象的,应用程序中的数据窗口控件都继承自该对象,因此不会增加程序员的工作量。
2.1 数据窗口语法的读取及数据窗口的重构
数据窗口的重构是指使用已经存储的数据窗口语法重新构建数据窗口,代码可以放入数据窗口控件的constractor事件中。
首先检查数据库中是否保存有该数据窗口的语法,若存在,则取得该数据窗口的语法,通过该语法重建该数据窗口;若用户未对该数据窗口进行过管理配置,则不存在该数据窗口语法的存储信息,这时直接使用原始数据窗口。数据窗口构建(constractor)事件代码如下:
string ls_datawindow_name,ls_datawindow_script,ls_error
blob lb_script
ls_datawindow_name =this.dataobject
long ll_count
//检查数据库中是否已保存了该数据窗口的语法
select count(*) into :ll_count from dw_describe_script
where datawindow_name = :ls_datawindow_name;
if ll_count>0 then
//已存在该数据窗口的语法,则取得原有语法
selectblob datawindow_scrip into :lb_script from dw_describe_script
where datawindow_name = :ls_datawindow_name;
ls_datawindow_script = string(lb_script)
//通过所取得的数据窗口语法重建数据窗口
this.create(ls_datawindow_script,ls_error)
if len(ls_error) >0 then
MessageBox("錯误信息", "创建数据窗口错误: ~r" + ls_error)
end if
end if
其中dw_describe_script表包括数据窗口对象名(datawindow_name)及数据窗口语法(datawindow_scrip)等列。
2.2 数据窗口语法的获取及保存
当用户对数据窗口进行了修改后,可在数据窗口控件的destructor事件中获取修改后的数据窗口语法,并保存到数据库中。保存数据窗口语法的代码如下:
string ls_datawindow_name,ls_datawindow_script
blob lb_script
long ll_rows
ls_datawindow_name=this.dataobject//取得数据窗口对象名字
//取得数据窗口语法
ls_datawindow_script=this.Describe ("datawindow.syntax")
lb_script = blob(ls_datawindow_script)
//检查数据库中是否已保存有该数据窗口语法
select count(*) into :ll_rows from dw_describe_script
where datawindow_name = :ls_datawindow_name;
if ll_rows=0 then
//不存在该数据窗口语法,则插入一条记录。
insert into dw_describe_script(datawindow_name)
values(:ls_datawindow_name) ;
if sqlca.sqlcode =-1 then
rollback;
messagebox("信息提示","增加数据窗口格式失败!")
return
end if
end if
//更新数据窗口语法
sqlca.autocommit=true
updateblob dw_describe_script set datawindow_scrip = :lb_script
where datawindow_name = :ls_datawindow_name;
sqlca.autocommit=false
if sqlca.SQLNRows<1 then
rollback;
messagebox('错误','修改数据窗口格式失败')
return
end if
2.3 界面管理工具
界面管理工具是软件使用者管理用户界面的工具,用户通过点击数据窗口,从弹出的菜单中打开该如图2所示的窗口。
在该窗口的open事件中通过Describe函数取得原数据窗口语法字符串,然后取得由制表符分隔的每个控件的名字,通过Describe (ls_object_name + ".type")判断控件类型,对于不同类型的控件取得相应属性并显示于图2所示的窗口中。
用户通过通过图2修改各种控件的属性,也包括新建、隐藏数据窗口中的控件等。当用户点击确定按钮后,通过modify函数将修改后的结果反映到原数据窗口中。
由于篇幅所限,本部分代码从略。
3 结束语
除了对数据窗口中原有控件的属性进行设置外,本系统还允许用户添加如静态文本、按钮、图片等新控件,大大提高了软件界面的适用性,收到了良好的效果。