我正在基于列表处理 infopath 2010 表单/视图。
我有 7 个单独的复选框字段,我想通过提交按钮下的规则进行检查,至少应该选择其中一个。
尝试执行此操作并检查条件,它允许我一次最多检查 5 个字段。
在提交数据之前,如何选中这 7 个复选框中的至少一个?
最后一个条件更改为"表达式"并根据需要使用"and"或"or"来创建复合条件来克服此问题。因此,例如,如果您需要确保 field1 和 field2 都不为空,则可以使用以下表达式:
my:myFields/my:field1 != "" and my:myFields/my:field2 != ""
如果您需要帮助找出表达式的正确语法,请首先使用下拉列表设置条件(例如,在第一个下拉列表中选择 field1,然后在第二个下拉列表中选择"不为空"(,然后将第一个下拉列表更改为"表达式" - 无论您的条件是什么,都会自动填充到表达式的框中。将其粘贴到文本编辑器中,然后对其余条件执行相同的操作。根据需要在它们之间添加和/或,你就有了你的表达!
来源: http://www.infopathdev.com/forums/p/14871/52819.aspx
我遇到了类似的问题,并避免使用"表达式"选项,因为在允许用户在某些情况下提交表单之前,我有很多条件需要检查,并且调试和故障排除非常困难。我还考虑了 Glen 基于总和的解决方案,因为它使故障排除变得困难,因为您无法真正判断缺少哪个条件,并且您无法对正确选择或填写的内容进行逻辑检查。
我的解决方案是设置一个文本检查状态字段和一个数字检查状态值字段。当满足所需条件时,测试字段上的规则会将值添加到"检查状态"字段。当CheckStatus-Value字段达到"幻数"(在下面的示例中为6(时,我将允许用户提交表单。例如,"检查状态-值"和"检查状态"字段如下所示,但在表单准备好用于生产时将隐藏:CheckSum-Value & CheckSum 字段
然后,对于每个期望的字段,我分配一个从"A"到"Z",或从"a"到"z",或从"0"到"9"的唯一字母,并测试所需的条件。通过这种方式,您可以测试多达 62 个并发条件,这有点疯狂 😊 每次 CheckStatus 字段更改时,都会运行一个规则来计算值的数量并更新 CheckStatus-Value:更新校验和值字段
如果条件为 True,并且"检查状态"字段尚未包含分配给该字段的唯一字母/数字,则我将分配的编号/字母(使用 concat 函数(添加到"检查状态"字段中。如果空白值在特定条件下是有效值,则在满足该条件时,我会为该字段添加字母/数字,因此准备提交的表单在 CheckStatus-Value 字段中始终具有相同的值。(如果将有效值更改为其他有效值,请确保字母/数字仅添加到"检查状态"字段中一次。将值 A 添加到"检查状态"字段 如果条件为 False,则我从"检查状态"字段中删除分配的数字/字母(使用翻译功能(。从"检查状态"字段中删除值 A
如果正在测试的字段(字段 A(依赖于另一个字段(字段 B(,我还会将字段 A 规则添加到字段 B,因此用户不必触摸字段 A 即可更新检查状态。复制粘贴规则时要小心;请记住,InfoPath 将自动更改字段名称!我还在表单加载规则(在"数据"选项卡上(中添加了"'Add-x"规则,以便在每次加载记录时更新检查状态。希望这有帮助!-史蒂夫
这里有一个想法:使用一个整数字段,并在 7 个复选框中的每一个上放置一个规则,为该字段添加 1。然后,最终验证规则只需要确保整数字段大于零
(最好还有一个规则,如果选中后未选中一个框,则减去 1。
-幽谷