Как проверить, установлен ли хотя бы один флажок на экране множественного выбора

Предполагая, что я хочу проверить на экране множественного выбора (тип = 4), что установлен хотя бы один флажок. Как мне определить условие связанной проверки в следующем примере?

<question title="Preferrable Colors" type="4" key="#1">
  <answer nextQuestionKey="END" key="#1_1"  position="0">
    <text>Pink</text>
  </answer>
  <answer nextQuestionKey="END" key="#1_2"  position="1">
    <text>Red</text>
  </answer>
  <answer nextQuestionKey="END" key="#1_3"  position="2">
    <text>Violet</text>
  </answer>
  <text>Select the colors you prefer </text>
  <validation type="ERROR">
    <condition>true</condition>
    <text>Sorry, you have to select at least one color</text>
  </validation>
</question>

person André Schäfer    schedule 19.05.2015    source источник


Ответы (2)


простой способ выполнить ваше требование в этом статическом сценарии — посмотреть на «проверенное состояние» каждого ответа с помощью метода isAnswerSelectedByClientKey. Этот метод вернет true или false, и в моем подходе я записываю все «состояния» в массив и выполняю проверку на наличие true потом.

            <question title="Preferrable Colors" type="4" key="#1">
            <answer nextQuestionKey="END" key="#1_1" position="0">
                <text>Pink</text>
            </answer>
            <answer nextQuestionKey="END" key="#1_2" position="1">
                <text>Red</text>
            </answer>
            <answer nextQuestionKey="END" key="#1_3" position="2">
                <text>Violet</text>
            </answer>
            <text>Select the colors you prefer </text>
            <validation type="ERROR">
                <condition>hasValue(selArray, true) == false</condition>
                <text>Sorry, you have to select at least one color</text>
            </validation>
            <onLeaveOkPrepareAssignment>
                selArray = null;        
                selArray['1'] = isAnswerSelectedByClientKey($answer:'#1_1', null);
                selArray['2'] = isAnswerSelectedByClientKey($answer:'#1_2', null);
                selArray['3'] = isAnswerSelectedByClientKey($answer:'#1_3', null);          
            </onLeaveOkPrepareAssignment>
        </question> 
person Andreas    schedule 19.05.2015
comment
!hasValue (selArray, true) для косметики. Кроме того, отличное решение. - person André Schäfer; 19.05.2015

вы можете определить условие для:

<condition>getQuestionValueNew() == ""</condition>

Поэтому, когда ничего не выбрано, возвращается true, а если что-то выбрано, возвращается false.

person JCimbal    schedule 19.05.2015
comment
Хм, я пробовал это, но на моем клиенте для Android условие всегда верно, даже если я выбираю все видимые флажки. В документации getQuestionValue не указано, что он предназначен для использования на экранах, где возможен множественный выбор. - person André Schäfer; 19.05.2015
comment
Я попробовал это на iOS и Swing, и это сработало, как и ожидалось ... Но если его не следует использовать на экранах, где возможен множественный выбор, ответ Андреаса лучше. - person JCimbal; 22.05.2015