Formar expresiones

Puede utilizar expresiones en una encuesta para controlar el comportamiento predeterminado de las preguntas. Puede ocultar o mostrar una pregunta o un grupo de preguntas en función de las respuestas anteriores con la ayuda de expresiones en la columna relevant. Cuando se oculta una pregunta con una expresión en la columna correspondiente, no se envían datos para la pregunta.

Nota:

En la aplicación de campo ArcGIS Survey123, si se introduce una respuesta para una pregunta que se oculta más tarde debido a una expresión relevante, la respuesta se borra. Si la pregunta vuelve a ser relevante, se debe introducir una nueva respuesta. En la aplicación web, la respuesta no se borra, de modo que si la pregunta vuelve a ser relevante, se usa la respuesta introducida anteriormente.

También puede aplicar expresiones a la columna readonly, que pueden deshabilitar la escritura en una pregunta o un grupo en función del resultado de la expresión. La columna required también admite expresiones, lo cual permite a la exigir solicitar al usuario responder a la pregunta solamente en condiciones concretas.

Nota:

No se admiten expresiones de solo lectura en la aplicación web.

Siempre se debe hacer referencia a las preguntas anteriores en las expresiones con el formato ${field_name}.

Visibilidad de las preguntas

Puede ocultar una pregunta de la vista con una expresión con la columna body::esri:visible. Esta columna oculta la pregunta si la expresión que contiene no se evalúa como true, pero sigue manteniendo el contenido de la pregunta. Por ejemplo, la expresión ${edit_location}='yes' hace que la pregunta solo se muestre si la pregunta edit_location es igual a yes.

Tiene un comportamiento similar al de la columna relevant y las dos columnas ocultan una pregunta hasta que la expresión de la columna se evalúa como true. La diferencia principal es que body::esri:visible no borra el valor de una pregunta que se ha hecho no visible mediante la expresión y sigue enviando los valores existentes a la capa de entidades. Utilice la columna relevant en lugar de body::esri:visible cuando quiera asegurarse de que la pregunta no tendrá ningún valor calculado o almacenado cuando no sea relevante.

Al utilizar las columnas body::esri:visible o relevant para controlar la visibilidad de la pregunta, los valores obligatorios, los valores predeterminados, las restricciones y las máscaras de entrada solo se aplican cuando la pregunta es visible.

También puede controlar la visibilidad de las preguntas utilizando el tipo de pregunta oculta y la apariencia oculta, pero no se pueden controlar con una expresión.

Nota:

Las preguntas de imagen, audio y archivo no admiten que la columna body::esri:visible las oculte.

Expresiones sencillas

La mejor forma de usar una de estas expresiones es modificar el comportamiento o la visibilidad de la pregunta, a menos que previamente se haya dado una respuesta concreta. Por ejemplo, la siguiente expresión comprueba si la respuesta a la pregunta anterior tiene el valor true:

${previous_question} = 'true'

Este ejemplo comprueba si la respuesta a la pregunta anterior es mayor que o igual a 100:

${previous_question} < 100

El tipo de pregunta select_multiple guarda sus valores de un modo distinto a otros tipos de preguntas, con cada respuesta activada introducida en el orden en que se seleccionó y separada de las demás por comas. Por ejemplo, al seleccionar las respuestas A y B en ese orden, las respuestas aparecerán como A,B. Para usar una pregunta select_multiple como parte de una expresión, debe usar la función selected. El siguiente ejemplo comprueba si el usuario respondió a la pregunta anterior con A y funciona independientemente del resto de respuestas elegidas:

selected(${previous_question}, 'A')

La función count-selected cuenta el número de opciones que se han seleccionado en una pregunta select_multiple y proporciona un número para utilizarlo como operador. El siguiente ejemplo comprueba si en la pregunta anterior se han seleccionado más de dos opciones:

count-selected(${previous_question}) > 2

Puede usar la función count-selected como restricción en las preguntas image o file con la apariencia multiline para controlar el número de archivos enviados.

Expresiones matemáticas

El siguiente ejemplo combina varios operadores y preguntas:

${previous_question} + ${other_previous_question} <= 100

Cuando use operadores matemáticos, es posible que sea necesario convertir valores en números. En el ejemplo anterior, se supone que previous_question y other_previous_question son enteros o decimales; sin embargo, si los tipos de preguntas son cadenas de caracteres, conviértalos de la siguiente forma:

int(${previous_question}) + int(${other_previous_question}) <= 100

También puede aplicar expresiones matemáticas en preguntas date, que se guardan como tiempo Unix, el número de milisegundos transcurridos desde el 1 de enero de 1970. La siguiente expresión solo revela una pregunta si la respuesta a la pregunta anterior es anterior en más de dos semanas a la fecha actual:

if( ${previous_question}='',false,today() - ${previous_question} > 1000*60*60*24*15)

Expresiones regulares

Una expresión regular es una secuencia de caracteres que se utiliza para hacer coincidir patrones en cadenas de caracteres. En Survey123, si el patrón coincide, la expresión devolverá el valor True; de lo contrario, si el patrón no coincide, la expresión devolverá el valor False.

Puede usar expresiones regulares en cualquier columna que acepte expresiones para modificar el comportamiento de una pregunta, a menos que la cadena proporcionada por otra pregunta esté en un formato concreto. El siguiente ejemplo, cuando se coloca en la columna relevant, solamente muestra una pregunta si se ha respondido a otra pregunta usando una letra:

regex(${question},'[A-Za-z]')

El siguiente ejemplo, cuando se coloca en la columna choice_filter de una pregunta select_one para nombres de calles, solo muestra opciones de calles contenidas en la lista citystreets que coinciden con el nombre de ciudad seleccionado en una pregunta anterior llamada city:

regex(citystreets,${city})

Para obtener más información sobre las expresiones regulares, consulte Fórmulas.