在 InfoPath 2010 中添加公式和函数
应用对象
公式使你能够从创建的规则中获取更多内容,而不是使用基本的预定义规则。 例如,公式用于计算当前或未来日期,甚至连接文本等。
本文内容
概述
公式是 XPath (XML 路径语言) 表达式,其中包含用于计算和显示其他值的值、字段或组、函数和运算符。 可以使用公式为字段创建新值,并在绑定到该字段的控件中显示该值。 公式可按如下所示使用:
根据在设计模板时指定的值或用户填写表单模板时输入的值计算数学值。
根据使用公式计算的值运行规则。
函数是基于计算结果返回值的表达式。 函数中使用的值称为参数。 除了某些特定于 InfoPath 的函数外,还可以使用 InfoPath 中包含的标准 XPath 1.0 函数。 函数由以下三个部分组成:
- 名字 函数的名称通常提供有关函数将执行的操作的提示。
- 返回值 函数的结果。
- 参数 函数用于执行计算的值。
函数可能需要参数来返回值。 如果函数需要参数,则需要知道需要多少个参数以及每个参数的数据类型。 如果提供了错误的所需参数数或类型,则函数将不起作用。
下图显示了函数、表达式和公式之间的关系。
添加计算值控件
可以使用计算值控件显示只读文本,在窗体上显示另一个控件的值,以及创建基于 XPath 表达式的公式。 例如,如果要开发支出跟踪表单模板,可以添加计算值控件以显示已输入的支出总额。
注意
计算值控件仅显示数据而不存储数据,因此仅当不想保存其值或在另一个公式中引用它时,才应使用计算值控件。
在表单模板中,将光标置于要插入控件的位置。
在“ 开始 ”选项卡上的“ 控件 ”组中,单击 计算值 控件。
在“ 插入计算值 ”对话框中,执行以下操作之一:
若要直接在计算值控件中键入文本或 XPath 表达式,请在 “XPath ”框中键入 。
若要插入公式,请单击“ 编辑公式
”,然后在“ 公式 ”文本框中输入所需的公式,并根据需要使用以下项:- 若要在公式中插入字段或组,请单击“ 插入字段或组”,在“选择字段或组”对话框中单击 字段或组 ,然后单击“ 确定”。
- 若要在公式中插入函数,请单击“ 插入函数”,在“ 插入函数 ”对话框中选择该函数,然后单击“ 确定”。
如果函数需要参数,请在“ 插入函数 ”对话框中选择函数,单击“ 确定”,然后在 “公式 ”文本中双击指示的位置并选择所需的参数,然后单击“ 确定”。 - 若要在公式中插入值或数学运算符,请在“ 公式 ”框中键入数学运算的值或符号。
数学运算符包括加 (+) 、减 ( ) 、乘 (*) 和除 (/) 。
数学公式通常依赖于整数或十进制值作为参数。 若要避免公式中出现空白值,请在“ 文件 ”选项卡上单击“ 窗体选项” ,然后选择“ 高级 ”,并确保选中“ 将空白值视为零 ”。
向控件添加公式
虽然可以使用计算值控件来显示公式的结果,但并不局限于使用计算值控件。 还可以使用公式设置其他控件(如文本框)的默认值。 可通过两种方式设置控件的默认值。 可以使用静态默认值,只需在“字段”或“组属性”对话框的“值”字段中输入所需的值,也可以使用公式基于表单中的其他值设置字段的默认值。 执行以下操作以基于公式设置字段的默认值:
选择要向其添加公式的控件,然后在 “控件工具”下的“ 属性” 选项卡上的“ 属性” 组中,单击“ 默认值”。
单击“值”框旁边的“插入公式
”。在“ 公式 ”文本框中输入所需的公式,根据需要使用以下公式:
若要在公式中插入字段或组,请单击“ 插入字段或组”,在“选择字段或组”对话框中单击 字段或组 ,然后单击“ 确定”。
若要在公式中插入函数,请单击“ 插入函数”,在“ 插入函数 ”对话框中选择该函数,然后单击“ 确定”。
如果函数需要参数,请在“ 插入函数 ”对话框中选择函数,单击“ 确定”,然后在 “公式 ”文本中双击指示的位置并选择所需的参数,然后单击“ 确定”。若要在公式中插入值或数学运算符,请在“ 公式 ”框中键入数学运算的值或符号。
数学运算符包括加 (+) 、减 ( ) 、乘 (*) 和除 (/) 。提示
数学公式通常依赖于整数或十进制值作为参数。 若要避免公式中的空白值,请在“ 文件 ”选项卡上单击“ 窗体选项”,然后选择“ 高级”。 确保选中“ 将空白值视为零 ”。
若要将公式编辑为 XPath 公式,请选择“编辑 XPath (高级) 检查”框,这会将公式更改为公式的 XPath 表达式版本。
若要为正确的语法检查公式,请单击“验证公式”按钮。 如果公式包含错误:
单击“Microsoft InfoPath”对话框中的“显示详细信息”,查看公式中的错误。 以下是解决这些错误的一些建议:
- 如果在公式中使用函数,请验证是否为函数使用了正确的参数。 某些函数需要字段或组,而其他函数需要指定的值作为参数。
- 如有必要,请删除公式并重新键入公式,以确保正确键入。
- 单击“确定”。
- 如果要在字段所基于的值更改时更新字段的默认值,请选择“重新计算公式时刷新值检查”框。 如果执行此操作,请单击“ 确定”,然后在“ 控件工具”下的“ 属性” 选项卡上的“ 属性” 组中,单击“ 控件属性”。 单击“显示”选项卡,然后选择“只读检查”框。
在规则中使用公式
在 验证、 格式设置或 操作 规则中指定条件时,可以使用公式来控制条件。 为此,可以在将规则分配给控件或表单模板时,从“条件”对话框的第三个下拉列表中选择“使用公式”。
日期和时间函数
addDays
向日期或日期和时间添加天数。
语法
addDays (日期、天)
| 参数 | 说明 |
|---|---|
| date | 第二个参数中的天数将添加到此参数中的日期。 此参数可以是日期 (日期) ,也可以是日期和时间 (dateTime) 数据类型。 |
| 为 0 | 要添加到第一个参数中的日期的天数。 此参数必须是整数 (整数) 数据类型。 如果在此参数中使用负数,则返回值为较早日期。 |
示例
您希望表单模板中的字段包含自今天日期起 60 天的日期。 表单模板包含名为 fldToday 的字段,默认值为今天的日期。 若要使用此函数计算新日期,请在新日期字段中使用以下公式:
addDays (fldToday, 60)
addSeconds
向时间或日期和时间添加秒。
语法
addSeconds (time、seconds)
| 参数 | 说明 |
|---|---|
| time | 日期和时间值或时间值,它是对表单模板上另一个字段的引用,或者是日期或时间函数的结果,例如现在 () 或今天 () 。 第二个参数中的秒数将添加到此参数中的时间。 此参数可以是日期 (日期) ,也可以是日期和时间 (dateTime) 数据类型。 如果是 Time 数据类型,则将返回 Time 数据类型。 如果它是日期数据类型,则将返回日期和时间数据类型。 |
| seconds | 要添加到第一个参数中的日期和时间值或时间值的秒数。 此参数中的字段必须是整数 (整数) 数据类型。 如果在此参数中使用负数,则返回值为较早的日期和时间或更早的时间。 |
示例
表单模板包含一个名为 fldCurrentTime 的字段,该字段使用当前时间作为默认值,另一个字段使用公式中的 addSeconds 函数显示距当前时间 120 秒的时间。 若要使用此函数计算新的时间值,请在第二个字段中输入以下公式:
addSeconds (fldCurrentTime, 120)
资源
返回当前系统日期和时间。
如果只想返回当前日期,请使用 today 函数。
语法
现在 ()
此函数不使用参数。
示例
若要获取创建基于表单模板的表单的日期和时间,请在字段中使用以下公式:
现在 ()
今天
返回当前系统日期。 对于 SharePoint 列表日期字段,请使用 now () 函数。
如果希望同时返回日期和时间,请使用 now 函数。
语法
今天 ()
此函数不使用参数。
示例
若要获取基于表单模板的表单的创建日期,请在字段中使用以下公式:
今天 ()
字段函数
Count
计算字段或组的实例数。
语法
计数 (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 窗体中要计数的重复字段或重复组的名称。 |
示例
您正在设计一个表单模板,其表单将由供应商用来报告其产品和库存。 表单模板包含供应商提交的产品的名为 grpProduct 的重复组。 每个组包含有关产品及其库存水平的信息。 当供应商在基于此表单模板的表单中添加产品时,InfoPath 会创建重复组的新实例。
表单模板在数据源中有一个字段,其中包含供应商提交的产品数。 若要自动计算供应商提交的产品数(即重复组 grpProduct 的实例数),请在“产品数量”字段中使用以下公式:
count (grpProduct)
姓氏
返回重复字段或组的最后一个匹配项。
注意
如果要设计与浏览器兼容的表单模板,则此函数不会显示在“插入函数”对话框的“函数”列表中。
语法
field_name[last () ]
尽管函数本身没有任何必需的参数,但可以将此函数用作指定字段名称的谓词。
示例
你正在设计一个表单模板,供供应商填写以报告其产品库存。 表单模板具有与 Web 服务的数据连接,该服务具有一种用于检查供应商所有产品的产品信息是否已完成的方法。 方法需要供应商提交的产品列表中的最后一个产品。
产品信息存储在名为 grpProduct 的重复组的不同字段中。 当供应商将产品添加到表单时,InfoPath 会添加一个名为 grpProduct 的新重复组。 如果供应商报告多个产品,则表单的数据源将包含 grpProduct 重复组的多个实例。
为了确保向 Web 服务提交正确的信息,请添加一个字段,其中包含有关供应商产品组中最后一个产品的信息。 若要将该字段配置为自动检索最后一个产品,请使用以下公式作为最后一个产品字段的默认值:
grpProduct[last () ]
local-name
返回字段或组的本地名称。
注意
- 如果参数是重复字段或重复组,则函数返回第一个重复字段或重复组的值。
- 当用户填写 Web 浏览器表单时,使用此函数的公式会将表单数据发送到服务器,以获取此函数的返回值。
语法
local-name (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 要返回其本地名称属性的字段的名称。 |
示例
你正在设计用于许可申请的表单模板。 表单模板具有与 Web 服务中方法的数据连接。 此方法需要承包商许可证号字段的本地名称属性的值。 许可证编号字段的名称为 fldLicenseNumber。
你有一个字段,该字段将包含本地名称属性的值。 若要自动检索许可证号字段的本地名称属性的值,请使用以下公式作为将包含本地名称属性值的字段的默认值:
local-name (fldLicenseNumber)
名称
返回字段或组的名称和命名空间前缀。
注意
- 如果参数是重复字段或重复组,则函数返回窗体中第一个重复字段或重复组的名称和前缀。
- 当用户基于启用浏览器的表单模板填写表单时,使用此函数的公式会将表单数据发送到服务器,以获取此函数的返回值。
语法
name (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 要返回其命名空间前缀和名称的字段的名称。 |
示例
你正在设计用于许可申请的表单模板。 表单模板具有与 Web 服务中方法的数据连接。 此方法需要承包商许可证号字段的名称属性。 许可证编号字段的名称为 fldLicenseNumber。
你有一个字段,该字段将包含 name 属性的值。 若要自动检索 name 属性的值,请使用以下公式作为字段的默认值:
name (fldLicenseNumber)
namespace-uri
返回字段或组的完整命名空间。
注意
- 如果参数是一组字段或组,则函数返回窗体中第一个字段或组的命名空间。
- 当用户填写 Web 浏览器表单时,使用此函数的公式会将表单数据发送到服务器,以获取此函数的返回值。
语法
namespace-uri (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 要检索其命名空间 URI 的字段的名称。 |
示例
你正在设计用于许可申请的表单模板。 表单模板将数据提交到 Web 服务。 若要基于表单模板处理表单中的数据,Web 服务需要数据源中特定元素字段的命名空间 URI。 表单模板中包含命名空间 URI 数据的字段名为 fldComplete。
你有一个字段,该字段将包含元素字段的命名空间 URI。 若要自动检索命名空间 URI,请使用以下公式作为将包含命名空间 URI 的字段的默认值:
namespace-uri (fldComplete)
位置
返回字段或组相对于同一父组中其他字段或组的索引 (或位置) 。
注意
此函数在 Web 浏览器表单模板中不可用。
语法
位置 ()
示例
你正在设计一个表单模板,供供应商填写以报告其产品库存。 产品信息存储在重复组中的字段中。 重复组绑定到重复表,该表允许供应商添加新的或修改现有产品信息。
在重复表的第一列中,您希望在文本框中显示行号。 若要在供应商将新产品添加到重复表中时自动显示行号,请使用以下公式作为文本框的默认值:
位置 ()
数学函数
包含数学函数的公式通常需要整数或十进制值的参数。 若要确保参数是整数或十进制值而不是 null 值,请单击“文件>窗体选项>高级”,然后确保选中“将空白值视为零检查框。
AVG
计算重复组中的字段中数值的平均值。
注意
重复字段必须是数值数据类型,并且必须包含在组中。
语法
avg (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 要计算其平均值的组中重复字段的名称。 |
示例
您正在设计一个表单模板,其表单将由供应商用来报告其产品和库存。 表单模板包含名为 fldPrice 的重复字段,该字段位于重复组中,其中包含供应商销售的每个产品的相关数据。 组绑定到重复表控件。
表单模板中有一个字段,其中包含该供应商销售的所有产品的平均价格。 若要计算平均价格,请在 字段中对平均价格使用以下公式:
avg (fldPrice)
boolean
如果存在字段或组,则返回 true。 否则返回 false。
即使删除了与字段关联的控件,但该字段仍然存在,也会返回 true。
语法
布尔 (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 此函数要检查的重复字段或重复组。 |
示例
你正在设计一个表单模板,供供应商用来报告其产品库存。 产品信息存储在名为 grpProduct 的重复组中的不同字段中。 每个重复组都包含包含有关每个产品的信息的字段。 如果供应商提供有关七种产品的信息,则表单将包含七个重复组。
重复组绑定到重复表控件,使供应商能够添加新的或修改现有产品信息。 供应商可以在重复表中添加或删除行。
如果用户删除重复表中的所有行,则希望显示一个对话框。 如果重复表控件至少有一行,则向数据源添加一个包含单词“true”的字段,如果重复表控件没有任何行,则添加单词“false”。
在重复表控件中配置规则,以在字段中的值为 false 时显示对话框。 若要自动确定重复表是否至少包含一行,请使用以下公式作为包含单词“true”或“false”的字段的默认值:
boolean (grpProduct)
天花板
将数字向上舍入到最接近的整数。
语法
ceiling (number)
| 参数 | 说明 |
|---|---|
| number | 具有数值的字段的名称。 |
示例
你正在为公司设计费用报表表单模板。 费用提交到具有仅接受整数的参数的 Web 服务。 提交到此参数的支出金额必须舍入到更高的整数值。 费用金额存储在名为 fldExpenseAmount 的字段中,整数值存储在另一个字段中。 若要计算更高的整数值,请使用以下公式作为另一个字段的默认值:
ceiling (fldExpenseAmount)
如果用户基于表单模板创建表单并在 fldExpenseAmount 字段中输入 145.87,则包含公式的字段中的值将为 146。
Eval
返回字段或组的值。 第二个参数定义要为字段或组计算的表达式。 通常,eval 函数嵌套在对字段或组(例如 sum 或 avg)执行操作的函数中。
语法
eval (字段、表达式)
| 参数 | 说明 |
|---|---|
| 字段 | 其值将由第二个参数中的表达式计算的字段或组的名称。 |
| 表达式 | 将应用于第一个参数的表达式。 表达式可以是 XPath 函数,也可以是用双引号 (“) 括起来的表达式。 |
示例
你正在为公司设计费用报表表单模板。 表单模板包含名为 fldTotal 的字段,其中包含费用金额。 fldTotal 字段是名为 grpExpenses 的重复组的一部分。 另一个字段绑定到包含所有费用总和的文本框。 若要在用户输入费用金额时显示所有费用的总和,请在总费用字段中使用以下公式:
eval (grpExpenses,sum (fldTotal) )
false
返回 false。
语法
false ()
此函数不使用参数。
示例
您正在设计一个表单模板,其表单将由承包商用于申请建筑许可证。 表单模板包含两个部分:一个部分用于联系信息,另一个部分用于与建筑许可证相关的信息。 填写此表单时,承包商需要填写联系信息部分,然后才能填写建筑许可证部分。
为此,请创建一个规则,将布尔字段的值设置为 false(如果联系人信息部分中的任何一个字段为空)。 布尔值字段可以具有布尔 true 值或布尔 false 值。 如果布尔字段值为 false,还可以配置条件格式以隐藏包含建筑物许可信息的节控件。
若要隐藏包含建筑物许可信息的字段的节控件,请将规则配置为在“联系人信息”部分中的任何一个字段为空时在布尔字段中运行此函数。
车间
将数字向下舍入到最接近的整数。
语法
floor (number)
| 参数 | 说明 |
|---|---|
| number | 具有数值的字段的名称。 |
示例
你正在为公司设计费用报表表单模板。 费用提交到使用仅接受整数的参数的 Web 服务。 提交到此参数的支出金额必须舍入到较低的整数值。 费用金额存储在名为 fldExpenseAmount 的字段中,整数值存储在另一个字段中。 若要计算较低的整数值,请使用以下公式作为另一个字段的默认值:
floor (fldExpenseAmount)
max
返回字段或组中的最大数字。
语法
最大 (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 组中的重复字段或重复组中要查找其最大值的字段。 |
示例
您正在设计一个表单模板,其表单将由供应商用来报告其产品库存。 表单模板包含一个重复组,其中包含多个字段,这些字段包含有关供应商产品的数据。 重复组中名为 fldPrice 的字段包含产品的价格。
表单模板数据源中的另一个字段将包含该供应商销售的所有产品的最高价格。 若要返回最高价格,请在最高价格字段中使用以下公式:
max (fldPrice)
min
返回字段或组中的最小数字。
语法
min (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 组中的重复字段或重复组中要查找其最大值的字段。 |
示例
您正在设计一个表单模板,其表单将由供应商用来报告其产品库存。 表单模板包含一个重复组,其中包含多个字段,这些字段包含有关供应商产品的数据。 重复组中名为 fldPrice 的字段包含产品的价格。
表单模板数据源中的另一个字段将包含该供应商销售的所有产品的最低价格。 若要返回最低价格,请在“最低价格”字段中使用以下公式:
min (fldPrice)
不执行
如果布尔值为 false 或 null,则返回 true。 如果布尔值为 true 或不为 null,则返回 false。
语法
不 (boolean_value)
| 参数 | 说明 |
|---|---|
| boolean_value | 具有布尔数据类型的字段。 |
示例
您正在设计一个表单模板,其表单将由承包商用于申请建筑许可证。 表单模板有一个部分用于联系信息,另一个部分用于与建筑许可证相关的信息。 填写此表单时,承包商需要填写联系信息部分,然后才能填写建筑许可证部分。
为此,请创建一个规则,将布尔字段的值设置为 false(如果联系人信息部分中的任何一个字段留空)。 布尔值字段可以具有布尔值 true 或布尔值 false。 然后,如果布尔字段值为 false,则使用相同的公式隐藏包含建筑物许可信息的节控件。 若要设置此规则,请使用以下公式将布尔字段设置为 false:
不 (true () )
number
将值转换为数字。
如果参数中的值无法转换为数字,则函数返回 NaN。
语法
number (value)
ArgumentDescription
value 具有要转换为数字的值的字段。
示例
您正在设计一个表单模板,其表单将由承包商用于申请建筑许可证。 表单模板包含一个部分,承包商可在其中输入其业务地址。 若要验证承包商是否输入了有效的地址,请使用与 Web 服务的数据连接来验证地址。 如果地址经过验证,承包商可以将表单提交到 SQL 数据库。 SQL 数据库使用文本字段作为地址号和街道名称。 Web 服务要求地址号为数字数据类型,街道名称为文本数据类型。
若要将数据提交到 Web 服务和 SQL 数据库,需要将地址存储为两种不同的数据类型:
- 若要将地址提交到 Web 服务,地址号必须是数字数据类型,街道名称必须是文本数据类型。
- 若要将地址提交到 SQL 数据库,地址号和街道名称必须是文本数据类型。
你还希望承包商只输入一次他的地址。 若要将地址转换为正确的数据类型并帮助确保承包商只输入一次地址,表单模板包含一个名为 fldAddressNumber 的字段用于输入地址号,另一个字段用于输入街道名称。 这两个字段都配置为文本数据类型。
若要将地址号提交到 Web 服务,需要将 fldAddressNumber 字段中的数据 (存储为文本数据类型) 转换为数值数据类型。 转换为数值数据类型的地址编号值存储在配置为存储数值数据类型的另一个字段中。
若要将地址号从文本数据类型转换为数字数据类型,请使用以下公式作为 fldAddressNumber 字段的默认值:
number (fldAddressNumber)
nz
返回一个字段或组,其中所有空白字段都替换为零 (0) 。
语法
nz (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 要为值检查的字段。 |
示例
你正在设计一个表单模板,供供应商填写以报告其产品库存。 供应商将通过基于表单模板的表单将其产品库存提交到 Web 服务。 Web 服务的方法要求包含数值数据的所有元素都具有数值。 Web 服务拒绝包含空数值元素的窗体。
表单模板包含名为 fldAvailability 的字段,该字段包含与供应商提供此产品的能力相对应的数字。 供应商可以在此字段中输入数字。 为了帮助确保供应商能够将基于表单模板的表单提交到 Web 服务,并在供应商未输入数字时自动将字段的值设置为零,请使用以下公式作为此字段的默认值:
nz (fldAvailability)
台
将数字舍入到最接近的整数。
如果非整数值正好介于两个舍入整数值之间,则返回值是下一个最大的整数值。
语法
round (number)
| 参数 | 说明 |
|---|---|
| number | 包含将使用此公式进行舍入的数字的字段。 |
示例
您正在设计一个表单模板,其表单将由供应商用来报告其产品库存。 表单模板包含一个重复组,其中包含多个字段,其中包含有关供应商产品的数据。 重复组中名为 fldPrice 的字段之一包含产品的价格。
表单模板具有与 Web 服务的提交数据连接。 Web 服务方法要求将每个价格舍入为整数值。 若要将适当的值发送到 Web 服务方法,请向数据源添加重复字段。 此字段使用以下公式将 fldPrice 字段中的价格舍入为整数值:
round (fldPrice)
和
返回字段或组中的所有字段的总和。 每个字段首先转换为数字值。
语法
sum (字段)
| 参数 | 说明 |
|---|---|
| 字段 | 重复组中的字段的名称,或将添加其值的组中的重复字段的名称。 若要从两个不同的组添加字段,请使用联合运算符 (|) 来分隔参数。 例如:求和 ( 字段名称 1 |字段名称 2) 。 |
示例
你正在设计费用报表表单模板。 表单模板有一个包含费用项的组。 每个项的数量存储在名为 fldExpenseAmount 的字段中。 该组绑定到一个重复表,该表将每个支出项显示为一行。 表单模板包含显示总费用的文本框控件。 为了显示总费用,文本框控件包含以下公式:
sum (fldExpenseAmount)
true
返回 true。
语法
true()
此函数不使用参数。
示例
您正在设计一个表单模板,其表单将由承包商用于申请建筑许可证。 表单模板包含一个联系人信息部分,另一个部分包含与建筑许可证相关的信息。 填写此表单时,承包商需要填写联系信息部分,然后才能填写建筑许可证部分。
为此,请创建一个规则,在联系人信息部分中的所有字段都包含数据时,将布尔字段的值设置为 true。 布尔值字段可以具有布尔值 true 或 false。 如果布尔字段值为 true,则显示包含建筑许可信息的节控件。
若要显示包含建筑许可信息的节控件,请将规则配置为在“联系人信息”部分中的所有字段都包含数据时在布尔字段中运行此函数。
文本函数
Concat
将两个或多个文本字符串字段合并为一个文本字符串。
语法
concat (text1, text2, ...)
| 参数 | 说明 |
|---|---|
| text1 | 一个字段,该字段包含要与 argument2 中的文本合并为单行文本的文本。 |
| text2, ... | Ore 或更多其他字段,其中包含要与上一个字段组合的文本。 用逗号分隔文本字段。 |
示例
您正在设计包含名为 fldFirstName 的字段和名为 fldLastName 的字段的表单模板。 将以下公式添加到第三个字段,使其包含文本“此表单已由 <名字><姓氏>填写”。:
concat (“此表单由”,fldFirstName,“,fldLastName,”填写。)
注意
作为文本参数输入的任何实际文本(包括空格或标点符号)都需要插入引号 (“) 。
包含
如果第一个字段或文本字符串包含第二个字段或文本字符串,则返回 true。 否则返回 false。
语法
包含 (within_text、find_text)
| 参数 | 说明 |
|---|---|
| within_text | 包含要搜索的文本的字段。 |
| find_text | 包含用双引号 ( 括起来的文本或文本的字段“) 在第一个参数中搜索。 |
示例
你正在设计一个包含三个文本字段的表单模板。 第一个将允许用户在第一个文本控件(名为 fldText)中输入较长的文本量。 第二个将允许用户输入短段文本,名为 fldFindText。 第三个文本框将第二个文本框与第一个文本框进行比较,并指示第二个字段中的值是否在第一个字段中找到并显示结果。 它将使用以下公式作为默认值:
contains (fldText,fldFindText)
normalize-space
删除文本字符串中的空格。
注意
这将从具有文本数据类型的字段中删除任何前导空格、尾随空格和重复空格。
语法
normalize-space (文本)
| 参数 | 说明 |
|---|---|
| text | 包含要删除的前导空格、尾随空格或重复空格的文本。 将文本括在双引号 (“) 。 |
示例
您设计了一个表单模板,其中包含名为 fldText (的字段,该字段绑定到文本框控件) 。 若要规范化在第一个字段中输入的任何文本,并在不带任何多余的空格的情况下显示第一个字段中的值,请添加具有以下公式的第二个字段作为默认值:
normalize-space (fldText)
starts-with
如果第一个字段或文本字符串以第二个字段或文本字符串开头,则返回 true。 否则,它将返回 false。
语法
starts-with (text, start_text)
| 参数 | 说明 |
|---|---|
| text | 包含要搜索的文本的字段的名称。 用逗号分隔参数。 |
| start_text | 要在第一个参数中指定的字段开头搜索的文本。 此参数可以是用双引号 (“) 括起来的字段或文本。 |
示例
你正在设计一个包含三个文本字段的表单模板。 第一个将允许用户在第一个文本控件(名为 fldText)中输入较长的文本量。 第二个将允许用户输入短段文本,名为 fldFindText。 第三个文本框将比较第二个文本框与第一个文本框,并指示第一个字段中的值是否以第二个字段中的值开头并显示结果。 它将使用以下公式作为默认值:
starts-with (fldText, fldFindText)
字符串
将值转换为文本字符串。
语法
字符串 (值)
| 参数 | 描述 |
|---|---|
| value | 包含要转换为文本的值的字段。 |
示例
您正在设计一个表单模板,其表单将由承包商用于申请建筑许可证。 表单模板包含一个部分,承包商可在其中输入其业务地址。 为了验证承包商是否输入了有效的地址,表单模板与可以验证地址的 Web 服务建立了数据连接。 如果地址经过验证,承包商可以将表单提交到 SQL 数据库。 SQL 数据库对街道地址使用文本字段。 Web 服务要求地址号为数字数据类型,街道名称为文本数据类型。
若要将数据提交到 Web 服务和 SQL 数据库,地址需要存储在两种不同的数据类型中:
- 若要将地址提交到 Web 服务,地址号必须是数字数据类型。
- 若要将地址提交到 SQL 数据库,地址号和街道名称必须是文本数据类型。
你还希望承包商只输入一次他的地址。 若要将地址转换为正确的数据类型并帮助确保承包商只输入一次地址,表单包含一个用于输入名为 fldAddressNumber 的地址号的字段和另一个用于输入街道名称的字段。 fldAddressNumber 字段是数值数据类型,街道名称字段是文本数据类型。
若要将完整的地址 (地址号和街道名称) 提交到 SQL 数据库,需要将 fldAddressNumber 字段中的值和街道名称字段合并为一个文本数据类型的值。 首先需要将 fldAddressNumber 字段中的数值数据转换为文本数据类型,该字段将数据存储为数值数据类型。 向数据源添加一个字段,该字段将包含完整地址作为文本数据类型。
若要将 fldAddressNumber 字段中的文本数据转换为文本数据类型,以便可以使用 Web 服务,请将包含地址号的另一个字段配置为文本数据类型。 若要将地址号从数字数据类型转换为文本数据类型,请使用以下公式作为此字段的默认值:
string (fldAddressNumber)
string-length
返回文本字符串中的字符数。
语法
字符串长度 (文本)
| 参数 | 说明 |
|---|---|
| text | 其值为要计数的文本的字段。 |
示例
您正在设计包含名为 fldText 的字段的表单模板,该字段绑定到文本框控件。 表单模板包含第二个字段,用于计算第一个窗体中输入的字符数。 为此,第二个字段将包含以下公式作为默认值:
string-length (fldText)
子
返回文本字符串的特定部分。 第二个参数指定起始位置,第三个参数指定要包含的字符数。
语法
substring (text、start_position、char_count)
| 参数 | 说明 |
|---|---|
| text | 具有文本数据类型的字段或用双引号括起来的文本 (“) 。 该函数搜索此文本,并返回第二个参数中指定的位置到第三个参数中指定的字符数或文本末尾的所有字符,以先出现者为准。 |
| start_position | 要从第一个参数检索的文本的起始位置。 此参数必须是整数或对配置为存储整数 (整数) 数据类型的字段的引用。 |
| char_count | 要检索的字符数,从第二个参数中指定的起始位置开始。 此参数必须是整数或对配置为存储整数 (整数) 数据类型的字段的引用。 |
示例
您正在设计包含以下字段和控件的表单模板:
- 绑定到文本框控件的名为 fldText 的字段。 此字段包含函数搜索的文本。
- 绑定到文本框控件的名为 fldStartingPosition 的字段。 此字段配置为整数数据类型。 字段包含函数的起始位置。
- 绑定到文本框控件的名为 fldNumberOfCharacters 的字段。 此字段配置为整数数据类型。 字段包含函数返回的字符数。
- 显示函数结果的文本框控件。 文本框控件包含以下公式:
substring (fldText、fldStartingPosition、fldNumberOfCharacters)
如果用户输入“此表单是从 InfoPath 表单模板创建的”。 在第一个文本框中,第二个文本框后跟 4,第三个文本框 16,然后第四个文本框将包含“s 窗体已创建”。
substring-after
返回第一个文本字符串中与第二个文本字符串的第一个匹配项之后的文本。
语法
substring-after (text,find_text)
| 参数 | 说明 |
|---|---|
| text | 具有文本数据类型的字段或用双引号括起来的文本 (“) 。 函数搜索此参数中的文本,然后返回第二个参数中文本后面的所有字符。 |
| find_text | 要在第一个参数的文本中搜索的文本。 文本可以是具有文本数据类型的字段中的值,也可以是用双引号 (“) 括起来的文本。 函数在第一个参数中搜索此文本,然后返回该参数中文本后面的所有字符。 |
示例
您正在设计包含以下字段和控件的表单模板:
- 绑定到文本框控件的名为 fldText 的字段。 此字段包含函数搜索的文本。
- 绑定到文本框控件的名为 fldSubstringText 的字段。 此字段包含作为函数的第二个参数的文本。
- 显示函数结果的文本框控件。 文本框控件包含以下公式:
substring-after (fldText, fldSubstringText)
如果用户输入“此表单是从 InfoPath 表单模板创建的”。 在 fldText 字段中,在第二个字段中为“InfoPath”,则第三个文本框控件将包含“表单模板”。
substring-before
返回第一个文本字符串中第一个文本字符串中的文本,该字符串位于第一个文本字符串的第一个匹配项之前。
语法
substring-before (text,find_text)
| 参数 | 说明 |
|---|---|
| text | 具有文本数据类型的字段或用双引号括起来的文本 (“) 。 函数搜索此参数中的文本,然后返回第二个参数中文本之前的所有字符,find_text。 |
| find_text | 要在 text 参数中搜索的值。 此值可以是具有文本数据类型的字段中的值,也可以是用双引号 (“) 括起来的文本。 函数搜索第一个参数中的文本, (文本) 此文本,然后返回该参数中文本之前的所有字符。 |
示例
您正在设计具有以下字段和控件的表单模板:
- 绑定到文本框控件的名为 fldText 的字段。 此字段包含函数搜索的文本。
- 绑定到文本框控件的名为 fldSubstringText 的字段。 此字段包含作为函数的第二个参数的文本。
- 显示函数结果的 Aa 文本框控件。 文本框控件包含以下公式:
substring-before (fldText, fldSubstringText)
如果用户输入“此表单是从 InfoPath 表单模板创建的”。 在 fldText 字段中,在第二个字段中“已创建”,则第三个文本框控件将包含“此窗体为”。
翻译
返回第一个文本字符串,第二个文本字符串中的每个字符替换为第三个文本字符串中相应位置处的字符。
语法
翻译 (文本、find_chars、replace_chars)
| 参数 | 说明 |
|---|---|
| text | 包含将替换其字符的文本的字段的名称。 用逗号分隔参数。 |
| find_chars | 具有文本数据类型的字段的字符或值,将替换为第三个参数中的字符。 用逗号分隔参数。 |
| replace_chars | 一个字符或具有文本数据类型的字段的值,它将替换第二个参数中字符的每个实例。 |
示例
您正在设计一个表单模板,其表单将由承包商用于申请建筑许可证。 表单模板包含一个部分,承包商可在其中输入其业务地址。 节包含名为 fldStreetAddress 的字段,该字段绑定到文本框控件,承包商可在其中输入其街道地址。
若要验证承包商是否输入了有效的地址,你有一个可以验证地址的 Web 服务的数据连接。 Web 服务需要在地址中使用小写字符。
若要将街道地址中的任何大写字符转换为小写,请向数据源添加另一个字段,以包含转换为小写字符的街道地址。 此字段的默认值包含以下公式:
translate (fldStreetAddress、 ABCDEFGHIJKLMNOPRSTUVWXYZ、 abcdefghijklmnopqrstuvwxyz)
URL 函数
SharePointListUrl
仅返回承载窗体的 SharePoint 列表或表单库的地址 (InfoPath 2010) 。
语法
SharePointListUrl ()
此函数不使用参数。
示例
您正在为 SharePoint 列表设计表单模板,并希望添加指向列表托管位置的链接,例如“http://sharepointserver/site/list/”。 为此,请添加超链接控件并将其设置为 只读,然后设置控件链接到的字段的默认值,如下所示:
SharePointListUrl ()
注意
如果表单模板未托管在 SharePoint 服务器上,则 SharePointListUrl () 函数将仅返回“http://sharepointserver/site/list/”。
SharePointServerRootUrl
仅返回托管表单的 SharePoint 服务器的地址 (InfoPath 2010) 。
语法
SharePointServerRootUrl ()
此函数不使用参数。
示例
您正在为 SharePoint 列表设计表单模板,并希望添加指向该列表托管的 SharePoint 服务器的根目录的链接,例如“http://sharepointserver/site/list/”。 为此,请添加超链接控件并将其设置为 只读,然后设置控件链接到的字段的默认值,如下所示:
SharePointServerRootUrl ()
注意
如果表单模板未托管在 SharePoint 服务器上,则 SharePointListUrl () 函数将仅返回“http://sharepointserver/site/list/”。
SharePointCollectionUrl
返回表单托管在 InfoPath 2010 (SharePoint 网站集的地址,仅) 。
语法
SharePointCollectionUrl ()
此函数不使用参数。
示例
您正在为 SharePoint 列表设计表单模板,并希望添加指向托管该列表的 SharePoint 服务器的网站集的链接,例如“http://sharepointserver/sitecollection/”。 为此,请添加超链接控件并将其设置为 只读,然后设置控件链接到的字段的默认值,如下所示:
SharePointCollectionUrl ()
注意
如果表单模板未托管在 SharePoint 服务器上,则 SharePointListUrl () 函数将仅返回“http://sharepointserver/sitecollection/”。
SharePointSiteUrl
仅返回托管表单的 SharePoint 网站的地址 (InfoPath 2010) 。
语法
SharePointSiteUrl ()
此函数不使用参数。
示例
您正在为 SharePoint 列表设计表单模板,并希望添加指向托管该列表的 SharePoint 网站的链接,例如“http://sharepointserver/site/”。 为此,请添加超链接控件并将其设置为 只读,然后设置控件链接到的字段的默认值,如下所示:
SharePointSiteUrl ()
注意
如果表单模板未托管在 SharePoint 服务器上,则 SharePointListUrl () 函数将仅返回“http://sharepointserver/site/”。
userName 函数
userName
返回填写表单的人员的用户名 (Microsoft InfoPath 2007 及更高版本) 。
注意
如果用户在 Web 浏览器中填写表单,将从 Microsoft Windows SharePoint Services 3.0 或更高版本检索用户名。
语法
userName ()
此函数不使用参数。
示例
你正在为公司设计费用报表表单模板。 信用卡公司以电子方式将员工支出记录发送到公司维护的数据库。 若要检索员工的支出记录,数据库需要填写基于表单模板的表单的员工的用户名。
向表单模板的数据源添加字段以存储员工的用户名。 还可以创建一个查询数据连接,该连接在查询中使用此字段的值来检索费用。
若要确保填写支出报表的员工使用正确的用户名,请将字段绑定到文本框控件。 若要显示基于此表单模板创建表单的用户的用户名,请使用以下公式作为绑定到文本框控件的字段的默认值:
userName ()