Show Menu
主题×

表单结构

表单的描述是一个结构化XML文档,它观察表单架构 xtk:form的语法
输入表单的XML文档必须包含根元素,其 <form> 中包含name ​和namespace ​属性,以填充表单名称和namespace。
<form name="form_name" namespace="name_space">
...
</form>

默认情况下,表单与具有相同名称和命名空间的数据架构相关联。 要将表单与其他名称关联,请将元 素的entity-schema <form> 属性设置为架构键的名称。 为了说明输入表单的结构,让我们使用“cus:recipient”示例架构描述一个界面:
<srcSchema name="recipient" namespace="cus">
  <enumeration name="gender" basetype="byte">    
    <value name="unknown" label="Not specified" value="0"/>    
    <value name="male" label="Male" value="1"/>   
    <value name="female" label="Female" value="2"/>   
  </enumeration>

  <element name="recipient">
    <attribute name="email" type="string" length="80" label="Email" desc="E-mail address of recipient"/>
    <attribute name="birthDate" type="datetime" label="Date"/>
    <attribute name="gender" type="byte" label="Gender" enum="gender"/>
  </element>
</srcSchema>

基于示例架构的输入表单:
<form name="recipient" namespace="cus">
  <input xpath="@gender"/>
  <input xpath="@birthDate"/>
  <input xpath="@email"/>
</form>

编辑控件的描述从根元素开 <form> 始。 在元素中输入编辑控 <input> 件,该元素的 ​xpath属性包含该字段在其架构中的路径。
编辑控件自动适应相应的数据类型并使用架构中定义的标签。
您可以通过向元素添加标签属性来使其数据架构中定义 的标签 过载 <input> : <input label="E-mail address" xpath="@name" />
默认情况下,每个字段都显示在一行上,并根据数据类型占用所有可用空间。

格式化

控件的布局与HTML表中使用的布局类似,可将控件分为几列、交错元素或指定可用空间的占用。 但是,记住,格式只允许您按比例将区域分成若干组;不能为对象指定固定尺寸。
要在两列中显示上述示例的控件,请执行以下操作:
<form name="recipient" namespace="cus">
  <container colcount="2">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email"/>
  </container>
</form>

<container> 有colcount属性的元 ,允许您将子控件的显示强制显示到两列上。
件上的colspan 属性按值中输入的列数扩展控件:
<form name="recipient" namespace="cus">
  <container colcount="2">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
</form> 

通过填充 type="frame"属性 ,容器在子控件周围添加一个帧,标签属性中包含 标签 :
<form name="recipient" namespace="cus">
  <container colcount="2" type="frame" label="General">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
</form>

<static> 素可用于格式化输入表单:
<form name="recipient" namespace="cus">
  <static type="separator" colspan="2" label="General"/>
  <input xpath="@gender"/>
  <input xpath="@birthDate"/>
  <input xpath="@email" colspan="2"/>
  <static type="help" label="General information about recipient with date of birth, gender, and e-mail address." colspan="2"/>
</form>

具有 <static> separator类型的标 签允许您添加分隔符栏,其标签包含在标签属 性中 ​。
使用带有帮助类型的标 <static> 记添加了帮助文本。 文本的内容在标签属性中 输入

容器

容器可让您对一组控件进行分组。 它们由元素表 <container> 示。 上面使用它们设置多列控件的格式。
通过 的xpath 属性 <container> 可简化子控件的引用。 控件的引用随后会相对于父级 <container> 控件。
不带“xpath”的容器的示例:
<container colcount="2">
  <input xpath="location/@zipCode"/>
  <input xpath="location/@city"/>
</container>

例如,在名为“location”的元素中添加了“xpath”:
<container colcount="2" xpath="location">
  <input xpath="@zipCode"/>
  <input xpath="@city"/>
</container>

容器类型

容器用于使用在页面中格式化的一组字段来构造复杂控件。

Tab容器

制表符容器可以格式化页面中的数据,这些页面可以通过制表符访问。
<container type="notebook">
  <container colcount="2" label="General">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
  <container colcount="2" label="Location">
    ...
  </container>
</container>

主容器由type=" notebook"属性定义 。 子容器中声明了选项卡,标签的标签会从标签属性中填
式="down|up (默认) "功能强制选项卡标签在控件下方或控件上方的垂直位置。 此功能是可选的。 <container style="down" type="notebook"> ... </container>

图标列表

此容器显示一个垂直图标栏,通过该图标栏可选择要显示的页面。
<container type="iconbox">
  <container colcount="2" label="General" img="xtk:properties.png">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
  <container colcount="2" label="Location" img="nms:msgfolder.png">
    ...
  </container>
