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