powerbuilder中的数据窗口真是好的不得了,工作基本上都是围绕它做,很高效,这几天项目上需要用导出xml文件,就用pb9(xml导出导入功能是从powerbuilder9.0增加的功能)做了一个demo以验证可行性
在PowerBuilder(PB)开发中,XML(可扩展标记语言)的应用越来越广泛,尤其是在数据交换、存储和配置文件等方面。本示例主要介绍如何在PB9中利用数据窗口(Data Window)功能导出XML文件。
XML是一种自描述、结构化的数据格式,常用于在不同的应用程序之间传递数据。在PB9中,XML导出和导入功能得以增强,使得开发者能够更方便地处理XML数据。在给定的示例中,项目需求是导出销售订单和订单明细到XML文件,这可以通过定义数据窗口的XML模板来实现。
XML文件的结构对数据的组织至关重要。原始示例中的XML结构如下:
```xml
<trans>
<transdetail>
<order><date/></order>
<orderdetail><product/></orderdetail>
<orderdetail><product/></orderdetail>
</transdetail>
<transdetail>
<order><date/></order>
<orderdetail><product/></orderdetail>
<orderdetail><product/></orderdetail>
</transdetail>
</trans>
```
这种结构可能不太理想,因为`transdetail`节点可能不是必要的,而`orderdetail`应该作为`order`节点的子节点。优化后的结构如下:
```xml
<trans>
<order>
<date/>
<detail>
<orderdetail><product/></orderdetail>
<orderdetail><product/></orderdetail>
</detail>
</order>
<order>
<date/>
<detail>
<orderdetail><product/></orderdetail>
<orderdetail><product/></orderdetail>
</detail>
</order>
</trans>
```
在PB9中,处理这个任务只需要三行代码,其中关键的一行是`dw_export.save("c:\test.xml", xml!, false)`,这会将数据窗口`dw_export`的内容保存为XML文件。
实现这个功能的关键在于创建和配置数据窗口的XML模板。创建一个数据窗口`d_order`来表示订单头信息,并在SQL中使用GROUP BY语句避免重复数据。然后,在Export/Import Template XML(EITX)中保存模板,并设置`data export`的`use template`属性为保存的模板名称。
在XML模板中,`__pbband="detail"`表示开始明细数据的循环,而`starts detail`选项确保数据的正确嵌套。接着,通过在`transdetail`节点上添加`datawindow control reference`,引入另一个数据窗口`dw_detail`,用于表示订单明细。
`dw_detail`是`d_order`中的一个报表,它本身也是一个数据窗口,用于处理订单明细数据。同样地,也需要为`dw_detail`定义XML模板,确保`orderdetail`节点被正确地添加到`order`节点下。
总结起来,PowerBuilder的XML功能允许开发者通过数据窗口轻松地导出结构化的数据到XML文件。在PB9中,通过定义XML模板和使用数据窗口的嵌套,可以构建符合业务需求的复杂数据结构。这个示例展示了如何利用这些特性处理销售订单数据,为其他类似的需求提供了参考。