XUpdateResolver 组件(仅限于 Flash Professional)

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 组件参数

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 组件的通用工作流程

XUpdateResolver 组件的典型工作流程如下所示。

要使用 XUpdateResolver 组件:

  1. 将 XMLConnector 组件的两个实例以及每个 DataSet 组件和 XUpdateResolver 组件的一个实例添加到应用程序,并为它们指定实例名称。
  2. 选择第一个 XMLConnector 组件,然后使用“组件检查器”面板的“参数”选项卡输入要访问的外部 XML 数据源的 URL。
  3. 在 XMLConnector 组件仍然处于选定状态的情况下,单击“组件检查器”面板的“架构”选项卡,并导入示例 XML 文件以生成架构。

    注意:如果要访问绑定到数据集的数组的子元素,您可能需要为 XML 文件创建一个虚拟架构。有关详细信息,请参阅虚拟 XML 架构

  4. 使用“组件检查器”面板的“绑定”选项卡将 XMLConnector 组件内的数组绑定到 DataSet 组件的 dataProvider 属性。
  5. 选择 DataSet 组件,并使用“组件检查器”面板的“架构”选项卡创建将绑定到数组内对象的字段的 DataSet 字段。
  6. 使用“组件检查器”面板的“绑定”选项卡将数据元(DataSet 字段)绑定到应用程序中的可视组件。
  7. 选择 XUpdateResolver 组件的“架构”选项卡。在 deltaPacket 组件属性处于选定状态的情况下,使用“架构属性”窗格将 encoder 属性设置为 DataSetDeltaToXUpdateDelta 编码器。
  8. 选择“编码器选项”,并输入唯一标识 XML 文件中的行节点的 rowNodeKey 值。

    注意:rowNodeKey 值结合了 XPath 语句和字段参数来定义应如何为 DeltaPacket 内包含的更新数据生成唯一的 XPath 语句。有关 DataSetDeltaToXUpdateDelta 编码器的信息,请参阅架构编码器(仅限于 Flash Professional)

  9. 单击“绑定”选项卡,并在 XUpdateResolver 组件的 deltaPacket 属性和 DataSet 组件的 deltaPacket 属性之间创建一个绑定。
  10. 创建另一个从 xupdatePacket 属性到第二个 XMLConnector 组件的绑定,以便将数据重新发送到外部数据源。

    注意:xupdatePacket 属性包含将发送到服务器的格式化 DeltaPacket(XUpdate 语句)。

  11. 添加触发器以启动数据绑定操作:使用附加至按钮的“触发器数据源”行为,或添加动作脚本。

    注意:除了这些步骤之外,您还可以创建绑定以应用通过 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> 

结果数据包可以包含无限多个操作节点。操作节点包含更新数据包中的操作结果。每个操作节点均应具有以下属性/子节点: