Saltar al contenido principal
Base de conocimientosv15.1

Campos de fórmula

Celoxis calcula automáticamente el valor de un campo personalizado basado en fórmulas. Este valor se calcula cada vez que se visualiza el campo. El lenguaje de expresiones de fórmulas es sofisticado, lo que permite realizar manipulaciones de datos complejas, incluyendo transformaciones aritméticas, de cadenas y de fechas.

Sintaxis

Celoxis trata todo lo que está entre ${ y } como expresiones. Las fórmulas pueden definirse como expresiones puras, por ejemplo ${me.budget * 0.10}, o contener una mezcla de texto y expresiones como El proyecto ${me.name} se creó el ${me.created} cuando todo lo que está encerrado entre ${ y } se trata como una expresión y se evalúa, mientras que todo lo que está fuera se copia a la salida textualmente tal cual. Para los curiosos, si las fórmulas se adjuntaran a un proyecto cuyo nombre fuera XYZ y cuyo presupuesto fuera de $10,000, la salida sería 1000 y El proyecto XYZ se creó el jueves 20 de junio de 2013 a las 08:30:16 EDT, respectivamente.

El operador punto

El operador punto se utiliza para hacer referencia a una propiedad de un objeto. En el ejemplo ${me.budget * 0.10}, me.budget se refiere al presupuesto del proyecto si el campo personalizado está asociado a él. El operador punto también se puede utilizar para llamar a una función (o método) de un objeto. En el ejemplo ${me.name.toUpperCase()}, toUpperCase es una llamada a una función que convierte el nombre del proyecto a 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 realizar comparaciones con otros valores o con literales booleanos, de cadena, enteros o de punto flotante.
  • Vacío: El vacío es una operación de prefijo que se puede utilizar para determinar si un valor es nulo o está vacío.
  • Condicional: A ? B : C. Evaluar B o C, dependiendo del resultado de la evaluación de A.
  • Asignación: =
  • Punto y coma: ;

La precedencia de los operadores, de mayor a menor y de izquierda a derecha, es la siguiente:

  • [] .
  • () (Se utiliza para cambiar la precedencia de los operadores)
  • - (unario) ¡no! vacío
  • * / div % mod
  • + - (binario)
  • +=
  • < > <= >= lt gt le ge
  • == != igual a
  • && y
  • || o
  • ? :
  • =
  • ;

Palabras reservadas

Las siguientes palabras están reservadas para el EL y no deben usarse como identificadores:

yonoeq
nordesteltgtel
geverdaderoFALSOnulo
instancia devacíodivmod

Ejemplos básicos

FórmulaResultado
${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 código del objeto es nulo o una cadena vacía.

Funciones de utilidad

Se han proporcionado las siguientes funciones auxiliares:

formatoFecha(fecha)El valor de la fecha formateado (sin la hora) según las preferencias del usuario.
formatoFechaHora(fechahora)El formato de fecha y hora según las preferencias del usuario.
formatoNúmero(número)El valor formateado del número según la configuración regional del usuario.
formatoMoneda(número)El valor de la moneda se formatea según la moneda especificada en las preferencias de la empresa y el formato numérico según la configuración regional del usuario. Por ejemplo: $25,000
horasAHHMM(número)Formatea las horas en el formato HH:MM. Por ejemplo, 2.5 dará como resultado 2:30

Escribir fórmulas de varias líneas

Para escribir el código de la fórmula en varias líneas, utilice los = y ; . El valor de retorno es la última instrucción de la fórmula. Por ejemplo:

${ apc = yo.actualPercentComplete; ppc = yo.plannedPercentComplete; (apc - ppc)/ppc }

El tipo de datos devuelto por la fórmula

Al definir una fórmula, debe seleccionar un tipo de datos de fórmula. Esto le indica al sistema qué valor debe devolver la fórmula. Celoxis formatea automáticamente el valor devuelto según el tipo de datos. Por ejemplo, si indica que el tipo de retorno es una moneda, si su fórmula devuelve el número 10000, el resultado será $10,000; es decir, Celoxis formatea automáticamente el número y le añade el símbolo de la moneda de la empresa.

El objeto yo

El `me` en la fórmula representa el objeto para el cual se está evaluando la fórmula. Por ejemplo, supongamos que nuestro campo de fórmula " Anticipo del cliente" se define como ${me.budget * 0.1}, es decir, representa el 10% del presupuesto. Si hemos asociado este campo tanto a proyectos como a tareas, al evaluar la fórmula para un proyecto, el `me` será un proyecto, mientras que para una tarea será un objeto de tarea.

Referencia de campo

Para ver la lista de campos disponibles, haga clic en la Referencia de campo en la pantalla de agregar/editar campo personalizado. Haga clic en el icono de signo más para expandir la lista de variables disponibles para las distintas entidades.

Manejo de errores

Cuando se produce un error al evaluar una fórmula, por ejemplo, al introducir un número en lugar de una cadena de texto, el mensaje mostrará ERR!.Pase el ratón por encima para obtener una descripción más detallada del problema.

Ejemplos

Supongamos que tenemos un proyecto con los siguientes datos.

EtiquetaCampoValor
IDENTIFICACIÓNidentificación1234
NombrenombrePreparación del espacio de oficina
ComenzariniciarCalendario10 de enero de 2011
Presupuestopresupuesto5000
Costo estimadoCosto estimado4000
Costo realcosto real3800

A continuación, veremos algunos ejemplos sencillos. Supondremos que la fórmula está asociada a proyectos y que el resultado de ejemplo corresponde al proyecto descrito anteriormente.

FórmulaProducciónComentarios
${me.id * 10}12340El ID se multiplica por 10
yo.id * 10yo.id * 10No está encerrado entre ${} y, por lo tanto, se copia a la salida textualmente.
ID:${me.id}ID:1234Texto mezclado con una expresión
${me.name + 100}¡ERRAR!No se pueden realizar operaciones aritméticas con el tipo String.
${me.abcd}¡ERRAR!yo no tengo una propiedad llamada abcd.
${formatDate(me.startCalendar)}10 de enero de 2011Formatea la fecha de inicio según el estilo de formato de fecha del usuario.
${me.actualCost gt (me.budget*.9) ? 'ALERTA' : 'OK'}ALERTAUn ejemplo de cómo escribir if/then/else
${formatCurrency(me.budget)}$ 5,000Suponiendo que su símbolo de moneda sea $
${round(((yo.presupuesto - yo.costo real)*100)/yo.presupuesto)}%24%Calcula el porcentaje del presupuesto restante

Ejemplo avanzado: Indicador de estado de tu propio horario

Digamos que desea tener un indicador de estado del cronograma que se base en valores de referencia, es decir, la fecha que realmente le prometió al cliente en lugar de la fecha de finalización del plan actual.

Deberás crear un campo de fórmula, adjuntarlo a los proyectos, establecer su tipo de datos de salida como Texto e ingresar la fórmula de la siguiente manera:

${ pc = me.actualPercentComplete; pFinish = me.projectedFinishCalendar; bFinish = me.baselineFinish; now = Date.now(); label = 'Desconocido'; label = Date.before(pFinish, bFinish) ? 'A tiempo' : label; label = Date.after(pFinish, bFinish) ? 'En riesgo' : label; label = Date.after(now, bFinish) ? 'Retrasado' : label; label = pc == 100 ? 'Completado' : label; label }

En la de Color de la fórmula, coloque las asignaciones como:

ResultadoColor
A tiempoVerde
En riesgoNaranja
AtrasadoRojo
TerminadoMarrón

Salida de ejemplo