Ejemplos de cálculos adicionales
Esta sección proporciona algunos ejemplos más de cálculos. En estos ejemplos, dataObject se utiliza para representar el objeto en el cual se realiza el cálculo. Recuerde dejar las dos primeras líneas del cálculo como estaban cuando abrió el cuadros de diálogo Editar fórmula:
import System
static def GetAttributeValue(dataObject):
Muchos de estos ejemplos utilizan atributos que no se encuentran en su base de datos. Para utilizarlos puede crear los atributos necesarios o cambiar los ejemplos para utilizar los atributos de su base de datos.
Comparar el usuario actual y el usuario elevado por
import System
static def GetAttributeValue(Incident):
if Incident.RaiseUser == null:
return 'Usuario Elevado por es nulo'
if Incident.GetCurrentUserName().ToLower() == Incident.RaiseUser.Name.ToLower():
return 'Elevado por usuario actual'
return 'Usuario actual=' + Incident.GetCurrentUserName() + ' Elevado por=' + Incident.RaiseUser.Name
La primera instrucción comprueba si el Elevado por de la incidencia es nulo, y devuelve Usuario Elevado por es nulo si es verdadero.
Si la instrucción no es verdadera, se ejecuta la segunda instrucción y comprueba si el usuario actual es el mismo que el usuario elevado por. Si lo es, devuelve Elevado por usuario actual.
.ToLower() convierte ambas cadenas en minúsculas. Se utiliza en esta línea para prevenir problemas con la distinción entre mayúsculas y minúsculas.
Si ninguna de las instrucciones son verdaderas, se ejecuta la instrucción final y se devuelven los valores Usuario actual y Elevado por.
Calcular la edad de un usuario
Edad = DateTime.Now.Year - dataObject.DateOfBirth.Year
Edad-- if DateTime.Now.Month < dataObject.DateOfBirth.Month or (DateTime.Now.Month == dataObject.DateOfBirth.Month and DateTime.Now.Day < dataObject.DateOfBirth.Day)
return Edad
Este cálculo tiene una variable llamada Edad que se determina restando el año de nacimiento del usuario del año actual. Si durante el año actual todavía no se ha llegado a la fecha de nacimiento, se resta un año más (si el mes actual es anterior al mes del nacimiento, o si el mes actual es el del nacimiento, pero el día actual es anterior).
Edad-- significa "restar 1 de Edad".
Un solo signo = significa "igualar a", dos signos == significan "es igual a".
Calcular el período de servicio de un usuario
end = DateTime.Now
end = dataObject.EndDate if dataObject.EndDate != null
los = end.Year - dataObject.StartDate.Year
los-- if end.Month < dataObject.StartDate.Month or (end.Month == dataObject.StartDate.Month and end.Day < dataObject.StartDate.Day)
return los
La variable end se establece en la fecha actual excepto si el registro del usuario tiene una EndDate (EndDate no es nula), en cuyo caso se establece como la EndDate del usuario. A continuación, se calcula la variable los restando StartDate de la variable end. Se resta un año adicional si EndDate es anterior a StartDate.
!= significa "no es igual a".
Calcular la fecha más reciente de una colección
Para realizar este cálculo, existe una colección de pedidos asociados con dataObject y se desea buscar la OrderDate más reciente para cualquiera de los elementos de la colección. (También puede utilizar la función Max(" ") de la colección del Framework, pero este ejemplo presenta algunos conceptos útiles.)
lastOrderDate = null
for order in dataObject.Orders:
if lastOrderDate == null or lastOrderDate < order.OrderDate:
lastOrderDate = order.OrderDate
return lastOrderDate
En la primera línea, la variable lastOrderDate se establece en nulo. (Recuerde que un solo signo = significa "igualar a" y dos signos == significan "es igual a".)
La segunda línea crea un bucle alrededor de la colección dataObject.Orders utilizando la variable order. La parte del cálculo que está indentada se ejecuta en orden secuencial contra todos los objetos de la colección.
Tenga en cuenta que la tercera línea está indentada un solo espacio para indicar que pertenece a la segunda línea. La tercera línea indica que si la variable lastOrderDate es nula (es así la primera vez, dado que se estableció como nula en la línea 1) o si es menor que el valor de este objeto en OrderDate, entonces...
En la cuarta línea establece que la variable lastOrderDate tenga el valor de OrderDate del objeto actual de la colección.
A continuación, el cálculo vuelve a la tercera línea para calcular el siguiente objeto de la colección y lo intenta de nuevo para saber si el valor actual de lastOrderDate es nulo (ahora ya no será así) o si es menor que el valor de OrderDate del siguiente objeto de la colección. Si es menor que dicho valor de OrderDate para el objeto, lastOrderDate se establece en su valor nuevo.
Cuando el cálculo ha tenido en cuenta todos los objetos de la colección, la última línea devuelve el valor establecido para lastOrderDate.
Sumar los resultados de los cálculos de todos los objetos de una colección
En los ejemplos anteriores se muestra cómo realizar cálculos aritméticos y cómo hacer bucles con los objetos de una colección. En este ejemplo se combinan ambas técnicas para sumar los resultados de cálculos realizados con todos los objetos de una colección.
Este cálculo determina el coste total de una colección de objetos, donde cada uno tiene el coste unitario del elemento y un valor para la cantidad de elementos. Por tanto, el coste de los objetos de la colección es el resultado de multiplicar la cantidad de elementos por su coste unitario. El coste total se calcula sumando todos los costes de los objetos. Se realiza determinando primero el coste del primer objeto, a continuación, se agrega al coste del segundo objeto, etc., hasta terminar todos los objetos del cálculo.
|
Objeto de la colección |
Cantidad |
Coste unitario |
Coste |
|
---|---|---|---|---|---|
dataObject |
Elemento 1 |
2 |
3 |
6 |
|
Elemento 2 |
1 |
4 |
4 |
|
|
Elemento 3 |
3 |
3 |
9 |
|
|
|
|
|
|
19 |
Coste total |
Coste = 0
for item in dataObject.Items:
Coste = Coste + (item.Quantity * item.UnitCost)
return Coste
En la primera línea, la variable Coste se establece en 0.
La segunda línea crea un bucle alrededor de la colección dataObject.Items utilizando la variable item.
La tercera línea (indentada) establece que la variable Coste es igual a su valor actual más el resultado de multiplicar el atributo Quantity por el atributo UnitCost A continuación, la tercera línea se repite para todos los objetos de la colección. Cada vez que el cálculo encuentra un objeto nuevo en la colección, agrega su coste al total.
Cuando el cálculo ha tenido en cuenta todos los objetos de la colección, la última línea devuelve el valor establecido para Coste.
Cálculos de colecciones de colecciones
Este cálculo es una extensión del ejemplo anterior. Determina el valor total de una colección de pedidos, donde cada pedido tiene una serie de elementos. En este ejemplo, el coste es la suma de una colección de colecciones.
|
Objeto de la colección |
objeto de la subcolección |
Cantidad |
Coste unitario |
Coste |
|
---|---|---|---|---|---|---|
pedido |
dataObject_1 |
Elemento 1_1 |
2 |
3 |
6 |
|
|
Elemento 1_2 |
1 |
4 |
4 |
|
|
|
Elemento 1_3 |
3 |
3 |
9 |
|
|
dataObject_2 |
Elemento 2_1 |
2 |
4 |
8 |
|
|
|
Elemento 2_2 |
3 |
2 |
6 |
|
|
|
Elemento 2_3 |
4 |
1 |
4 |
|
|
|
|
|
|
|
37 |
Coste total |
Coste = 0
for order in dataObject.Orders:
for item in order.Items:
Coste = Coste + (item.UnitCost * item.Quantity)
return Coste
En la primera línea, la variable Coste se establece en 0.
La segunda línea (indentada) crea un bucle alrededor de la colección dataObject.Orders utilizando la variable order.
La tercera línea (indentada dos espacios) crea un bucle alrededor de la colección dataObject.Items que está dentro de la colección dataObject.Orders utilizando la variable item.
La cuarta línea (indentada tres espacios) establece que la variable Coste sea igual a su valor actual más el resultado de multiplicar el atributo Quantity por el atributo UnitCost. A continuación, la cuarta línea se repite para todos los objetos de la colección dataObject.Items. Cada vez que el cálculo encuentra un objeto nuevo en la colección, agrega su coste al total.
Cuando el cálculo ha tenido en cuenta todos los objetos de la subcolección de elementos del primer pedido, continúa hasta la subcolección de elementos del segundo pedido y repite la cuarta línea para cada objeto de la segunda subcolección.
Cuando el cálculo ha tenido en cuenta todos los objetos de la colección dataObject.Items principal, la última línea devuelve el valor que ha establecido para Coste.
Generación de texto que incluye datos de la base de datos
En este ejemplo se describe cómo crear cadenas de texto que incluyen datos de la base de datos.
return String.Format("{0} fue actualizado por última vez por {1}.", dataObject.RaiseUser.Title, dataObject.LastUpdateUser.Title)
La función String.Format(" ", {0}, {1}. ...) devuelve una cadena en la que los parámetros {0}, {1}, etc. definen de dónde obtener los datos que se utilizarán en la cadena. Tenga en cuenta que los parámetros comienzan en {0}. En el cálculo de ejemplo, {0} se reemplaza por el nombre Elevado por (dataObject.RaiseUser.Title) y {1} se reemplaza por el nombre del último usuario que actualizó el registro (dataObject.LastUpdateUser.Title).
Por ejemplo, si Juan Moreno registró la incidencia y Laura Díaz lo guardó por última vez, la cadena será: Hola, Juan Moreno, Laura Díaz ha sido la última persona en actualizarla.