Sintaxis de fórmulas personalizadas

Las fórmulas personalizadas utilizadas en métricas de fórmulas personalizadas y campos personalizados calculados obtienen datos de una o varias fuentes, realizan opcionalmente alguna acción sobre ellos y, a continuación, presentan el resultado calculado como un valor de un campo personalizado.

Valores y propiedades

[User Story]
Effort
EntityState.Name
Feature.Priority.Importance

Cálculos básicos

[User Story]
TimeSpent + TimeRemain
Effort * Math.Pi

[Feature]
InitialEstimate * 2

[Request]
StartDate - CreateDate
CreateDate.Value.AddHours(48)
Utilice paréntesis para determinar el orden de cálculo.

Sentencias condicionales

Utilice el operador IIF para crear una instrucción condicional If-Then-Else. Requiere 3 parámetros. El primer parámetro es la condición. Si coincide (el resultado booleano es True), entonces el resultado se proporciona desde el segundo parámetro; de lo contrario, desde el tercero.
[User Story]
IIF(EntityState.IsFinal, Effort, 0)
IIF(TimeSpent > 0, TimeSpent, Effort)
Se admiten IIF anidados. Utilice operadores IIF internos para crear condiciones anidadas.
[User Story]
IIF(EntityState.Name == 'In Process', 10, IIF(EntityState.Name == 'Ready for Testing', 60, IIF(EntityState.Name == 'QA Test', 85, IIF(EntityState.Name == 'QA Complete', 90, IIF(EntityState.Name == 'Ready for Deployment' or EntityState.IsFinal == True, 100, 0)))))
Operadores compatibles
Operador Significado
= == igual a
!= no es igual a
< menor que
> mayor que
>= mayor o igual que
<= menor o igual que
&& y y
|| o o

Utilice paréntesis para determinar el orden de cálculo en expresiones lógicas complejas.

Comparación de datos
Valor 1 Valor 2 Fórmula
Texto / Cadena Texto / Cadena Nombre = «ABC»
Número Número Tasks.Count = 0
Booleano Booleano IsPrivate = Verdadero
Fecha [sin hora exacta] Fecha [sin hora exacta] EndDate.Fecha = PlannedEndDate.Fecha
Fecha con hora exacta Fecha con hora exacta ModifyDate = LastStateChangeDate
Cualquiera Vacío PlannedEndDate = nulo

Cálculos agregados

Recuento
[Feature]
UserStories.Count
Recuento condicional
[Feature]
UserStories.Where(EntityState.IsFinal == False).Count
Agregaciones
[Feature]
UserStories.Sum(Effort)
Agregaciones condicionales
[Feature]
UserStories.Where(EntityState.IsFinal == False).Sum(Effort)

Conversiones

A los números
[Feature]
Convert.ToInt32(CustomValues.Text('CustomFieldName'))
Convert.ToDecimal(CustomValues.Text('CustomFieldName'))
Convert.ToDouble(CustomValues.Text('CustomFieldName'))
A booleano
[Feature]
Convert.ToBoolean(CustomValues.Text('CustomFieldName'))
Para enviar un mensaje de texto
[Feature]
Convert.ToString(12345)
CreateDate.ToString()