Esta guía explica cómo escribir expresiones para propiedades personalizadas, cómo usar el Rastro de evaluación para depurarlas y cómo se comportan los diferentes tipos de campo (texto, número y booleano) dentro de una expresión.
Anatomía de una expresión

Una expresión es una fórmula que calcula un valor automáticamente a partir de otros campos del registro. A continuación se muestra un ejemplo que produce una puntuación ponderada:
([ROI / Payback Period-Value] * .30) + ([Customer Experience-Value] * .25)
+ ([Scalability-Value] * .25) + ([Implementation Complexity-Value] * .40) + 3 + 2
Desglose
|
Componente |
Qué hace |
|---|---|
|
|
Una referencia de campo — los corchetes traen el valor actual de ese campo del registro. |
|
|
Un operador de multiplicación seguido de un literal numérico. Multiplica el valor del campo por 0.30 (30 %). |
|
|
Los paréntesis agrupan un subcálculo para que se evalúe primero. |
|
|
El operador de suma suma los resultados. |
|
|
Literales numéricos simples que se suman al total. |
Cuando la expresión anterior se evalúa sobre un registro donde:
-
[ROI / Payback Period-Value]→ 4 -
[Customer Experience-Value]→ 2 -
[Scalability-Value]→ 1 -
[Implementation Complexity-Value]→ 2
el resultado es 7.75.
El rastro de evaluación
Cuando hace clic en Evaluar en el editor de expresiones, se muestra un resultado. El Rastro de evaluación se expande a continuación y lo guía a través de cada paso que el motor siguió para llegar a ese resultado. Haga clic en Show trace para revelarlo y en Ocultar rastro para contraerlo.
El rastro tiene cuatro secciones:
1. Valores de campo
Enumera cada referencia de campo encontrada en la expresión junto con su valor actual del registro de muestra cargado.
[ROI / Payback Period-Value] ⇒ 4
[Customer Experience-Value] ⇒ 2
[Scalability-Value] ⇒ 1
[Implementation Complexity-Value] ⇒ 2
Sugerencia: Si un campo muestra (null) aquí, el registro no tiene un valor para ese campo. Los campos nulos pueden causar resultados inesperados — consulte Manejo de valores NULL a continuación.
2. Expresión sustituida
El motor reemplaza cada referencia de campo por su valor resuelto para que pueda ver el cálculo en bruto:
(4 * .30) + (2 * .25) + (1 * .25) + (2 * .40) + 3 + 2
Esto es útil para detectar cuándo un campo se resolvió en un valor inesperado.
3. Resultados de subexpresiones
Cada grupo entre paréntesis se evalúa individualmente:
(4 * .30) ⇒ 1.2
(2 * .25) ⇒ 0.5
(1 * .25) ⇒ 0.25
(2 * .40) ⇒ 0.8
Si una subexpresión produce un número inesperado, concentre su depuración ahí.
4. Resultado final
La respuesta totalmente calculada:
Result ⇒ 7.75
Uso de campos de muestra
Antes de poder evaluar una expresión, necesita un contexto de muestra — un conjunto real o representativo de valores de campo con el que hacer pruebas.
-
Carga automática — Cuando habilita expresiones en una propiedad personalizada y empieza a editar, el editor carga automáticamente un contexto de muestra a partir del tipo de entidad actual (Proyecto, Acción o Persona). El menú desplegable Campos en el pie del editor enumera todos los nombres de campo disponibles y su valor de muestra.
-
Insertar campos — Haga clic en el botón Campos para explorar los nombres de campo disponibles. Al seleccionar un campo, este se inserta en la expresión entre corchetes, por ejemplo,
[Priority]. -
Verificar la validez del campo — El editor resalta cualquier token de campo que no exista en el contexto cargado. Si ve una insignia roja "Inválido" junto a un token, el nombre del campo está mal escrito o no está disponible para este tipo de entidad.
-
Revisar valores — Abra el menú desplegable Campos para ver el valor de muestra junto a cada nombre de campo. Esto le indica si el campo es un número, un texto, un booleano o nulo.
Tipos de campo y cómo se comportan
Campos numéricos
Los campos numéricos (por ejemplo, las propiedades Puntuación y Número) se resuelven en un valor numérico dentro del contexto de la expresión.
-
Puede usar operadores aritméticos directamente:
[Score] * 2,[Budget] + 1000. -
La división por cero producirá un error de evaluación.
-
Si un campo numérico está vacío (nulo), las operaciones aritméticas con él devuelven nulo. Protéjase contra esto con
COALESCE([Score], 0).
Campos de texto (String)
Los campos de texto (por ejemplo, Estado, Categoría, el texto de visualización de una Opción) se resuelven en un valor de string.
-
Compare con comillas:
[Status] = "Active". -
La comparación de strings es insensible a mayúsculas y minúsculas.
-
El operador
+en dos strings realiza concatenación:"Phase: " + [Phase]producePhase: Build.
Campos booleanos (Sí/No)
Los campos Sí/No se resuelven en verdadero o falso.
-
Úselos directamente en condiciones:
IF([IsActive], "Yes", "No"). -
Combine con
AND/OR:[IsActive] AND [HasBudget]. -
Los valores
FALSE,0,""(string vacío),NULLy la string literal"false"se tratan todos como falsy. Todo lo demás es truthy. -
Tenga en cuenta que la string
"false"es un caso especial — aunque es una string no vacía, el motor la trata como falsy para alinearse con el tipo de dato Sí/No.
Campos de fecha y fecha/hora
-
Las fechas se comparan cronológicamente:
[DueDate] < [StartDate]. -
Use la función
DIFFpara obtener la diferencia entre dos fechas:DIFF([StartDate], [EndDate], "day").
Qué sucede cuando se mezclan tipos
Uso de un valor de texto en una operación numérica
Si un campo es de tipo texto (string) y usted intenta usarlo en una operación aritmética como la multiplicación o la resta, el motor de expresiones intentará convertir la string en un número.
|
Escenario |
Ejemplo |
Resultado |
|---|---|---|
|
String contiene un número válido |
|
|
|
String no es un número |
|
Error — el motor no puede convertir "High" a un número y la expresión falla. |
|
String está vacía o es nula |
|
El operador |
Advertencia de validación: Al guardar una definición de propiedad, el editor valida la expresión sustituyendo valores de marcador de posición para cada campo referenciado. Si se usa un campo de texto en una posición donde se espera un número, la validación marcará esto como un error. Corríjalo de una de las siguientes formas:
Cambiando el campo referenciado a un tipo de dato Número, o
Envolviendo el campo en una protección:
IF([TextField] = NULL, 0, [TextField])para que siempre se resuelva en un número.
Uso de un valor numérico en una operación de string
Cuando usa + y un lado es una string, el motor convierte el número a texto y los concatena:
"Score=" + [Score]
Si [Score] es 85, el resultado es la string "Score=85".
Consejos comunes de depuración
-
Siempre haga clic en Evaluar después de escribir o cambiar una expresión. El rastro muestra de inmediato si los valores de los campos son los que espera.
-
Revise la Expresión sustituida para ver el cálculo en bruto. Si un campo se resolvió en
nullo una string inesperada, esa es la fuente del problema. -
Observe los Resultados de subexpresiones para aislar qué grupo está produciendo el número incorrecto.
-
Esté atento a los desajustes de tipo. Un campo que usted cree que es numérico podría en realidad estar almacenado como texto (por ejemplo, un valor de opción). El rastro mostrará su tipo resuelto.
-
Use COALESCE para mayor seguridad. Envuelva cualquier campo que pudiera estar vacío:
COALESCE([OptionalScore], 0)garantiza un cero en lugar de nulo. -
Use IF para ramificaciones. Proteja las expresiones con
IF([Field] = NULL, <default>, <calculation>)para evitar errores en registros incompletos. -
Verifique si hay tokens inválidos. Si aparece una insignia de nombre de campo en rojo debajo de la expresión, el nombre no coincide con ningún campo disponible. Verifique la ortografía, los espacios y las mayúsculas y minúsculas.
Referencia rápida
Operadores
|
Operador |
Descripción |
|---|---|
|
|
Suma (números) o concatenación (strings) |
|
|
Resta |
|
|
Multiplicación |
|
|
División |
|
|
Módulo (resto) |
|
|
Igual a |
|
|
Distinto de |
|
|
Comparaciones |
|
|
Ambos lados deben ser verdaderos |
|
|
Al menos un lado debe ser verdadero |
|
|
Niega una condición |
Funciones
|
Función |
Sintaxis |
Descripción |
|---|---|---|
|
|
|
Devuelve uno de dos valores según una condición. |
|
|
|
Evalúa las condiciones en orden; devuelve la primera coincidencia o el valor predeterminado. |
|
|
|
Devuelve el primer valor no nulo. |
|
|
|
Valor absoluto de un número. |
|
|
|
Diferencia entre dos fechas en la unidad especificada (día, mes, año). |
|
|
|
Verdadero si el texto contiene la string de búsqueda. |
|
|
|
Verdadero si el texto comienza con el prefijo. |
|
|
|
Verdadero si el texto termina con el sufijo. |
Reglas de veracidad
|
Valor |
Se trata como |
|---|---|
|
|
Falsy |
|
Cualquier número distinto de cero, string no vacía (excepto |
Truthy |
Ejemplo práctico
Objetivo: Calcular una puntuación de prioridad ponderada a partir de cuatro campos de calificación y agregar una línea base fija de 5.
Expresión:
([ROI / Payback Period-Value] * .30) + ([Customer Experience-Value] * .25)
+ ([Scalability-Value] * .25) + ([Implementation Complexity-Value] * .40) + 3 + 2
Salida del rastro con valores de muestra:
|
Paso |
Detalle |
|---|---|
|
Valores de campo |
ROI / Payback Period-Value → 4, Customer Experience-Value → 2, Scalability-Value → 1, Implementation Complexity-Value → 2 |
|
Expresión sustituida |
|
|
Resultados de subexpresiones |
(4 * .30) → 1.2, (2 * .25) → 0.5, (1 * .25) → 0.25, (2 * .40) → 0.8 |
|
Resultado final |
1.2 + 0.5 + 0.25 + 0.8 + 3 + 2 = 7.75 |
Si alguna de estas calificaciones estuviera vacía, envolverlas en COALESCE evitaría un resultado nulo:
(COALESCE([ROI / Payback Period-Value], 0) * .30)
+ (COALESCE([Customer Experience-Value], 0) * .25)
+ (COALESCE([Scalability-Value], 0) * .25)
+ (COALESCE([Implementation Complexity-Value], 0) * .40) + 3 + 2