使用SDO跟踪XML数据的变化(3)
上一篇 /
下一篇 2008-04-24 21:11:22
/ 个人分类:技术文章
在这个方法中,我们首先使用了getChangedDataObjects()来获得所有变化了的数据对象,然后按着他们的种类处理,即建立、删除或编辑。如果数据对象是新建的,我们会打印对象的信息和所有的属性。
在下一部分,我们来浏览被编辑的订购单。
四、通过一个不同的实体浏览数据的变化
XML数据处理的第三部分需要完成两个任务:
1、程序需要按着编辑顺序打印出主要的信息。
2、显示处理阶段所有的修改记录。
当我们可以更进一步根据着一个记录变化阶段编辑订购单时,这部分显示了如何使用ReviewPO.java调用所有的编辑记录。ReviewPO.java的代码如下:
package com.company.sdo.po; import java.io.FileInputStream; import java.util.List; import commonj.sdo.ChangeSummary; import commonj.sdo.DataObject; import commonj.sdo.helper.XMLDocument; import commonj.sdo.helper.XMLHelper; public class ReviewPO { public static void main(String[] args) throws Exception { Util.definePOTypes(); FileInputStream fis = new FileInputStream(Constants.PO_PROCESSED_XML); //1. 装载要处理的订购单 XMLDocument xmlDoc = XMLHelper.INSTANCE.load(fis); DataObject purchaseOrder = xmlDoc.getRootObject(); //2. 显示被编辑的订购单的信息 System.out.println(); System.out.println("---received purchase order information---"); System.out.println("Order date: " + purchaseOrder.get("orderDate")); System.out.println("Order comment: " + purchaseOrder.get("comment")); DataObject shipTo = purchaseOrder.getDataObject("shipTo"); System.out.println("Ship to name: "); Util.printDataObject(shipTo,1); DataObject billTo = purchaseOrder.getDataObject("billTo"); System.out.println("Bill to name: "); Util.printDataObject(billTo,1); DataObject items = purchaseOrder.getDataObject("items"); List itemList = items.getList("item"); System.out.println("Ordered items: "); for (int i = 0; i < itemList.size(); i++) { DataObject item = (DataObject) itemList.get(i); System.out.println("\tItem " + (i+1) + " :" ); Util.printDataObject(item,2); } //3. 显示了第二阶段的数据变化 System.out.println(); System.out.println("---review changes in purchase order ---"); ChangeSummary chngSum = purchaseOrder.getChangeSummary(); Util.printChangeSummary(chngSum); //4. 取消第二阶段的所有变化 System.out.println(); System.out.println("---action taken after reviewing the changes---"); System.out.println("\t###undo all changes###"); chngSum.undoChanges(); //5. 编辑订购单的原始版本 System.out.println(); System.out.println("---changes made in purchase order review---"); chngSum.beginLogging(); billTo.set("name", "Alice Smith"); chngSum.endLogging(); //6. 将新的变化输出到系统控制台 Util.printChangeSummary(chngSum); //7. 将改变记录保存到一个XML文件中 Util.storeXML(purchaseOrder,"purchaseOrder", Constants.PO_REVIEWED_XML); } }
|
要
注意的是第二个任务不同于在前一部分打印ChangeSummary,在这里printout是直接基于ChangeSummary的。变化细节在运行时
被重新装载。我们可以通过比较这两个printout来分辨它们的不同。在上一部分,printDataObject()在删除项时什么都没产生,而是调
用了printDeletedProperty()来列出它们的属性和它们的值。在当前的printout中,恰恰相反。
在程序的其他部分,注释4通过调用undoChanges方法取消了在第二阶段的所有的变化,注释5对订购单做了一些小的变化。我们可以看看保存变化记录的文件(po_reviewed.xml)来验证这些操作结果。
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: