Actions

Procedimientos de ExpressionScript

From LimeSurvey Manual

This page is a translated version of the page ExpressionScript How-tos and the translation is 100% complete.


Resumen de lo explicado anteriormente

Si has seguido hasta ahora la estructura del manual de LimeSurvey, significa que ya conoces la Terminología de LimeSurvey. A continuación, cubrimos expresiones y variables para aprender cómo mejorar nuestras encuestas. En la siguiente parte, pasamos a los tipos y significados de resaltado de sintaxis para aprender cómo corregir errores de sintaxis.

Con estas nociones básicas cubiertas, podríamos avanzar hacia ejemplos y explicar cómo funcionan las expresiones dentro de LimeSurvey.


Resaltado de sintaxis

Las siguientes capturas de pantalla brindan ejemplos, pero no muestran los valores de la información sobre herramientas. Una información sobre herramientas es un cuadro informativo que se muestra cada vez que pasa el mouse sobre cualquier palabra en negrita.

Gracias a este resaltado de sintaxis, es muy fácil componer expresiones correctas, incluso aquellas que son complicadas. Aunque el equipo de LimeSurvey planea intentar crear una GUI de Expression Builder, puede utilizar el resaltado de sintaxis existente para identificar y corregir rápidamente errores tipográficos. También puede utilizar la información sobre herramientas para validar la precisión de sus expresiones (por ejemplo, confirmar que ha seleccionado las variables deseadas).

En cada uno de los ejemplos, hay tres columnas:

  1. Fuente: este es el texto sin formato que ingresaría en el campo de preguntas de LimeSurvey.N!#Pretty Print: ¡este es el equivalente resaltado en sintaxis de lo que ingresó! N!#*Tenga en cuenta que las expresiones se muestran con un fondo tostado, pero no rodeadas por llaves en este resaltado.
    • Dado que EM admite la sustitución recursiva, mostrar llaves en el resaltado provocaría errores de sintaxis.N!#Resultado - ¡Esta es la salida generada cuando EM procesa la fuente
    • Todo lo que se puede sustituir correctamente es
    • Las expresiones con errores se muestran en línea, con resaltado de sintaxis. Los errores están rodeados por un cuadro con líneas rojas.


Sintaxis adecuada

Puede encontrar a continuación ejemplos de sintaxis adecuada:

  1. Valores: muestra que las variables conocidas están codificadas por colores según estén configuradas en la página actual. INSERTANTES de estilo antiguo:xxxx obtiene su propio estilo de codificación de colores.
  2. Atributos de preguntas: ¡muestra que la notación de puntos puede acceder a algunas propiedades de las preguntas
  3. Matemáticas: ¡muestra que se admiten cálculos básicos y complejos
  4. Procesamiento de texto: muestra algunas de las funciones de procesamiento de texto disponibles
  5. Dates: muestra dos de las funciones disponibles relacionadas con fechas
  6. Conditional: muestra el uso de la función if(). Las opciones se pueden anidar.
  7. Párrafo personalizado: puede personalizar completamente un informe basado en valores anteriores
  8. Procesos EM dentro de cadenas: muestra que puede hacer sustituciones dentro de cadenas. Este ejemplo genera un nombre de imagen personalizado.
  9. EM no procesa llaves como estas: muestra que si se escapan las llaves, o hay un espacio en blanco entre la expresión y las llaves, ES ignora la expresión.



Sintaxis de EM que contiene errores

A continuación se muestran ejemplos de errores comunes al escribir expresiones ES. Tenga en cuenta que la información sobre herramientas proporciona información adicional.

  1. Javascript en línea que olvidó agregar espacios después de la llave
    • Dado que "document.write" aparece justo después de una llave, EM piensa que es una expresión y red- cuadros "documento" y "escribir" ya que son variables y funciones no definidas, respectivamente
  2. Variables, funciones y operadores desconocidos/mal escritos
    • Aquí olvidamos que estamos usando el nombre de variable "género" en lugar de " sexo", pero EM detecta ese error. También encuadra en rojo '++', ya que no es un operador admitido.
  3. Advierte si se usa = en lugar de eq, o realiza asignaciones de valores
    • Tenga en cuenta que '=" y '+=' están en texto rojo en lugar de negro. Si pasa el mouse sobre ellos, verá advertencias de que está asignando un valor.
  4. Número incorrecto de argumentos para funciones
    • if() toma 3 argumentos, pero se le han dado 4, por lo que al pasar el cursor sobre el "si" encuadrado en rojo se explicará el error y se mostrará la sintaxis admitida. N!#*sum() toma un número ilimitado de argumentos, pero teníamos una coma al final antes del paréntesis de cierre, ¡así que está encuadrado en rojo! N!#Paréntesis no coincidentes
    • Este es uno de los errores más comunes al escribir expresiones.
    • Esto muestra dos ejemplos de paréntesis de cierre faltantes y un ejemplo de tener demasiados paréntesis de cierre.
