本节应用于填充选项,该选项可用于表单输入和表单 JSON 树。章节目录:

前言

手动创建一个包含数据的 Excel 电子表格,并对复杂请求消息中每个单独元素进行参数化,可能非常耗时且乏味。如果您有一个现有的数据源,那么便可以使用填充特性自动将数据源值映射到消息元素。如果还没有包含这些值的数据源,那么可以使用填充特性为一组表单字段自动生成简单的值。您还可以根据生成用于填充消息元素的数据源模板中的说明自动生成并完成数据源模板。

数据源映射和命名规范

当参数化元素或属性值时,有三种可能性: 

  • 指定一个值
  • 指定元素应该为 Nil 或 Null
  • 指定应该完全排除的元素。

我们将使用下面的示例来讨论数据源映射,该示例代表了一个复杂的请求信息,其中包含了您可能想要参数化的元素。 

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <SOAP-ENV:Body>
  <addNewItems xmlns="http://www.parasoft.com/wsdl/store-01/">
   <book>
    <id xmlns="">0</id>
    <title xmlns=""></title>
    <price xmlns="">0.0</price>
    <authors xmlns="">
     <i></i>
     <i></i>
    </authors>
    <publisher xmlns="">
     <id myAtt="attVal">1</id>
    </publisher>
   </book>
  </addNewItems>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

该示例包括具有可变元素数(作者列表)的数组。将填充特性与相关的数据源命名规范一起使用比手动填充元素更有效,并且允许您专注于以数据驱动的方式(使用数据源)设计用例,而不是专注于单独配置每个消息参数的易出错方法。

指定值

将数据源列与请求元素匹配是通过应用于数据源列名的某些命名规范来实现的。在上面的示例 XML 中,有两个名为 id的元素。您可以通过将其中一行命名为 book/id,另一个 book/publisher/id 来区分元素。  

这个命名规范模仿文件目录结构或 XPath。属性也是类似地标识的,使用 @ 符号的附加规范。在上面的示例中,book/publisher/id@myAtt 引用 publisher ID 的属性 myAtt

几个元素可能具有相同的名称,例如 authors 元素中示例的 book/authors/i 标识符。如果元素具有相同的名称,则可以使用括号内 "()" 的数组号来标识重复的元素。例如,book/authors/i(1) 标识第一个元素,book/authors/i(2) 标识第二个元素。

指定 Nil 和 Exclude

在某些情况下,您可能希望元素具有 nil 值或在请求消息中被排除。默认情况下,为 exclude 添加 XL 为 nil 值添加 NIL 将完成此目标。例如,不应该发送一个名为 book/authors/iXL(2) 的列允许您指出 authors 元素的第二个子元素,例如只有一个 author 的情况。

使用说明

  1. 右键点击树的空白区域(而不是特定元素),然后选择填充
  2. 启用参数值映射到数据源的列,让 SOAtest 自动将每个表单输入参数设置为参数化
  3. 选择名称与参数名称匹配的数据源列。例如,如果数据源有一个列名为 "title" 并且一个表单输入元素具有相同的名称 "title",那么 "title" 元素将被映射为数据源列 "title" 等等。
  4. 根据需求自定义其余选项。详情请参阅填充向导选项
  5. 点击 OK

填充向导选项

选项
说明
将参数值映射到数据源列

(只有在有数据源时才启用。)指明是否自动将每个表单输入参数设置为参数化,以及是否选择名称与参数名称匹配的数据源列。例如,如果数据源有一个列名为 "title" 并且一个表单输入元素具有相同的名称 "title",那么 "title" 元素将被映射为数据源列 "title" 等等。

元素排斥

不适用于资源库数据源

指明是否也映射具有数据源列的属性使用数据源用空字符串排除 [元素名称]。 

关于使用空字符串排除选项的更多详情,请参阅使用数据源值来配置是否已发送可选元素。 

