Visualización de datos como de sólo lectura

A veces es necesario mostrar al usuario las respuestas a algunas preguntas forma que no se puedan modificar. Esto ya sucede en el caso de las páginas de resumen donde los usuarios pueden revisar las respuestas y utilizar el botón de retroceso o editar enlaces para modificarlas.

En una página de preguntas, se puede establecer un atributo booleano "sólo lectura" en true, lo que indica que todas las preguntas que se muestran en la página no se pueden editar.

Existe un mecanismo más sofisticado: se pueden utilizar atributos de "expresión de sólo lectura" en elementos de script diferentes (secciones, todos los tipos de páginas, clústeres, preguntas y preguntas de lista). Si la expresión se evalúa como verdadera (true), esto se aplicará a todas las preguntas contenidas en el elemento. En su forma más simple, la expresión será "true" si el elemento necesita ser de sólo lectura de forma incondicional. En una página de resumen, el resultado es que los enlaces para añadir, editar y suprimir no se visualizan.

En el caso de expresión de sólo lectura definida para el clúster, los elementos de script de pregunta de lista y pregunta, si alguna de las preguntas a las que se hace referencia en la expresión está en la misma página que el elemento de script, se habilitan o inhabilitan dinámicamente, en lugar de ser simplemente de sólo lectura. Esto significa que las preguntas se habilitarán e inhabilitarán a medida que el usuario cambie las respuestas a otras preguntas de la página. Cuando la expresión de solo lectura de un clúster haga referencia a una pregunta de la misma página, todas las preguntas contenidas en el clúster se habilitarán e inhabilitarán. Esta característica dinámica de IEG requiere que esté habilitado JavaScript en el navegador. Las expresiones para habilitar e inhabilitar dinámicamente las preguntas pueden no hacer referencia a funciones personalizadas, ya que las expresiones se evalúan sin realizar una llamada al servidor.

Las expresiones de sólo lectura dinámicas también pueden hacer referencia a las preguntas de la misma página que a su vez se habilitan e inhabilitan dinámicamente. Esto crea una dependencia en cascada entre las preguntas. Se deberá tener cuidado al definir expresiones con dependencias en cascada porque IEG no tiene en cuenta si las preguntas a las que se hace referencia en la expresión de sólo lectura está habilitadas o no, sólo el valor de la pregunta. Esto puede ser confuso para el usuario porque puede que no sea aparente qué está controlando la habilitación e inhabilitación de una pregunta.

Cuando se visualiza una pregunta, si el atributo de almacén de datos correspondiente tiene un valor, éste se mostrará incluso si la pregunta está inicialmente inhabilitada. Entones el usuario puede habilitar la pregunta y puede cambiar la respuesta. Si la pregunta está inhabilitada, su valor se volverá a establecer en el valor que tenía cuando se visualizó inicialmente. Cuando se envía una página, el atributo de almacén no se actualizará a menos que la pregunta esté habilitada. Por lo tanto, si la página se vuelve a visualizar, el valor original del atributo de almacén de datos se mostrará de nuevo.

No es posible marcar una pregunta como obligatoria si también tiene una expresión de sólo lectura dinámica expresión en la propia pregunta o en uno de sus elementos padre.

La habilitación e inhabilitación dinámicas de elementos de script no se soporta en páginas de relaciones.

La información recopilada en bucles se puede visualizar en las páginas de resumen utilizando listas, pero también es posible utilizar esta construcción de lista en páginas normales sin necesidad de especificar una expresión de sólo lectura en uno de los elementos que reinician la lista. La única diferencia con las listas de resumen es que los enlaces no están permitidos.

Otra posibilidad es hacer que todo un script sea de sólo lectura. Esto es útil, por ejemplo, si un asistente social necesita revisar un script sin poder cambiar ninguna de las respuestas. El script se establece en sólo lectura mediante IEGRuntimeAPI estableciendo un distintivo de sólo lectura en la ejecución de script, tal como se muestra a continuación:

Figura 1. Establecimiento del distintivo de sólo lectura en una ejecución de script
...
//Establecer distintivo de sólo lectura.
IEGRuntime runtimeAPI = new IEGRuntime();
IEGScriptExecutionID runtimeExecID = new IEGScriptExecutionID();
runtimeExecID.executionID = execution.getExecutionID();
IEGReadOnlyFlag readOnlyFlag = new IEGReadOnlyFlag();
readOnlyFlag.readOnlyFlag = true;
runtimeAPI.setReadOnlyFlag(runtimeExecID, readOnlyFlag);
...