使用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:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-07-26  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 58998
  • 日志数: 24223
  • 建立时间: 2007-12-06
  • 更新时间: 2008-06-15

RSS订阅

Open Toolbar