InfoMaker报表及在PB程式中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
InfoMaker报表及在PB程式中的应用
InfoMaker是Sybase推出的一款非常优秀的免费的(存疑)报表设计及浏览工具,在安装PB时或其它Sybase软件时可作为选择性安装,并不单独销售。使用InfoMaker开发出来的报表可以直接在PB中使用,因此如果能够在PB程序中调用InfoMaker让用户自行设计数据窗口,将大大减轻了开发人员开发数据窗口的工作量,并且让用户拥有自己设计的程序界面(增进用户的参与感)。
其实InfoMaker的可执行程序是允许带参数的,以InfoMaker9.0的可执行程序im90.exe为例(以下全部以InfoMaker9.0来讲解,其它版本类似),"/P”指明报表类型,可取report、form、pipeline、query值,”/L "指明库文件," /O "指明对象名称。例:执行im90.exe /P report /L c:/test.pbl /O d_test_grid,将使用InfoMarker打开c:/test.pbl中的d_test_grid报表。
在知道InfoMaker命令行参数的前提下,要在PB程序中调用它修改现有数据窗口,目标就是组合各种参数值。
【/P】选项是枚举值,如果是修改现有数据窗口,可以取值report。
【/L】选项是库文件,可以是pbl或pbd文件,如果数据窗口的dataobject 是一个数据窗口对象,可以通过调用GetLibraryList、LibraryDirectory等函数来获取该数据窗口对象所在库文件。为了不使用户覆盖你现有pbl或pbd中的对象,我建议你新建一个临时pbl,可以通过调用LibraryCreate 来创建,调用LibraryDelete 来销毁。
【/O】选项是对象名称,如果是修改现有数据窗口,可以是数据窗口对象名称。如果数据窗口的dataobject是一个数据窗口对象,你可以直接使用它。不过出于保密考虑和担心用户覆盖现有同名对象,我建议你新建一个临时数据窗口对象,注意起名时不要与现有对象重名(需检测),这样不仅可以对付dataobject 是一个数据窗口对象的情况,也可以对付dataobject是一个psr或调用数据窗口create创建的情况。取其数据窗口语法,调用LibraryImport函数即可创建数据窗口对象。
成功组合各种参数值后就可以运行InfoMaker了,不过如果想让用户在使用InfoMaker时能得心应手和确保安全性,你还应作些可选配置。
如果你需要设计的数据窗口对象(新建的临时数据窗口对象)引用了或即将引用其它PB对象,如栏位编辑风格采用下拉数据窗口,使用嵌套报表,在对象属性中引用全局函数,这时你应该将相关的对象包括进来。这就需要对InfoMaker 运行环境进行一些配置,主要是修改im.ini文件选项,在im.ini中最需要我们配置的几个参数有Application段的QueryLib、StyleLib、DefLib,分别指明搜索库文件、样式库文件、缺省库文件。QueryLib、StyleLib参数可以取应用库文件列表,注意各文件之间是以分号(;)分隔的,与PB库文件以逗号(,)分隔有所不同。DefLib参数可以使用【/L】选项所指库文件。
如果你所开发的系统最终用户所熟悉的语言并非英语,你还应该进行一些本地化配置,比如在中国,最好是界面全部汉化。你可以使用南极星等即时语言转换软件,或使用Multilizer等软件对InfoMaker相关DLL进行汉化。笔者建议你采用第二种方法,因为通过你自己修改DLL中资源可能更贴近原意,这项工作最
主要的是需要耐心和细心,当然也需要一定的英语功底和文字组织能力。汉化的文件主要有pbapl90.dll、pbdev90.dll、pbdpp90.dll、pbdts90.dll、pbdwe90.dll、pbdwp90.dll、pblib90.dll、pbsys90.dll等,这些默认放在
sybase/shared/powerbuilder目录下。注意汉化这些文件后运行PB同样会得到汉化界面,因为PB也需要其中的某些DLL。
如果你想将InfoMaker改造成绿色软件(默认是需要通过安装程序来安装的),即无需安装只要拷贝文件即可使用,除了InfoMaker目录下所有文件外(其实只需im90.exe、im.ini、imstyle9.pbl文件),还应该拷贝以下文件放在目标电脑InfoMaker目录下,包括libjcc.dll、libjsybheap.dll、pbapl90.dll、pbcmp90.dll、pbdev90.dll、pbdpp90.dll、pbdts90.dll、pbdwe90.dll、pbdwp90.dll、pbeas90.dll、pblib90.dll、pborc90.dll、pbscr90.dll、pbsql90.dll、pbsys90.dll、pbudo90.dll、pbvm90.dll、pbwed90.dll。如果你不能明确到底需要哪些文件,你也可以拷贝sybase/shared/powerbuilder目录下所有dll。如果你需要使用完整的InfoMaker 功能,建议还是采用默认安装程序。
如果出于安全考虑,你不想让用户看到(或修改)数据窗口对象的SQL语句或连接数据库,你仅仅需要拷贝上述文件,不过这样会在运行InfoMaker时弹出好几次对话框要求用户连接数据库,按关闭即可。
命令行参数和运行参数都配置好后,就可以运行了。你可以通过调用PB的run函数或WINAPI的ShellExecute函数来执行,如果你想等待InfoMaker执行后再进行其它操作,你也可以调用WINAPI的ShellExecuteEx函数并结合WaitForSingleObject来执行。
以上仅仅考虑能使用InfoMaker来设计(修改)数据窗口,没有考虑到修改数据窗口后如何应用回去。
使用InfoMaker设计(修改)数据窗口并保存后,一种方法是重新打开对应窗口(前提是新的数据窗口对象覆盖原有同名数据窗口对象),这样就可以应用新的数据窗口对象属性了,但这样显然不专业。另一种方法是使用LibraryExport 获取数据窗口对象语法,然后通过数据窗口控件的create函数来重新创建,注意创建失败时的回滚、原有数据及状态的保存、检索参数值的保存等(这也涉及到较多的技术处理细节)。另外,出于程序稳定性考虑,你还应该在应用新属性前检查哪些属性是不允许修改的,例如用于通常的数据维护的数据窗口,你不能允许用户增加栏位或删除栏位或修改栏位名称或修改栏位数据类型等,因为这样可能会导致引用列名错误、数据共享失败等。
另一个就是新属性应用的时机。如果你是调用WINAPI的ShellExecuteEx 函数并结合WaitForSingleObject来运行InfoMaker,你可以在调用后应用新属性。如果你不等待InfoMaker结束后应用新属性,你可以创建一个菜单项(或相似功能对象)编写代码应用新属性。
通常在调用InfoMaker设计数据窗口并应用新属性后你还应该再做些善后工作,比如删除临时创建的库文件、恢复InfoMaker环境配置(需要先保存)。
当然,如果你确实想使用InfoMaker来设计报表,其中也涉及较多的技术处理细节,或许你还需要进行一些探索,希望本文能够给你带来一点启发(可能某些地方还是错误的),运用你比我更丰富的开发经验、更智慧的头脑通过不断的