Clústeres condicionales

Los clústeres también se pueden reiniciar en un elemento de condición. Si la expresión del elemento de condición no hace referencia a ninguna de las preguntas de la misma página, el clúster es un clúster condicional estático. Esto se debe a que se puede determinar antes de que se visualice la página si se debe mostrar el clúster o no.

Por ejemplo, si se ha reunido información sobre los miembros de la unidad familiar, puede que desee añadir otra página para solicitar más detalles personales, incluyendo si la persona está embarazada. Se deberá añadir un atributo nuevo isPregnant a la entidad de persona para almacenar esta información:

Figura 1. Atributo de persona adicional
<xsd:element name="Person">
  <xsd:complexType>
    ...
    <xsd:attribute name="isPregnant" type="IEG_BOOLEAN"/>

Por supuesto, esta pregunta es sólo aplicable si el sexo es femenino. Por lo tanto, el clúster puede reiniciarse en una condición y sólo se mostrará si la expresión de condición se evalúa en true. La nueva página de detalles de la persona adicionales se puede definir de la manera siguiente:

Figura 2. Clúster condicional estático
<question-page id="AboutTheClientContinued" entity="Person" ...>
  <condition expression="Person.gender==&quot;SX2&quot;">
    <cluster>
      <question id="isPregnant" mandatory="true">
          <label id="IsPregnant.Label">
              ¿Está embarazada?
          </label>
          <help-text id="IsPregnant.HelpText">
              ¿Está embarazada?
          </help-text>
      </question>
    </cluster>
  </condition>
</question-page>

De forma alternativa, si alguna de las preguntas a las que se hace referencia en la expresión de condición se encuentra en la misma página, entonces el clúster es un clúster dinámicamente condicional. Esto significa que el clúster se visualizará y se ocultará a medida que el usuario cambie las respuestas a las preguntas de la página. Esta característica dinámica de IEG requiere que esté habilitado JavaScript en el navegador. Las expresiones del clúster dinámicamente condicional no pueden hacer referencia a funciones personalizadas, ya que las expresiones se evalúan sin realizar una llamada al servidor.

Sin cambiar el esquema de DS, si el ejemplo anterior se cambia de forma que el clúster condicional se defina en la misma página que la pregunta de sexo, el clúster será un clúster dinámicamente condicional.

Figura 3. Clúster dinámicamente condicional
<question-page id="AboutTheClient" entity="Person" ...>
...
  <cluster>
    <title id="DetailsCluster.Title">
      <![CDATA[Detalles personales]]>
    </title>
...
    <question id="gender" mandatory="true">
      <label id="Gender.Label">
        <![CDATA[Sexo:]]>
      </label>
    </question>
...
  <condition expression="Person.gender==&quot;SX2&quot;">
    <cluster>
      <question id="isPregnant" mandatory="true">
        <label id="IsPregnant.Label">
        <![CDATA[¿Está embarazada?]]>
        </label>
      </question>
    </cluster>
  </condition>
</question-page>

La pregunta sobre el embarazo aparecerá o desaparecerá dinámicamente cuando cambie el valor seleccionado para el sexo. El comportamiento dinámico en una página pueden desencadenarlo los campos de texto, los campos de fecha, los recuadros de selección, los botones de selección y los elementos de selección. El comportamiento dinámico no lo puede desencadenar la respuesta a una pregunta de varias selecciones o una matriz de pregunta, debido a las restricciones de la sintaxis de expresión.

Se debe tener en cuenta que sólo se permite un nivel de condición en torno a un clúster, es decir los clústeres condicionales no se pueden anidar en otras condiciones. La expresión de condición para un clúster dinámicamente condicional puede hacer referencia a preguntas en la misma página que a su vez están definidas en un cluster dinámicamente condicional. Esto crea una dependencia en cascada entre los clústeres.