XUpdateResolver 组件将应用程序中对数据进行的更改转换为外部数据源可处理的 XUpdate 语句。XUpdate 是一种描述对 XML 文档所进行更改的标准,各种 XML 数据库(如 Xindice 和 Xhive)都支持该标准。
注意:您也可以使用 XUpdateResolver 组件将数据更新发送到能够解析 Xupdate 语言的任何外部数据源(例如,ASP 页、Java servlet 或 ColdFusion 组件)。有关详细信息,请参阅 XUpdate 规范。
XUpdateResolver 组件使用 DataSetDeltaToXUpdateDelta 编码器与 DataSet 组件通信。此编码器负责创建 XPath 语句,该语句根据 DataSet 组件的 DeltaPacket 内包含的信息唯一标识 XML 文件中的节点。XUpdateResolver 组件使用此信息生成 XUpdate 语句。有关 DataSetDeltaToXUpdateDelta 编码器的详细信息,请参阅架构编码器(仅限于 Flash Professional)。
XUpdateResolver 组件仅在 Flash Player 7 中起作用。
XUpdateResolver 组件具有一个参数,即 includeDeltaPacketInfo
参数(布尔值类型)。如果将此参数设置为 true
,更新数据包将包含数据集中的附加信息,外部数据源可以使用该信息生成可重新发送到应用程序的结果。此信息包含一个唯一的事务和操作 ID(由数据集内部使用)。
注意:更新数据包中包含的附加信息会使 Xupdate 无效。这是预期行为。只有在要将此信息存储在服务器对象内并使用它来生成结果数据包时,您才需要选择添加此信息。在此方案下,服务器对象将根据自己的需要从更新数据包中提取信息,然后将(现在有效的)XUpdate 传递到数据库。
示例(使用 false
设置):
<xupdate:modifications version="1.0" xmlns:xupdate="http://www.xmldb.org/xupdate"> <xupdate:remove select="/datapacket/row[@id='100']"/> </xupdate:modifications>
示例(使用 true
设置):
<xupdate:modifications version="1.0" xmlns:xupdate="http://www.xmldb.org/xupdate" transId="46386292065:Wed Jun 25 15:52:34 GMT-0700 2003"> <xupdate:remove select="/datapacket/row[@id='100']" opId="0123456789"/> </xupdate:modifications>
XUpdateResolver 组件的典型工作流程如下所示。
注意:如果要访问绑定到数据集的数组的子元素,您可能需要为 XML 文件创建一个虚拟架构。有关详细信息,请参阅虚拟 XML 架构。
dataProvider
属性。deltaPacket
组件属性处于选定状态的情况下,使用“架构属性”窗格将 encoder
属性设置为 DataSetDeltaToXUpdateDelta 编码器。rowNodeKey
值。
注意:rowNodeKey
值结合了 XPath 语句和字段参数来定义应如何为 DeltaPacket 内包含的更新数据生成唯一的 XPath 语句。有关 DataSetDeltaToXUpdateDelta 编码器的信息,请参阅架构编码器(仅限于 Flash Professional)。
deltaPacket
属性和 DataSet 组件的 deltaPacket
属性之间创建一个绑定。xupdatePacket
属性到第二个 XMLConnector 组件的绑定,以便将数据重新发送到外部数据源。
注意:xupdatePacket
属性包含将发送到服务器的格式化 DeltaPacket(XUpdate 语句)。
注意:除了这些步骤之外,您还可以创建绑定以应用通过 XupdateResolver 组件从服务器重新发送到数据集的结果数据包。
有关详细信息,请参阅XUpdateResolver 组件。
发送到服务器的更新数据包使用 XUpdate 格式。下面是一个 XUpdate 数据包示例:
<?xml version="1.0"?> <xupdate:modifications version="1.0" xmlns:xupdate="http://www.xmldb.org/xupdate"> <xupdate:insert-after select="/addresses/address[1]" > <xupdate:element name="address"> <xupdate:attribute name="id">2</xupdate:attribute> <fullname>Lars Martin</fullname> <born day='2' month='12' year='1974'/> <town>Leizig</town> <country>Germany</country> </xupdate:element> </xupdate:insert-after> </xupdate:modifications>
服务器完成更新数据包之后,不管成功与否,它都应发送回一个包含错误或附加 XML 更新(由更新操作产生)的结果数据包。在没有消息的情况下应该仍会发送结果数据包,但该数据包将没有操作结果节点。
下面是一个既不包含错误也不包含 XML 更新的更新数据包的结果数据包示例:
<results_packet nullValue="{_NULL_}" transID="46386292065:Wed Jun 25 15:52:34 GMT-0700 2003"/>
包含 XML 更新的结果数据包示例如下:
<results_packet nullValue="{_NULL_}" transID="46386292065:Wed Jun 25 15:52:34 GMT-0700 2003"> <operation op="remove" id="11295627479" msg="The record could not be found"/> <operation op="update" id="02938027477"> <attribute name="id" curValue="105" msg="Invalid field value" /> </operation> </results_packet>
结果数据包可以包含无限多个操作节点。操作节点包含更新数据包中的操作结果。每个操作节点均应具有以下属性/子节点:
op
:描述所尝试操作的类型的属性。必须为 insert、delete 或 update。id:
包含所发出操作节点中的 ID 的属性field
:提供字段级别特定信息的 0 个、1 个或多个子节点。每个字段节点至少应具有一个 name
属性(包含字段名)和一个 msg
属性(提供字段级别消息)。它还可以根据需要包含 curValue
属性,该属性包含服务器上该行中该字段的最新值。