</container>

主容器由type="iconbox" 属性定义 。 与图标关联的页面在子容器中声明。 图标的标签将从标签属性中填
页面的图标会从属性中填充 img="<image>" ,其中 <image> 是与图像的键相对应的名称,该键由名称和命名空间组成(例如,“xtk:properties.png”)。
这些图像可从节点获 Administration > Configuration > Images 得。

可见性容器

您可以通过动态条件遮罩一组控件。
此示例说明了控件对“性别”字段值的可见性:
<container type="visibleGroup" visibleIf="@gender=1">
  ...
</container>
<container type="visibleGroup" visibleIf="@gender=2">
  ...
</container>

可见性容器由属性 type="visibleGroup"定义 。 visibleIf 属性包含 visibility条件。
条件语法示例:
  • visibleIf="@email='peter.martinezATneeolane.net'" :测试字符串类型数据的等同性。 比较值必须用引号引起来。
  • visibleIf="@gender >= 1和@gender != 2" :条件。
  • visibleIf="@boolean1==true或@boolean2==false" :测试布尔字段。

启用容器

此容器允许您从动态条件启用或禁用一组数据。 禁用控件可阻止编辑它。 以下示例说明了如何从“性别”字段的值启用控件:
<container type="enabledGroup" enabledIf="@gender=1">
  ...
</container>
<container type="enabledGroup" enabledIf="@gender=2">
  ...
</container>

启用容器由 type="enabledGroup"属性定义 。 enabledIf 属性包含 激活条件。

内存列表控件

内存列表允许您使用列表数据预加载来编辑集合元素。 无法过滤或配置此列表。
这些列表用于XML映射的集合元素或低容量链接。

列列表

此控件显示可编辑的列列表,其中包含“添加”和“删除”按钮的工具栏。
<input xpath="rcpEvent" type="list">
  <input xpath="@label"/>
  <input xpath="@date"/>
</input>

必须使用 type="list"属性填充列表控件 ,并且列表的路径必须引用集合元素。
列在列表的子标 <input> 记中声明。 列标签和大小可以强制使用 label 和colSize属 性。
ordered="true"属性添加到数据架构中的集合元素时 ,会自动添加排序箭头。
工具栏按钮可以水平对齐:
<input nolabel="true" toolbarCaption="List of events" type="list" xpath="rcpEvent" zoom="true">
  <input xpath="@label"/>
  <input xpath="@date"/>
</input>

具栏Caption 属性强制工具栏的水平对齐方式,并在列表上方输入标题。

放大列表

可以在单独的编辑表单中输入列表中数据的插入和编辑操作。
<input nolabel="true" toolbarCaption="List of events" type="list" xpath="rcpEvent" zoom="true" zoomOnAdd="true">
  <input xpath="@label"/>
  <input xpath="@date"/>

  <form colcount="2" label="Event">
    <input xpath="@label"/>
    <input xpath="@date"/>
  </form>
</input>

编辑表单是从列表定义的元 <form> 素中完成的。 其结构与输入形式相同。 当列 Detail 表标记上的 zoom="true"属性完成时 ,将自动添 <input> 加按钮。 此属性允许您启动选定行的编辑表单。
添加 ​zoomOnAdd="true"属性会强制在插入列表元素时调用编辑表单。

列表属性

  • noToolbar :隐藏工具栏(值为“true”)
  • toolbarCaption :过载工具栏标签
  • 工具栏对齐 :修改工具栏的位置(可能的值:"vertical"|"horizontal")
  • img :显示与列表关联的图像
  • 表单 :过载目标元素的编辑表单
  • 缩放 :添加用 Zoom 于编辑目标元素的按钮
  • zoomOnAdd :在添加的
  • xpathChoiceTarget :此外,在输入的链接上启动选择表单

不可编辑的字段

要显示字段并防止其被编辑,请使用标 <value> 签或完成标 签上的readOnly="true "属 <input> 性。
“性别”字段示例:
<value value="@gender"/>
<input xpath="@gender" readOnly="true"/>

单选按钮

单选按钮可让您从多个选项中进行选择。 标记 <input> 用于列出可能的选项,且checkedValue属 ​性指定与选项关联的值。
“性别”字段示例:
<input type="RadioButton" xpath="@gender" checkedValue="0" label="Choice 1"/>
<input type="RadioButton" xpath="@gender" checkedValue="1" label="Choice 2"/>
<input type="RadioButton" xpath="@gender" checkedValue="2" label="Choice 3"/>

复选框

