RDBMSResolver 组件(仅限于 Flash Professional)

RDBMSResolver 组件创建可发送到外部数据源(如 ASP/JSP 页、servlet 等)的 XML 数据包。该 XML 数据包可以轻松地转换为可用于更新任何标准 SQL 关系数据库的 SQL 语句

注意:可以使用 RDBMSResolver 组件将数据更新发送到可解析 XML 并依据数据库生成 SQL 语句的任何外部数据源(例如,ASP 页、Java servlet 或 ColdFusion 组件)。

RDBMSResolver 组件仅在 Flash Player 7 中起作用。

RDBMSResolver 组件参数

RDBMSResolver 组件具有以下参数:

tableName 放在 XML 中的表名,代表应更新的 DB 表。此表名应该与为应更新的任何字段的任何 fieldInfo 项目(或者它们应为空)输入的值相同。

updateMode 此参数具有多个值,这些值确定在生成 XML 更新数据包时标识关键字段的方式,如下所示:

nullValue 放在字段的值中用于指示空值的值。可以自定义此参数,以防与空字符串 ("") 或另一个有效值混淆。

fieldInfo 如果数据源是数据库表,则它应具有一个或多个唯一标识表中的记录的关键字段。另外,可能还会有一些已计算或从另一个表连接的字段。必须对这些字段加以标识,以便可以在 XML 更新数据包内设置关键字段,并将不应更新的字段排除在 XML 更新数据包之外。

为了实现该目的,RDBMSResolver 组件提供了 fieldInfo 参数。此参数允许您定义无限多个需要特殊处理的字段。每个 fieldInfo 项目包含三个属性:

RDBMSResolver 组件的通用工作流程

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

要使用 RDBMSResolver 组件:

  1. 将 WebServicesConnector 组件的两个实例以及每个 DataSet 和 RDBMSResolver 组件的一个实例添加到应用程序,并为它们指定实例名称。
  2. 选择第一个 WebServicesConnector 组件,并使用“组件检查器”面板的“参数”选项卡为从外部数据源公开数据的 Web 服务输入 WSDLURL。

    注意:Web 服务必须返回要绑定到数据集的记录数组。

  3. 使用“组件检查器”面板的“绑定”选项卡将 WebServicesConnector 组件绑定到 DataSet 组件。
  4. 选择 DataSet 组件,然后使用“组件检查器”面板的“绑定”选项卡将数据元(DataSet 字段)绑定到应用程序中的可视组件。
  5. 将 DataSet 组件绑定到 RDBMSResolver 组件。

    注意:在调用 DataSet 组件的 applyUpdates 方法时,更新指令将从 DataSet 组件发送到 RDBMSResolver 组件。

  6. 选择 RDBMSResolver 组件并将其绑定到第二个 WebServiceConnector 组件,以便将数据重新发送到外部数据源。
  7. 添加触发器以启动数据绑定操作:使用附加至按钮的“触发器数据源”行为,或添加动作脚本。

    注意:除了这些步骤之外,您还可以创建绑定以应用通过 RDBMSResolver 组件从服务器重新发送到 DataSet 组件的结果数据包。

    有关详细信息,请参阅RDBMSResolver 组件

关于将更新发送到外部数据源

XML 更新数据包包含三种不同类型的节点:deleteinsertupdate。其中每个节点代表对数据库表中的行的一种更改。每个节点都包含查找要更新的记录以及描述所做的修改(如果有)的字段节点。

从解析程序组件发送的更新采用 XML 更新数据包的形式,该数据包是通过连接器组件发送到外部数据源的。下面是 RDBMSResolver 组件的一个 XML 更新数据包示例(通过将 updateMode 参数设置为 umUsingKey 生成):

<update_packet tableName="customers" nullValue="{_NULL_}" transID="46386292065:Wed Jun 25 15:52:34 GMT-0700 2003">
      <delete id="11295627477">
         <field name="id" type="numeric" oldValue="10" key="true"/> 
      </delete>
      <insert id="12345678901">
         <field name="id" type="numeric" newValue="20" key="true"/>  
         <field name="firstName" type="string" newValue="Davey" key="false"/> 
         <field name="lastName" type="string" newValue="Jones" key="false"/> 
      </insert>
      <update id="98765432101"> <field name="id" type="numeric" oldValue="30" key="true"/>
         <field name="firstName" type="string" oldValue="Peter" newValue="Mickey" key="false"/> 
         <field name="lastName" type="string" oldValue="Tork" newValue="Dolenz" key="false"/> 
      </update>
   </update_packet>

XML 更新数据包中包括以下元素:

下表描述如何确定这些关键属性值。如果使用 RDBMSResolver 组件的 fieldInfo 参数将某个字段定义为关键字段,它将始终出现在更新数据包中,并且 key="true"。否则,更新数据包中字段的 key 属性将根据下表进行设置:

节点类型

umUsingKey

umUsingModified

umUsingAll

delete

false

true

true

insert

false

true

false

update

false

如果字段被修改,则为 true,否则为 false

true

关于从外部数据源接收结果

服务器完成更新数据包之后,不管成功与否,它都应发送回一个包含错误或附加更新(由更新操作产生)的结果数据包。在没有消息的情况下应该仍会发送结果数据包,但该数据包将没有操作结果节点。

下面是 RDBMSResolver 组件结果数据包的一个示例(同时包含更新结果和更改信息节点):

<results_packet nullValue="{_NULL_}" transID="46386292065:Wed Jun 25 15:52:34 GMT-0700 2003"> 
      <operation op="delete" id="11295627479" msg="The record could not be found"/> 
      <delete> 
         <field name="id" oldValue="1000" key="true" /> 
      </delete> 
      <insert> 
         <field name="id" newValue="20"/> 
         <field name="firstName" newValue="Davey"/>  
         <field name="lastName" newValue="Jones"/> 
      </insert>  
      <operation op="update" id="02938027477" msg="Couldn't update employee."> 
         <field name="id" curValue="105" msg="Invalid field value" /> 
      </operation> 
      <update>  
         <field name="id" oldValue="30" newValue="30" key="true" /> 
         <field name="firstName" oldValue="Peter" newValue="Mickey"/> 
         <field name="lastName" oldValue="Tork" newValue="Dolenz"/> 
      </update> 
   </results_packet>

结果数据包包含四种不同类型的节点: