[也适用于v8]{class="badge positive" title="也适用于Campaign v8"}
编辑表单 editing-forms
概述
营销人员和操作员使用输入表单来创建、修改和预览记录。 Forms显示信息的可视化表示形式。
您可以创建和修改输入表单:
- 您可以修改默认提供的出厂输入表单。 工厂输入表单基于工厂数据架构。
- 您可以根据定义的数据架构创建自定义输入表单。
Forms是xtk:form
类型的实体。 您可以在xtk:form
架构中查看输入表单结构。 要查看此架构,请从菜单中选择 Administration > Configuration > Data schemas。 阅读有关窗体结构的更多信息。
要访问输入表单,请从菜单中选择 Administration> Configuration >Input forms:
要设计表单,请在XML编辑器中编辑XML内容:
要预览表单,请单击 Preview 选项卡:
表单类型
您可以创建不同类型的输入表单。 表单类型决定了用户如何在表单中导航:
容器
在表单中,您可以将容器用于各种目的:
- 在表单中整理内容
- 定义对输入字段的访问权限
- 在其他表单中嵌套表单
组织内容
使用容器在表单中整理内容:
- 您可以将字段分组为多个部分。
- 您可以将页面添加到多页面表单。
要插入容器,请使用<container>
元素。 了解更多信息。
组字段
使用容器将输入字段分组为有组织的部分。
要将节插入窗体,请使用此元素: <container type="frame">
。 或者,若要添加节标题,请使用label
属性。
语法: <container type="frame" label="
section_title"> […] </container>
在此示例中,容器定义了 Creation 部分,该部分包含 Created by 和 Name 输入字段:
<form _cs="Coupons (nms)" entitySchema="xtk:form" img="xtk:form.png" label="Coupons"
name="coupon" namespace="nms" type="default" xtkschema="xtk:form">
<input xpath="@code"/>
<input xpath="@type"/>
<container label="Creation" type="frame">
<input xpath="createdBy"/>
<input xpath="createdBy/@name"/>
</container>
</form>
将页面添加到多页面表单
对于多页面表单,请使用容器创建表单页面。
此示例显示表单的 常规 和 详细信息 页面的容器:
<container img="ncm:book.png" label="General">
[…]
</container>
<container img="ncm:detail.png" label="Details">
[…]
</container>
定义对字段的访问权限
使用容器定义可见内容并定义对字段的访问权限。 您可以打开或关闭字段组。
嵌套表单
使用容器将表单嵌套在其他表单中。 了解更多信息。
对图像的引用
若要查找图像,请从菜单中选择 Administration > Configuration > Images。
要将图像与表单中的元素(例如图标)相关联,可以添加对图像的引用。 例如,在<container>
元素中使用img
特性。
语法: img="
namespace
:
filename
.
extension
"
此示例显示对ncm
命名空间中的book.png
和detail.png
图像的引用:
<container img="ncm:book.png" label="General">
[…]
</container>
<container img="ncm:detail.png" label="Details">
[…]
</container>
这些图像用于用户单击以导航多页表单的图标:
创建简单表单 create-simple-form
要创建表单,请执行以下步骤:
-
从菜单中选择 Administration > Configuration > Input forms。
-
单击列表右上角的 New 按钮。
-
指定表单属性:
-
指定表单名称和命名空间。
表单名称和命名空间可以与相关数据架构匹配。 此示例显示了
cus:order
数据架构的表单:code language-xml <form entitySchema="xtk:form" img="xtk:form.png" label="Order" name="order" namespace="cus" type="iconbox" xtkschema="xtk:form"> […] </form>
或者,您可以在
entity-schema
属性中显式指定数据架构。code language-xml <form entity-schema="cus:stockLine" entitySchema="xtk:form" img="xtk:form.png" label="Stock order" name="stockOrder" namespace="cus" xtkschema="xtk:form"> […] </form>
-
指定要在表单上显示的标签。
-
(可选)指定表单类型。 如果未指定表单类型,则默认使用控制台屏幕类型。
如果您设计的是多页面表单,则可以省略
<form>
元素中的表单类型,并在容器中指定类型。
-
-
单击 Save。
-
插入表单元素。
例如,要插入输入字段,请使用
<input>
元素。 将字段引用的xpath
属性设置为XPath表达式。 了解更多信息。此示例显示基于
nms:recipient
架构的输入字段。code language-xml <input xpath="@firstName"/> <input xpath="@lastName"/>
-
如果表单基于特定的架构类型,则可以查找此架构的字段:
-
单击 Insert > Document fields。
-
选择字段并单击 OK。
-
-
(可选)指定字段编辑器。
默认字段编辑器与每种数据类型相关联:
- 对于日期类型字段,该表单会显示输入日历。
- 对于枚举类型字段,该表单会显示一个选择列表。
您可以使用以下字段编辑器类型:
table 0-row-2 1-row-2 2-row-2 3-row-2 字段编辑器 表单属性 单选按钮 type="radiobutton"
复选框 type="checkbox"
编辑树 type="tree"
阅读有关内存列表控件的详细信息。
-
(可选)定义对字段的访问权限:
table 0-row-3 1-row-3 2-row-3 3-row-3 元素 属性 说明 <input>
read-only="true"
提供对字段的只读访问权限 <container>
type="visibleGroup" visibleIf="
edit-expr"
有条件地显示一组字段 <container>
type="enabledGroup" enabledIf="
edit-expr"
有条件地启用一组字段 例如:
code language-xml <container type="enabledGroup" enabledIf="@gender=1"> […] </container> <container type="enabledGroup" enabledIf="@gender=2"> […] </container>
-
(可选)使用容器将字段分组为多个部分。
code language-xml <container type="frame" label="Name"> <input xpath="@firstName"/> <input xpath="@lastName"/> </container> <container type="frame" label="Contact details"> <input xpath="@email"/> <input xpath="@phone"/> </container>
创建多页表单 create-multipage-form
您可以创建多页面表单。 还可以将表单嵌套在其他表单中。
创建iconbox
表单
使用iconbox
表单类型在表单左侧显示图标,这些图标会将用户引导至表单中的不同页面。
要将现有表单的类型更改为iconbox
,请执行以下步骤:
-
将
<form>
元素的type
属性更改为iconbox
:code language-xml <form […] type="iconbox">
-
为每个表单页面设置一个容器:
-
添加
<container>
元素作为<form>
元素的子项。 -
要定义图标的标签和图像,请使用
label
和img
属性。code language-xml <form entitySchema="xtk:form" name="Service provider" namespace="nms" type="iconbox" xtkschema="xtk:form"> <container img="xtk:properties.png" label="General"> <input xpath="@label"/> <input xpath="@name"/> […] </container> <container img="nms:msgfolder.png" label="Details"> <input xpath="@address"/> […] </container> <container img="nms:supplier.png" label="Services"> […] </container> </form>
或者,从现有
<container>
元素中删除type="frame"
特性。 -
创建笔记本表单
使用notebook
表单类型在表单顶部显示选项卡,这些选项卡会将用户引导至不同的页面。
要将现有表单的类型更改为notebook
,请执行以下步骤:
-
将
<form>
元素的type
属性更改为notebook
:code language-xml <form […] type="notebook">
-
为每个表单页面添加一个容器:
- 添加
<container>
元素作为<form>
元素的子项。 - 要定义图标的标签和图像,请使用
label
和img
属性。
code language-xml <form entitySchema="xtk:form" name="Service provider" namespace="nms" type="notebook" xtkschema="xtk:form"> <container label="General"> <input xpath="@label"/> <input xpath="@name"/> […] </container> <container label="Details"> <input xpath="@address"/> […] </container> <container label="Services"> […] </container> </form>
或者,从现有
<container>
元素中删除type="frame"
特性。 - 添加
嵌套表单
您可以将表单嵌套在其他表单中。 例如,可以将笔记本表单嵌套在iconbox表单中。
嵌套级别控制导航。 用户可以向下钻取到子表单。
若要将表单嵌套在另一个表单中,请插入一个<container>
元素并将type
属性设置为表单类型。 对于顶级表单,您可以在外部容器或<form>
元素中设置表单类型。
示例
此示例显示了一个复杂的形式:
-
顶级表单是iconbox表单。 此表单包含两个标记为 常规 和 详细信息 的容器。
因此,外部表单在顶层显示 常规 和 详细信息 页面。 要访问这些页面,请单击表单左侧的图标。
-
子表单是嵌套在 常规 容器中的笔记本表单。 子表单包含两个标记为 Name 和 Contact 的容器。
<form _cs="Profile (nms)" entitySchema="xtk:form" img="xtk:form.png" label="Profile" name="profile" namespace="nms" xtkschema="xtk:form">
<container type="iconbox">
<container img="ncm:general.png" label="General">
<container type="notebook">
<container label="Name">
<input xpath="@firstName"/>
<input xpath="@lastName"/>
</container>
<container label="Contact">
<input xpath="@email"/>
</container>
</container>
</container>
<container img="ncm:detail.png" label="Details">
<input xpath="@birthDate"/>
</container>
</container>
</form>
因此,外部表单的 常规 页面显示 名称 和 联系人 选项卡。
若要将表单嵌套在另一个表单中,请插入一个<container>
元素并将type
属性设置为表单类型。 对于顶级表单,您可以在外部容器或<form>
元素中设置表单类型。
示例
此示例显示了一个复杂的形式:
-
顶级表单是iconbox表单。 此表单包含两个标记为 常规 和 详细信息 的容器。
因此,外部表单在顶层显示 常规 和 详细信息 页面。 要访问这些页面,请单击表单左侧的图标。
-
子表单是嵌套在 常规 容器中的笔记本表单。 子表单包含两个标记为 Name 和 Contact 的容器。
<form _cs="Profile (nms)" entitySchema="xtk:form" img="xtk:form.png" label="Profile" name="profile" namespace="nms" xtkschema="xtk:form">
<container type="iconbox">
<container img="ncm:general.png" label="General">
<container type="notebook">
<container label="Name">
<input xpath="@firstName"/>
<input xpath="@lastName"/>
</container>
<container label="Contact">
<input xpath="@email"/>
</container>
</container>
</container>
<container img="ncm:detail.png" label="Details">
<input xpath="@birthDate"/>
</container>
</container>
</form>
因此,外部表单的 常规 页面显示 名称 和 联系人 选项卡。
修改工厂输入表单 modify-factory-form
要修改出厂表单,请执行以下步骤:
-
修改工厂输入表单:
- 从菜单中选择 Administration > Configuration > Input forms。
- 选择输入表单并修改它。
您可以扩展工厂数据架构,但不能扩展工厂输入表单。 我们建议您直接修改出厂输入表单,而无需重新创建它们。 在软件升级期间,工厂输入表单中的修改将与升级合并。 如果自动合并失败,您可以解决冲突。 了解更多信息。
例如,如果使用附加字段扩展工厂模式,则可以将此字段添加到相关的工厂表单。
验证表单 validate-forms
您可以在表单中包含验证控件。
授予对字段的只读访问权限
要授予对字段的只读访问权限,请使用readOnly="true"
属性。 例如,您可能希望显示记录的主键,但具有只读访问权限。 了解更多信息。
在此示例中,nms:recipient
架构的主键(iRecipientId
)以只读访问权限显示:
<value xpath="@iRecipientId" readOnly="true"/>
检查必填字段
您可以检查必需信息:
- 为必填字段使用
required="true"
属性。 - 使用
<leave>
节点检查这些字段并显示错误消息。
在此示例中,需要电子邮件地址,如果用户未提供此信息,则会显示错误消息:
<input xpath="@email" required="true"/>
<leave>
<check expr="@email!=''">
<error>The email address is required.</error>
</check>
</leave>
验证值
您可以使用JavaScript SOAP调用从控制台验证表单数据。 使用这些调用进行复杂验证,例如,根据授权值列表检查值。 了解更多信息。
-
在JS文件中创建验证函数。
例如:
code language-js function nms_recipient_checkValue(value) { logInfo("checking value " + value) if (…) { logError("Value " + value + " is not valid") } return 1 }
在此示例中,函数名为
checkValue
。 此函数用于检查nms
命名空间中的recipient
数据类型。 将记录正在检查的值。 如果该值无效,则会记录一条错误消息。 如果该值有效,则返回值1。您可以使用返回值修改表单。
-
在表单中,将
<soapCall>
元素添加到<leave>
元素。在此示例中,SOAP调用用于验证
@valueToCheck
字符串:code language-xml <form name="recipient" (…)> (…) <leave> <soapCall name="checkValue" service="nms:recipient"> <param exprIn="@valueToCheck" type="string"/> </soapCall> </leave> </form>
在此示例中,使用了
checkValue
方法和nms:recipient
服务:- 服务是命名空间和数据类型。
- 方法是函数名称。 名称区分大小写。
同步执行调用。
将显示所有例外。 如果您使用
<leave>
元素,则在验证输入的信息之前,用户无法保存表单。
此示例说明如何在表单中进行服务调用:
<enter>
<soapCall name="client" service="c4:ybClient">
<param exprIn="@id" type="string"/>
<param type="boolean" xpathOut="/tmp/@count"/>
</soapCall>
</enter>
在此示例中,输入是一个ID,它是一个主键。 当用户填写此ID的表单时,将会使用此ID作为输入参数进行SOAP调用。 输出是写入此字段的布尔值: /tmp/@count
。 您可以在表单内使用此布尔值。 阅读有关表单上下文的更多信息。