以下选项可从元素排除下拉菜单选择:

  • 总是包括:指示 SOAtest 始终添加可选的新元素(模式类型属性 minOccurs='0')作为填充过程的一部分。添加的元素数量由大量的序列 (数组) 选项字段决定。默认设置为 2。

  • 保持不变:将每个 sequence 元素保留为当前状态。不添加任何新元素,也不修改任何 exclusion 属性。

  • 使用数据源:指示填充过程将每个表单输入元素的使用数据源用空字符串排除 [元素名称] 属性映射到具有相同名称但值后缀为 XL 的数据源。  如果指定数据源列中的值是空字符串,则消息中将不包含可选元素。如果它是一个实际值,则该值将作为消息的一部分发送。

后缀 XL 在排除列名称后缀字段中指定;XL 是默认值。例如,如果请求 XML 消息包括名为 "title" 的元素,并且模式中的该元素类型使用属性 minOccurs='0' 定义,那么右键点击 title 的父节点时,使用数据源:用空字符串排除 title 选项可以在表单输入视图中使用。填充特性将把 exclude 属性映射到名为 "titleXL" 的数据源列,假设指定 "XL" 为后缀。 

Nillable 元素/ Null 元素

不适用于资源库数据源

类似于元素排除,但 Nillable 元素会影响使用数据源:用空字符串设置 Nil 属性。此表单输入属性可用于设置 nillable="true" 模式类型的元素。当数据源存在空字符串时,将把 nil 属性作为消息的一部分发送。如果指定了值,则请求元素将包含指定的值;将不发送 nil 属性。如果数据源有一个空字符串(例如,""),那么 request 元素将没有值,并且将包含 xsi:nil="true" 属性。更多信息,请参阅使用数据源值来配置是否使用 Nil 或 Null 属性

对话框的 Nillable 列名后缀为字段指定后缀。

属性排除

不适用于资源库数据源或表单 JSON

指示填充过程是否自动添加可选属性。

数据源映射和命名规范

对于序列(数组)和嵌套类型:值映射和 exclude/nillable 映射基于元素名称和列名之间的名称匹配约定。但是,在某些情况下,XML 消息中重用了相同的元素名,因此如果要维护每个元素和数据源列之间的一对一映射,则需要避免映射冲突。

对于嵌套复合类型:类似 XPath 的数据源列名可用于消除歧义。例如,您可以使用 "book/title" 作为列名,而不是使用数据列 "title",因此它将映射到 "book" 下的任何 "title" 元素。如果这可能导致歧义,您还可以使用诸如 "addNewItem/book/title" 之类的列名进一步确定应该与哪个元素关联。

对于序列类型(同名项重复出现的数组):项目索引号可用于消除歧义。例如,在 Parasoft 商店服务中,book 类型有一个 authors 元素,然后可以有许多 "i" 元素来表示作者列表。只使用数据源列名 "i" 可能导致该数据源列映射到所有出现元素 "i"的地方。 

使用数据源列名 "i[2]" 将导致该列名作为序列中的第二项映射到所有出现的 "i"。(索引号从 1 开始,而不是按照 Xpath 规范从 0 开始)。如果使用了列名 "authors/i[2]",那么它将只映射到 "authors" 下的第二个 "i" 元素。

注意,如果 XML 消息中出现多个 "authors" 元素,那么所有的列都将相应地映射,除非使用足够的 Xpath 父节点消除列名的歧义,使映射成为一对一的。括号可以用作数值索引语法,所以 "authors/i(2)" 会映射到相同的元素 "authors/i[2]"。() 语法与 Xpath 规范不一致,但是当使用 [] 不是有效 SQL 字符的数据库数据源时,它很有用。

排除和 Nillable 映射:遵循与值相同的 XPath 和索引约定。例如,若要根据数据源列排除或包括 "i" 元素,则您可以使用列名 "authors/iXL[2]" 来明确指出它要用于哪些元素。

  • No labels