Campos de la fórmula
El valor de un campo personalizado con fórmula es calculado automáticamente por Celoxis basándose en su fórmula. El valor se calcula cada vez que se visualiza el campo. El lenguaje de expresión de fórmulas es sofisticado, por lo que puede realizar manipulaciones de datos complejas, incluidas transformaciones aritméticas, de cadenas y de fechas.
Sintaxis
Celoxis trata cualquier cosa entre${
y }
como expresiones.
Las fórmulas pueden ser definidas como expresiones puras, por ejemplo ${me.budget * 0.10}
o contienen una mezcla de texto y expresiones como The project ${me.name} was created on ${me.created}
cuando cualquier cosa encerrada en ${
y }
se trata como una expresión y se evalúa, mientras que todo lo que está fuera de ella se copia a la salida tal cual.
Para los curiosos, si las fórmulas se adjuntaran a un proyecto cuyo nombre fuera XYZ y el presupuesto fue $10,000 el resultado sería 1000 y El proyecto XYZ fue creado el jue 20 de junio 08:30:16 EDT 2013 respectivamente.
El operador de puntos
El operador de punto se utiliza para referirse a una propiedad de un objeto. En el ejemplo${me.budget * 0.10}
el me.presupuesto se refiere al presupuesto del proyecto si el campo personalizado se adjunta a un proyecto.
El operador de puntos también puede utilizarse para llamar a una función (también conocido como método) de un objeto. En el ejemplo ${me.name.toUpperCase()}
el toUpperCase es una llamada a una función que transformaría el nombre del proyecto en mayúsculas.
Operadores
- Aritmética: +, - (binario), *, / y div, % y mod, - (unario)
- Concatenación de cadenas: +=
- Lógico: y, &&, o, ||, no, !
- Relacional: ==, eq, !=, ne, <, lt, >, gt, <=, ge, >=, le. Se pueden hacer comparaciones con otros valores o con literales booleanos, de cadena, enteros o de coma flotante.
- Vacío: El Vacío es una operación prefijada que se puede utilizar para determinar si un valor es nulo o vacío.
- Condicional: A ? B : C. Evaluar B o Cdependiendo del resultado de la evaluación de A.
- Asignación: =
- Punto y coma: ;
- [] .
- () (utilizado para cambiar la precedencia de los operadores)
- - (unario) ¡no! vacío
- * / div % mod
- + - (binario)
- +=
- < > <= >= lt gt le ge
- == != eq ne
- && y
- || o
- ? :
- =
- ;
Palabras reservadas
Las siguientes palabras están reservadas para la EL y no deben utilizarse como identificadores:y | o | no | eq |
ne | lt | gt | le |
ge | Verdadero | Falso | nulo |
instanceof | Vacío | div | mod |
Ejemplos básicos
Fórmula | Resultado |
---|---|
${1 > (4/2)} | Falso |
${4.0 >= 3} | Verdadero |
${100.0 == 100} | Verdadero |
${(10*10) ne 100} | Falso |
${'a' < 'b'} | Verdadero |
${'hip' gt 'hit'} | Falso |
${4 > 3} | Verdadero |
${1.2E4 + 1.4} | 12001.4 |
${3 div 4} | 0.75 |
${10 mod 4} | 2 |
${!empty me.code} | Falso si el objeto código es nulo o una cadena vacía. |
Funciones de utilidad
Se ha proporcionado el siguiente conjunto de funciones de ayuda:
formatFecha(fecha) | El valor formateado de la fecha (sin la hora) según las preferencias del espectador. |
formatDateTime(datetime) | El valor formateado de la fecha y la hora según las preferencias del espectador. |
formatNumber(number) | El valor formateado del número según la ubicación del espectador. |
formatoMoneda(número) | El valor formateado de la moneda según la moneda especificada en las preferencias de la empresa y el formato de número según la ubicación del espectador. Por ejemplo, 25.000 dólares |
horasToHHMM(número) | Formatea las horas en la forma HH:MM. Por ejemplo, 2.5 resultará en 2:30 |
techo(número) | El entero más cercano mayor que la entrada. Por ejemplo, ${ceil(5.3)} devolverá 6 |
piso(número) | El entero más cercano más pequeño que la entrada. Por ejemplo, ${floor(4.8)} devolverá 4 |
abs(número) | El valor absoluto de un número. Por ejemplo, ${abs(-3.2)} devolverá 3.2 |
ronda(número) | El valor redondeado de la entrada. Por ejemplo, ${round(3.6)} devolverá 4 |
roundTo(dígitos, número) | The rounded value of input number to the number of digits specified. For example ${roundTo(2, 3.667)} will return 3.67; while ${roundTo(0, 3.667)} will return 4. |
String.contains(pajar, aguja) | Compruebe si Aguja existe en Pajar |
String.endsWith(string, suffix) | Compruebe si Cadena termina con Sufijo |
String.replace(txt, search, replace) | Reemplaza todas las ocurrencias de Buscar en en txt con Sustituye a |
String.startsWith(string, prefijo) | Compruebe si Cadena comienza con Prefijo |
String.trim(cadena) | Recorta los espacios en blanco y los caracteres de control de los extremos del Cadena |
String.blankIfNull(str) | Si str es nulo, devuelve una cadena en blanco; en caso contrario, devuelve el valor str sí mismo. |
Fecha.antes(fecha1, fecha2) | Devoluciones Verdadero si la fecha1 es anterior a la fecha2. |
Date.equal(date1, date2) | Devoluciones Verdadero si la fecha1 es igual a la fecha2. |
Fecha.después(fecha1, fecha2) | Devoluciones Verdadero si la fecha1 es posterior a la fecha2. |
Date.format(fecha, formato) | El valor formateado de la fecha según el formato. Para los formatos soportados, vea esto. |
Fecha.horasEntre (de, a) | Devuelve el número de horas transcurridas entre de y a. |
Date.workingHoursBetween(from, to) | Devuelve el número de horas de trabajo entre de y a basado en el calendario laboral por defecto de la empresa. Si los días transcurridos entre de y a es más de 30, las horas transcurridas se devuelven. |
Fecha.másHoras(fecha, horas) | Añade horas a fecha y devuelve esa fecha. |
Date.isoToDate(string) | Convierte Cadena en formato ISO a una fecha. |
Date.now() | Devuelve una fecha que representa la fecha y la hora actuales |
Colección.tamaño(v) | Devoluciones talla de v. |
Colección.contains(pajar, aguja) | Compruebe si Aguja existe en Pajar |
Collection.containsAny(pajar, agujas) | Compruebe si al menos una Aguja existe en el Pajar |
Colección.containsAll(pajar, agujas) | Compruebe si todos agujas existe en el Pajar |
Escribir fórmulas multilíneas
Para escribir el código de la fórmula en una línea múltiple, utilice la tecla = y ; operadores. El valor de retorno es el último enunciado de la fórmula. Por ejemplo:
${ apc = me.actualPercentComplete; ppc = me.plannedPercentComplete; (apc - ppc)/ppc }
El tipo de datos de retorno de la fórmula
Mientras se define una fórmula, se debe seleccionar un Tipo de datos de la fórmula. Esto le dice al sistema lo que debe esperar que la fórmula devuelva. Celoxisformatea el valor de retorno automáticamente basado en el tipo de datos. Por ejemplo, si indica que el tipo de retorno es una moneda, entonces si su fórmula devuelve un número 10000el resultado sería $10,000 es decir, Celoxisautomáticamente formatea el número y lo prefija con el símbolo de la moneda de la empresa.
El me Objeto
El me El objeto en la fórmula representa el objeto para el cual la fórmula está siendo evaluada. Por ejemplo, digamos que nuestro campo de la fórmula Avance del cliente se define como ${me.budget * 0.1}
es decir, representa el 10% del presupuesto. Si hemos adjuntado este campo tanto a los proyectos como a las tareas, entonces al evaluar la fórmula de un proyecto, el me sería un proyecto mientras que para una tarea sería un objeto de tarea.
Referencia de campo
Para ver la lista de campos disponibles, haga clic en la pestaña Referencia de Campo en la pantalla de añadir/editar campo personalizado. Haga clic en el icono más para expandir la lista de variables disponibles para las diferentes entidades.
Tratamiento de errores
Cuando se produce un error al evaluar una fórmula, por ejemplo, si se ha introducido un número en lugar de una cadena, la salida mostrará lo siguiente ERR!. Mueva el ratón sobre él para obtener una mejor descripción del problema.
Ejemplos
Supongamos que tenemos un proyecto con los siguientes datos.
Etiqueta | Campo | Valor |
---|---|---|
ID | id | 1234 |
Nombre | Nombre | Creación de espacio de oficina |
Inicio | startCalendar | 10 de enero de 2011 |
Presupuesto | presupuesto | 5000 |
Costo estimado | estimatedCost | 4000 |
Costo real | actualCost | 3800 |
Ahora veremos algunos ejemplos sencillos. Supondremos que la fórmula se adjunta a los proyectos y que el resultado de la muestra es para el proyecto descrito anteriormente.
Fórmula | Salida | Comentarios |
---|---|---|
${me.id * 10} | 12340 | id se multiplica por 10 |
me.id * 10 | me.id * 10 | No está encerrado en ${} y, por tanto, se copia en la salida literalmente. |
ID:${me.id} | ID:1234 | Texto mezclado con una expresión |
${me.name + 100} | ERR! | No se puede realizar aritmética en el tipo de String. |
${me.abcd} | ERR! | me no tiene una propiedad llamada abcd. |
${formatDate(me.startCalendar)} | 10 de enero de 2011 | Da formato a la fecha de inicio según el estilo de formato de fecha del usuario. |
${me.actualCost gt (me.budget*.9) ? 'ALERT' : 'OK'} | ALERTA | Un ejemplo de cómo escribir if/then/else |
${formatCurrency(me.budget)} | $ 5,000 | Asumiendo que el símbolo de su moneda es $ |
${round((me.budget - me.actualCost)*100)/me.budget)}% | 24% | Calcula el % de presupuesto restante |
Ejemplo Avanzado: El indicador de salud de su propio horario
Digamos que usted quiere tener un indicador de salud del programa que se basa en líneas base, es decir, la fecha que realmente prometió al cliente en lugar de la fecha de finalización del plan actual.
Creará un campo de fórmula, lo adjuntará a los proyectos, establecerá su tipo de datos de salida en Texto e introducir la fórmula como:
${ pc = me.actualPercentComplete; pFinish = me.projectedFinishCalendar; bFinish = me.baselineFinish; now = Date.now(); label = 'Unknown'; label = Date.before(pFinish, bFinish) ? 'On Time' : label; label = Date.after(pFinish, bFinish) ? 'At Risk' : label; label = Date.after(now, bFinish) ? 'Overdue' : label; label = pc == 100 ? 'Completed' : label; label }
En la parte de Color de la fórmula ponga las asignaciones como:
Resultado | Color |
---|---|
A tiempo | Verde |
En riesgo | Naranja |
Atrasado | Rojo |
Completado | Marrón |