复选框反映布尔状态(无论是否已选中)。 默认情况下,此控件由“Boolean”(true/false)字段使用。 默认值为0或1的变量可与此按钮关联。 此值可以通过checkValue属性 过载
<input xpath="@boolean1"/>
<input xpath="@field1" type="checkbox" checkedValue="Y"/>

表达式字段

表达式字段会从表达式动态更新字段;标记 <input> xpath属性一起使用,以输入要更新的字段的路径和包含更新表达式 的expr ​属性。
<!-- Example: updating the boolean1 field from the value contained in the field with path /tmp/@flag -->
<input expr="Iif([/tmp/@flag]=='On', true, false)" type="expr" xpath="@boolean1"/>
<input expr="[/ignored/@action] == 'FCP'" type="expr" xpath="@launchFCP"/>

表单的上下文

输入表单的执行初始化包含被编辑实体数据的XML文档。 此文档表示表单的上下文,并可用作工作区。

更新上下文

要修改表单的上下文,请使用标 <set expr="<value>" xpath="<field>"/> 签,其中是目 <field> 标字段, <value> 是更新表达式或值。
标记的使用示 <set> 例:
  • <set expr="'Test'" xpath="/tmp/@test" /> :将“测试”值放在临时位置/tmp/@test1
  • <set expr="'Test'" xpath="@lastName" /> :使用“Test”值更新“lastName”属性上的实体
  • <set expr="true" xpath="@boolean1" /> :将“boolean1”字段的值设置为“true”
  • <set expr="@lastName" xpath="/tmp/@test" /> :使用“lastName”属性的内容进行更新
在通过和标签初始化和关闭表单时,可以更新表单的上 <enter> 下文 <leave>
<form name="recipient" namespace="cus">
  <enter>
    <set...
  </enter>
  ...
  <leave>
    <set...
  </leave>
</form>

<enter> 标记 <leave> 可用于页面(“笔记本” <container> 和“iconbox”类型)。

表达语言

可以在表单定义中使用宏语言来执行条件测试。
如果 <if expr="<expression>" /> 验证了表达式,则标记将执行在标记下指定的指令:
<if expr="([/tmp/@test] == 'Test' or @lastName != 'Doe') and @boolean2 == true">
  <set xpath="@boolean1" expr="true"/>
</if>

与标 <check expr="<condition>" /> 签组合的标签可 <error> 以阻止对表单的验证,并在条件不满足时显示错误消息:
<leave>
  <check expr="/tmp/@test != ''">
    <error>You must populate the 'Test' field!</error> 
  </check>
</leave>

奇才队

向导会指导您完成页面形式的一组数据输入步骤。 在验证表单时,将保存输入的数据。
向导具有以下结构:
<form type="wizard" name="example" namespace="cus" img="nms:rcpgroup32.png" label="Wizard example" entity-schema="nms:recipient">
  <container title="Title of page 1" desc="Long description of page 1">
    <input xpath="@lastName"/>
    <input xpath="comment"/>
  </container>
  <container title="Title of page 2" desc="Long description of page 2">
    ...
  </container>
  ...
</form>

元素中存 在type="wizard" ,这 <form> 样您就可以在表单构造中定义向导模式。 这些页面是从元 <container> 素(元素的子元素)中完 <form> 成的。 页面 <container> 的元素会填充标题的标题属性,并且desc会在页面标题下显示说明。 将自 Previous 动添 Next 加这些和按钮以允许在页面之间浏览。
该按 Finish 钮保存输入的数据并关闭表单。

SOAP方法

可以从页面结尾的已填充标 <leave> 签启动SOAP方法执行。
<soapcall> 签包含对具有以下输入参数的方法的调用:
<soapCall name="<name>" service="<schema>">
  <param type="<type>" exprIn="<xpath>"/>  
  ...
</soapCall>

服务的名称及其实现方案通过标签的名 和服务属性输 <soapcall> 入。
在标签下的元素上描述 <param> 了输入参 <soapcall> 数。
必须通过type属性指定参数 类型 。 可能的类型如下:
  • 字符串 :字符串
  • boolean :Boolean
  • 字节 :8位整数
  • short :16位整数
  • long :32位整数
  • short :16位整数
  • double :双精度浮点数
  • DOMElement :元素类型节点
exprIn 属性 包含要作为参数传递的数据的位置。
示例 :
<leave>
  <soapCall name="RegisterGroup" service="nms:recipient">         
    <param type="DOMElement" exprIn="/tmp/entityList"/>         
    <param type="DOMElement" exprIn="/tmp/choiceList"/>         
    <param type="boolean"    exprIn="true"/>       
  </soapCall>
</leave>