Contenido
Se pueden crear expresiones para manipular datos en el servidor. Estos se pueden usar para filtrar el envío de notificaciones, en los filtros avanzados en análisis y creación de tareas y a partir de la versión 22.02.01 en las reglas para las plantillas PDF, pero también para crear expresiones en cálculos de servidor que creen nuevos valores derivados de datos ya enviados. Éstas son similares a las usadas en Relevancia o Restricción con algunas pequeñas diferencias. Si usted conoce algo de SQL podrá reconocer la sintaxis fácilmente. Si encuentra que el filtro no trabaja como necesite, revise el historial en Sesiones para errores.
Preguntas
Referenciando Preguntas
Use el mismo patrón que se usa para referenciar preguntas en relevancia. Esto es con Llaves encerrando la pregunta y el símbolo pesos ($) al comienzo: ${Pregunta}
Puede igual referenciar preguntas de un subformulario (Repeat) como cualquier otra pregunta, sin ninguna referencia especial de índice.
Ejemplos
- ${nombre} = ‘Tom’
- ${edad} > 5
Tipos de Preguntas Admitidas:
- text
- integer
- decimal
- select_one
- barcode
- calculation
- date
- date and time
- time
- acknowldege
- range
Valores
- Enteros se escriben como tal
- Decimales se escriben como tal
- Textos van encerrados con comillas simples
- Fechas van encerrados con comillas simples y en el siguiente formato format aaaa-mm-dd. Nota se requiere ingresar 2 caracteres para meses y dos para días.
Metadatos
Los siguientes metadatos están incluídos:
- Usuario: ${_user} El valor debe ir entre comillas simples. Ejemplo ${_user}=’admin’
- IMEI: ${_device} El valor debe ir entre comillas simples. Ejemplo ${_device}=’12345bht73455′
- Llave (Key): ${_hrk} El valor debe ir entre comillas simples. Ejemplo ${_hrk}=’00053′
- Número de Registro (Record): ${prikey} El valor númerico se escribe tal cual. Ejemplo ${prikey}=24034
- ${_upload_time} (La fecha y hora cuando se subieron los datos al servidor). Ejemplo: ${_upload_time} > ‘2017-01-23’
- ${_start} (La fecha/hora cuando el formulario fué iniciado)
- ${_end} (La fecha/hora cuando el formulario fué terminado)
Con Soporte Mínimo:
Este tipo de preguntas sólo se pueden verificar si fueron respondidas o no. Por ejemplo: “${video} empty”
- image
- audio
- video
- geopoint
- polygon
- line
No incluidas
el siguiente tipo de pregunta no se pueden incluir en un filtro:
- select_multiple
Operadores
Son usados para comparaciones y para expresiones más complejas. Debe haber un espacio en ambos lados de cada operador.
- = (igual)
- > (mayor que)
- < (menor que)
- >= (Mayor o igual que)
- <= (Menor o igual que)
- != (Diferente)
- not (Negación)
- – (resta)
- + (suma)
- * (multiplicación)
- / (división)
- and
- or
- like (Similar a. Use el símbolo % para coincidencia de un rango de caracteres. Use raya al piso _ para coincidencia de un caracter simple)
- not like (Retorna las filas sin coincidencia)
- || (Concatenar) este simbolo concatena valores de texto, similar a la función concat. Por ejemplo ${a} || ${b}.
Ejemplos
- ${edad} > 25
- ${edad} > 25 or ${nombre} = ‘tom’
- ${empresa} = ‘zzzz’ and ${costo_proyecto} > 100000
- ${nombre} like ‘sam%’ (Coincide “sam”, “samuel”, “sammy” etc)
- ${ciudad} like ‘_erlin’ (Coincide “Berlin”, “berlin”)
- ${ciudad} not like ‘%ich%’ (Coincidencia con todo lo que no contenga “ich”)
- ${edad} > 25 or ( ${nombre} = ‘tom’ and ${edad} > 5 )
Paréntesis
Use paréntesis para asociaciones. Como los operadores debe haber espacios en ambos lados de ellos.
Constantes
- enteros se escriben tal cual
- decimales se escriben tal cual
- textos se escriben entre comillas simples
- fechas se escriben entre comillas simples y en el formato aaaa-mm-dd. Note que necesita 2 caracteres para meses y días
Ejemplos
- ${nombre} > 25
- ${peso} < 0.5
- ${nombre} = ‘tom’
- ${pregunta_fecha} = ‘2016-04-23’
Comillas simples en textos
Si necesita buscar un texto que contiene una comilla simple en el mismo como ‘Akeola. En casos como éste, simplemente agregue una comilla simple extra. El sistema entenderá que dos comillas simples seguidas significan una comilla dentro de un texto y no el final de una cadena.Ejemplo:${nombre} = ”Akeola’
Cálculos con Fecha
Formato de fechas
El formato de fecha que maneja el servidor es ‘aaaa-mm-dd’
Intervalos de Fecha
- 1 día: {1_day}
- n días: {n_days}
- 1 hora: {1_hour}
- n horas: {n_hours}
- 1 minuto: {1_minute}
- n minutos: {n_minutes}
- 1 segundo: {1_second}
- n segundos: {n_seconds}
- hora: minuto: segundos {hh:mm:ss}
Otro
- now() (La fecha y hora actual)
Ejemplos
- ${_upload_time} > ( {pregunta_de_fecha} + {2_days} )
- ${_start} + {7_days}
- ${_start} + {7_days} + {20_minutes}
- ${_start} + {23:23:23}
- now() – ${_upload_time} < {2_days}
Formateo de fecha en PDF:
Supongamos que desea crear un PDF con el formato de fecha o fecha/hora, como “22/05/2024”. Si simplemente incluye la fecha en el PDF, se mostrará como “2024-05-22”. Ahora puede crear un cálculo de servidor con la función “to_char”:
to_char(${date_question},'DD/MM/YYYY')
Incluya este nuevo cálculo de servidor en su PDF y oculte la pregunta de fecha.
Términos Especiales
- is null (Evaluación para ver si una pregunta esta vacía o no (multimedia o GPS)
- is not null (Evaluación para ver si una pregunta fué completada o no (multimedia o GPS))
- ${_version} (La versión del formulario que fue usada para completar el registro.)
Nota: La versión es de tipo texto, si desea usarla como número deberá realizar la conversión del tipo a entero.
Ejemplos
- ${image} empty
- not ${image} empty
Convirtiendo a un tipo diferente de dato
Los calculate son almacenados siempre como textos en el servidor. Sin embargo los datos dentro de ellos pueden estar en muchos tipos como integer, decimal, text, date. Depende del cálculo que fué efectuado con él. Así podríamos tener un cálculo que creó un valor entero por ejemplo un cálculo de edad. Si se intenta realizar un cálculo en el servidor como ${edad} + 10 fallará porque ${edad} es tratado como texto. Se puede usar funciones cast para indicar al sistema que tipo de variable quiere usarEjemplos
- cast(${edad} as integer)+ 10
- cast(${question} as decimal)
Funciones
- now() (Fecha y hora actual)
- área(${qname}) (El área en metros cuadrados de un poligono)
- distance(${qname}) (la distancia de una linea en metros, puede ser distancia entre 2 puntos)
- perimeter(${qname}) (Perimetro de un poligono en metros)
Ejemplos
- Visualizar los registros correspondientes a un usuario en particular Ej: [email protected]:
${_user} = ‘[email protected]’ - Visualizar los registros correspondientes a un formulario que en una revisita (tarea) pide una foto entre otros datos:
Visitas realizadas serían los registros con foto not ${Foto} empty
Visitas pendientes: ${Foto} empty - Visualizar un registro en particular Ej: el registro # 50:
${prikey} = 50 - Visualizar un registro en particular a través de su llave Ej: el registro cuya llave es ‘Barranquilla-2019-09-20-005’:
${_hrk} = ‘Barranquilla-2019-09-20-005’ - Visualizar los registros realizados en la ciudad de Barranquilla, teniendo en cuenta que hay una pregunta de Ciudad:
${Ciudad} = ‘Barranquilla’ - Visualizar los registros que no tienen ubicación GPS:
${the_geom} is null - Visualizar los registros realizados los últimos 30 días:
${_start} > (now() – {30_days}) - Visualizar los registros realizados por el dispositivo con IMEI = ‘862940038062177’:
${_device} = ‘862940038062177’ - Visualizar los registros realizados por usuarios conductores (asumiendo los usuarios empiezan por la palabra conductor..):
${_user} like ‘conductor%’ - Visualizar los registros realizados en versión de fomulario > 3:
cast (${_version} as integer) > 3
Consola – Cálculos en servidor
Se pueden crear expresiones que aplican para realizar cálculos en el servidor desde la Consola (Registros). La sintaxis es la misma definida arriba. La única diferencia es que no se emplea el signo igual (=) ya que se estan definiendo nuevas variables y no efectuando filtros. Estas fórmulas van en la columna calculation del formulario cuando el tipo de pregunta es server_calculate.
Adicionalmente hay una sentencia que sólo aplica en este tipo de preguntas: if() la cual requiere una definición en una pestaña conditions.
