У меня была похожая проблема, и я избегал использовать опцию «Выражение», потому что у меня было так много условий, чтобы проверить, прежде чем разрешить пользователю отправлять форму для определенных сценариев, и было бы очень сложно отлаживать и устранять неполадки.Я также рассмотрел решение Глена на основе суммы, потому что оно затрудняло поиск и устранение неисправностей, так как вы не можете точно определить, какое условие отсутствует, и вы не можете выполнять логические проверки того, что было выбрано или заполнено правильно.
MyРешением было установить текстовое поле CheckStatus и числовое поле CheckStatus-Value.Правила для проверенных полей добавят значения в поле CheckStatus, когда будут выполнены необходимые условия.И когда в поле CheckStatus-Value появится «магическое число» (6 в приведенном ниже примере), я разрешу пользователю отправить форму.Например, поля CheckStatus-Value и CheckStatus показаны ниже, но они будут скрыты, когда форма готова к производственному использованию: Поля CheckSum-Value и CheckSum
Затем для каждого требуемогоВ поле ввода я назначаю уникальную букву от «A» до «Z», или от «a» до «z», или от «0» до «9», и проверяю на требуемое условие.Таким образом, вы можете протестировать до 62 одновременных условий, хотя это будет немного сумасшедшим. Каждый раз, когда изменяется поле CheckStatus, запускается правило для подсчета количества значений и обновления CheckStatus-Value: Update CheckSum-Valueполе
ЕСЛИ условие истинно И поле CheckStatus уже не содержит уникальную букву / цифру, назначенную этому полю, тогда я добавляю присвоенный номер / букву (используя функцию concat) к CheckStatusполе.Если пустое значение является допустимым значением при определенных условиях, тогда я добавляю букву / цифру для поля при выполнении этого условия, поэтому форма, готовая к отправке, всегда имеет одно и то же значение в поле CheckStatus-Value.(Если действительное значение изменено на другое действительное значение, убедитесь, что буква / цифра добавляются только ОДИН РАЗ в поле CheckStatus.) Добавить значение A в поле CheckStatus ЕСЛИ условие имеет значение False, то я удаляюприсвоенный номер / буква (используя функцию перевода) из поля CheckStatus. Удалить значение A из поля CheckStatus
ЕСЛИ проверяемое поле (поле A) зависит от другого поля (поле B), я также добавляю правило поля A в поле Field-B, поэтому пользователю не нужно прикасаться к полю A, чтобы обновить CheckStatus.Будьте осторожны при копировании правил;помните, что InfoPath изменит имена полей автоматически!Я также добавил правила «Add-x» в правила загрузки форм (на вкладке «Данные»), чтобы обновлять CheckStatus при каждой загрузке записи.Надеюсь это поможет!-Steve