#¡Sintaxis no compatible
    • Si utiliza un operador o puntuación que ES no admite, lo marcará en un recuadro rojo.
  1. Asignaciones no válidas
    • Algunas variables son de lectura y escritura y se pueden cambiar sus valores. Otras son de sólo lectura.
    • Si intenta cambiar el valor de una variable de sólo lectura, no podrá. EM marcará el intento en un cuadro rojo.
    • Si intenta asignar un valor a una ecuación o una cadena, también obtendrá un error



"Ejemplos en vivo" de resaltado de sintaxis con información sobre herramientas activa

!¡NORTE!!¡NORTE!
Fuente Bonita impresión Resultado
A continuación se muestra un ejemplo de sintaxis OK con información sobre herramientas.
Hola {if(gender=='M','Mr.','Mrs.')} {apellido}, ahora es {fecha('g:i a',time())}. ¿Sabes dónde están tus {sum(numPets,numKids)} hijos y mascotas?
A continuación se muestra un ejemplo de sintaxis OK con información sobre herramientas.
Hola , si ( género == 'M' , 'Mr.' , 'Mrs.' ) apellido , ahora es fecha ( 'g:i a' , hora ()) . ¿Sabe dónde están sus hijos y mascotas suma ( numPets , numKids ) ?
A continuación se muestra un ejemplo de sintaxis OK con información sobre herramientas.
Hola Sr. Smith , ahora son las 6:07 am. ¿Sabes dónde están tus 3 hijos y tus mascotas?
Aquí hay errores comunes para que pueda ver la información sobre herramientas.
Variables utilizadas antes de declararse: {notSetYet}
Función desconocida: {iff(numPets>numKids,1,2)}
Variable desconocida: {suma(edad,num_pets,numKids)}
# parámetros incorrectos: {sprintf()},{if(1,2)},{date()}
Asignar variables de solo lectura:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}
Paréntesis desequilibrados: {pow(3,4},{(pow(3,4)},{pow(3,4))}
Aquí hay errores comunes para que pueda ver la información sobre herramientas.
Variables utilizadas antes de ser declaradas: notSetYet
Función desconocida: iff ( numPets > numKids ,1,2)
Variable desconocida: suma ( edad , num_pets , numKids )
# parámetros incorrectos: sprintf () , if (1,2) , fecha ()
Asignar variables de solo lectura: TOKEN:ATTRIBUTE_1 += 10 , nombre = 'Sally'
Paréntesis desequilibrados: pow (3,4 , (pow (3,4) , pow (3,4) )
Aquí hay errores comunes para que pueda ver la información sobre herramientas.
Variables utilizadas antes de ser declaradas: notSetYet
Función desconocida: iff ( numPets > numKids ,1,2)
Variable desconocida: suma ( edad , num_pets , numKids )
# parámetros incorrectos: sprintf () , if (1,2) , fecha ()
Asignar variables de solo lectura: TOKEN:ATTRIBUTE_1 += 10 , nombre = 'Sally'
Paréntesis desequilibrados: pow (3,4 , (pow (3,4) , pow (3,4) )
A continuación se muestra parte de la sintaxis no admitida.
No hay soporte para '++', '--', '%',';': {min(++age, --age,age % 2);}
Ni '|', '&', '^': {(suma(2 | 3,3 y 4,5 ^ 6)}}
Ni matrices: {nombre[2], nombre['mío']}
A continuación se muestra parte de la sintaxis no admitida.
No hay soporte para '++', '--', '%',';': min ( ++ edad , -- edad , edad % 2) ;
Ni '|', '&', '^': ( suma (2 | 3,3 y 4,5 ^ 6) }
Ni matrices: nombre [ 2 ] , nombre [ 'mío' ]
A continuación se muestra parte de la sintaxis no admitida.
No hay soporte para '++', '--', '%',';': min ( ++ edad , -- edad , edad % 2) ;
Ni '|', '&', '^': ( suma (2 | 3,3 y 4,5 ^ 6) }
Ni matrices: nombre [ 2 ] , nombre [ 'mío' ]


Ejemplos de adaptación (p. ej., extensión de {INSERTANS:xxx})

"Estimado {Señor}/{Señora} Smith..."

Utilice la función if() para elegir condicionalmente si se muestra 'Mr.' o 'Señora'.

La sintaxis es si(prueba,do_if_true,do_if_false).

# Código Pregunta Tipo
1 género ¿Cuál es tu género? Género
|ejemplo1 Estimado {if(gender=='M','Mr.','Mrs.')} Smith, ... ¡Texto libre largo



Como se puede observar a continuación, "Señor" y "Señora" se adaptan a lo que el encuestado selecciona como respuesta a la pregunta "género".



"Estimado {Señor}/{Señora} Smith..." en el correo electrónico de invitación

Puede utilizar el ejemplo anterior en el correo electrónico de invitación utilizando atributos de la tabla de tokens. Utilice la función if() para elegir si 'Mr.' o 'Sra.' debe usarse en el correo electrónico.


La sintaxis es "si(prueba,do_if_true,do_if_false)".

# atributo valor
1 Apellido Smith
2 Dirección de correo electrónico test@test. es
3 ATTRIBUTE_2 M


Texto en el correo electrónico de invitación:

Estimado {if(ATTRIBUTE_2=='M','Mr','Mrs')} {APELLIDO},

has sido invitado a participar en una encuesta:

https://...



correo electrónico Ver:



Ejemplos de cálculo/evaluación

Calcule los valores de evaluación en tiempo de ejecución y almacene los resultados en los datos de la encuesta

Este ejemplo utiliza todas las funciones de EM, incluidas la relevancia, la adaptación y el tipo de pregunta de ecuación.

También muestra que todos ellos están habilitados para JavaScript, por lo que si tiene estas características en una página, cambiará dinámicamente a medida que las personas establezcan y cambien sus respuestas.

# Código Pregunta Tipo Relevancia
1 numKids ¿Cuántos hijos tienes? Entrada numérica - 2 kid1 ¿Cuántos años tiene tu primer hijo? Entrada numérica numKids >= 1
3 kid2 ¿Cuántos años tiene tu segundo? niño? Entrada numérica numKids >= 2
4 kid3 ¿Cuántos años tiene su tercer hijo? Entrada numérica numKids >= 3
6 sumKidAges {sum(kid1.NAOK,kid2. NAOK,kid3.NAOK,kid4.NAOK)} Ecuación 1
7 kidSummary Dijiste que tienes {numKids}. {if(numKids==1,'niño','niños')}. {if(numKids>1,implode(' ','La suma de las edades de sus primeros ',min(numKids,4),' hijos es ',sumKidAges,'.'),' ')} |1


Para descargar este ejemplo, haga clic en el siguiente enlace: Assessments_survey_example.


Puede encontrar a continuación capturas de pantalla de preguntas representativas. Como puede ver, la sintaxis EM resalta todos los campos que pueden contener personalización. Aquí verá ejemplos de relevancia del resaltado de sintaxis, el tipo de pregunta de ecuación y sustituciones dentro de una pregunta. También puede utilizar sustituciones en Ayuda, visualización de encabezado de grupo, mensaje de bienvenida y mensaje de finalización.

En el siguiente ejemplo, dado que la relevancia es {numKids >= 2), la pregunta solo será visible si el encuestado informa que tiene al menos dos hijos.



A continuación, puede observar que cada variable tiene el sufijo .NAOK adjunto. Esto se debe a que los mercados emergentes apoyan la relevancia en cascada. Si no tuviera .NAOK, entonces la suma sólo se calcularía si la persona dijera que tiene 4 hijos (por ejemplo, si todas las variables son relevantes). El uso de .NAOK significa que queremos calcular la suma incluso si todas o algunas de las variables son irrelevantes (por ejemplo, "No aplicable" (NA) está bien (OK)).

Sin embargo, el atributo .NAOK solo afecta si las variables se pasan a EM. Si la encuestada inicialmente dice que tiene 3 hijos e ingresa las edades de cada uno, luego cambia de opinión y dice que tiene 2, no queremos ver la suma de los 3 valores ingresados, ya que el tercer hijo "no aplica". en nuestro caso ya:



Cada expresión separada está codificada por colores con un fondo tostado. Como puede ver, aquí hay tres expresiones separadas. El último contiene un mensaje que se muestra condicionalmente sólo si la persona tiene más de un hijo.



Ahora, aquí hay capturas de pantalla de la encuesta en acción.

Cuando visitas la página por primera vez, ves esto. Tenga en cuenta que dice "Tienes 0 hijos" en lugar de "Tienes 0 hijos".



Si cambio el valor del número de niños a 1, la pantalla cambia instantáneamente a esto, aunque esté en la misma página:



Ahora observe que la gramática es correcta: "Tienes 1 hijo".

Ahora cambio el valor del número de niños a 3 y la pantalla cambia instantáneamente a esto.

Observe que ahora ve el mensaje condicional en la parte inferior: "La suma de las edades de sus primeros 3 hijos es 0".



Ahora ingreso las edades de mis hijos imaginarios y obtengo esta pantalla que resume sus edades:



Nuevamente, la puntuación y la pantalla se actualizan instantáneamente a medida que ingreso los valores, por lo que puede usar esto para mostrar un total acumulado de una puntuación de evaluación.


Ahora, cambio el valor del número de niños a 2. La pantalla ha cambiado a esto:



Observe que aunque ingresé un valor de 5,5 para el tercer hijo, el informe ahora solo suma los valores de mis primeros 2 hijos.

La razón de esto es que el tercer valor ahora es irrelevante y EM ignora activamente los valores irrelevantes.

Si volviera a cambiar el número de niños a 3, volvería a ver el valor de 5,5 que ingresé. Por lo tanto, no pierdo la información que ingreso en la página.

Sin embargo, si navego a la página Siguiente o Anterior, todos los valores irrelevantes se anularán en la sesión y en la base de datos. Entonces, si mantuviera el valor en 2, pasara a la página siguiente y luego volviera y dijera que en realidad tengo 3 hijos, ya no vería la edad de 5,5 años.


Ingrese datos y vea un informe que cambia dinámicamente de lo que se ingresó en la misma página

Este ejemplo presenta el proceso de Adaptación dentro de LimeSurvey.

Para descargar este ejemplo, haga clic en el siguiente enlace: Ejemplo de encuesta de cambios dinámicos.

Así es como se ve la página inicialmente. Solo verás la pregunta en qué ciudad vives:



Una vez que comienza a ingresar una respuesta, también comienza el proceso de personalización:


A medida que ingresa respuestas, la tabla en la parte inferior de la página se actualiza para mostrar los códigos de respuesta y los valores de sus respuestas.


Ejemplos comunes de depuración

Declaraciones if() anidadas (lógica condicional)

EM admite la función "if(test,do_if_true,do_if_false)" para que pueda realizar lógica condicional o adaptación. Esta función se puede anidar para hacer el equivalente de "if { } else if { } else { }". EM le informará si los paréntesis no están equilibrados (por ejemplo, le falta un paréntesis derecho de cierre) o si tiene algún paréntesis derecho adicional. Debería intentar contar los paréntesis mientras redacta sentencias if anidadas durante mucho tiempo, guardarlas, comprobar si hay errores de sintaxis y corregirlos si se encuentra alguno. Revisemos juntos el siguiente ejemplo.

Se puede acceder al grupo de preguntas utilizadas a continuación desde aquí: Tailoring Survey example.lsg


Primero, sin haber ingresado nada, solo verá "Hola".



Si ingresa un nombre, dice "Hola {nombre}".



Si ingresa una edad, recibirá un mensaje personalizado, dependiendo de si es un niño en edad preescolar o no:



Edad escolar, adolescente o adulto. Aquí hay un adolescente que quiere permanecer en el anonimato:



Aquí está el archivo lógico del grupo. Como puede ver en la pregunta "basada en si", hay declaraciones if anidadas basadas en la edad de la persona.



Cuando esté editando esta pregunta originalmente, es probable que en algún momento tenga una cantidad incorrecta de paréntesis. Esto es lo que sucede si tienes muy pocos:



Si pasa el cursor sobre la palabra "si", que está rodeada por un cuadro rojo, dice "Paréntesis no equilibrados". En este caso, debería haber cuatro paréntesis de cierre después de "¡ya eres adulto!", pero solo hay tres.

Si, por el contrario, tienes un paréntesis derecho adicional, estará rodeado por un cuadro rojo, como este:



Cuando en realidad estás editando la pregunta, la pregunta se ve así: