Funciones de gestión de datos > Gestión de estructuras de artículos > Desarrollo de lógica de selección avanzada para módulos configurables > Pasos Básicos para definir la selección avanzada > Uso de funciones y operadores numéricos en la lógica avanzada
  
Uso de funciones y operadores numéricos en la lógica avanzada
Se pueden definir parámetros para varios tipos diferentes. En esta sección se proporcionan ejemplos para utilizar operadores y funciones en parámetros numéricos de la lógica avanzada.
Operadores para parámetros numéricos
Se pueden definir parámetros para tipos numéricos enteros o reales. Aunque estos tipos corresponden a las definiciones de tipo de Windchill a las que se puede asignar el parámetro, se asignan internamente a los tipos primitivos de Java largo y doble, respectivamente, permitiendo su uso en cualquier expresión de Java válida, como variables de tipos largo y doble.
Las expresiones se pueden definir a partir de:
El campo Expresión de un parámetro que define un valor real o por defecto del parámetro. Para obtener información adicional sobre el uso de expresiones en parámetros, consulte Ficha Información de la ventana Editar parámetro.
Una restricción de tipo Expresión requiere que la expresión se evalúe como un booleano. Para obtener más información sobre los tipos de restricción de las expresiones, consulte Editor de expresiones.
Las expresiones también se pueden utilizar en la tabla de casos avanzados. Para obtener más información sobre las tablas de casos avanzados, consulte Editor de la tabla de casos.
Operadores aritméticos
Los operadores aritméticos se pueden utilizar con parámetros numéricos en expresiones. Entre ellos se incluyen los operadores de adición (+), substracción (-), multiplicación (*) y división (/) binarias. Por ejemplo, los siguientes son ejemplos de restricciones de expresión:
2 * a – 3 * b == c / d + e / 3
A == 2.5 * B / C – D / 7.5
Los operadores unarios o de entrada única - y + también se pueden utilizar (+A equivale a A).
A == -B + 2 * C
D = +A – (-C)
El operador de módulo (%) se puede utilizar para calcular el resto de la división del primer argumento entre el segundo argumento:
A == B % 7
Operadores relacionales
Los operadores relacionales se utilizan para comparar las subexpresiones numéricas en las restricciones de expresión que deben evaluarse como un booleano. Se incluyen los siguientes operadores:
igual a (==)
mayor que (>)
menor que (<)
mayor o igual que (>=)
menor o igual que (<=)
no igual a (!=)
* 
El operador "igual a" se debe escribir como "==", no como "=".
Cuando el lado izquierdo o derecho de la expresión con el operador "==" contiene una única expresión, la expresión se trata como una asignación (=). Por ejemplo, en las siguientes restricciones de expresión:
A == 2 * B + 3 * C
B / 4 - C / 3 == A
Una vez que se conozcan los valores de los parámetros B y C, el valor del parámetro A se calculará de acuerdo con las fórmulas. En los ejemplos anteriores, el parámetro A se debe definir como un parámetro que no es de entrada, de modo que el valor se calcule mediante la fórmula en lugar de que lo introduzca el usuario y, a continuación, lo calcule la fórmula. Esto también significa que el orden de entrada es importante, donde B y C se definen antes de la aparición de A. Si se define en cualquier otro orden en el que el parámetro A tenga asignado su valor antes que los parámetros B y C, la expresión se tratará como una expresión booleana donde el valor del parámetro A se compara con el valor de la fórmula evaluada según los valores de B y C.
* 
Cuando ambos lados contienen más de un solo parámetro, se deben conocer todos los parámetros antes de poder evaluar las restricciones de expresión.
Referencia a métodos o fragmentos de expresiones para parámetros numéricos en funciones
Los parámetros numéricos también se pueden utilizar como argumentos de fábrica, Java estándar y funciones definidas por el usuario. En las siguientes secciones se proporcionan alternativas para hacer referencia a un método o un fragmento de expresión.
En los siguientes ejemplos, considere D_1, D_2, D_3, D_4, D_5 y D_6 como parámetros reales (Java dobles), y P_1, P_2, P_3 y P_4 como parámetros enteros (Java largos). Además, GeomFunctions es el nombre de la clase definida por el usuario, desde el paquete ext.geom, que contiene funciones geométricas.
Mediante la ruta de clase completa al método
El nombre completo (<package path>.<class name>.<method name>) se puede utilizar para especificar la función que pasa los parámetros como argumentos. En los siguientes ejemplos se muestra este enfoque:
D_1 == java.lang.Math.cos(D_2) + java.lang.Math.sin(D_3)
P_1 == java.lang.StrictMath.addExact(P_2, P_3)
D_4 == ext.geom.GeomFunctions.area(D_5, D_6)
Uso de declaraciones de importación
Las clases que se van a importar se pueden especificar en el fichero WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties de la siguiente manera:
exparser.import.1=java.lang.Math
exparser.import.2=java.lang.StrictMath
exparser.import.3=ext.geom.GeomFunctions
cuando se utilizan las declaraciones de importación anteriores, se puede omitir la ruta del paquete al especificar la función en las expresiones:
D_1 == Math.exp(D_2)
P_1 == StrictMath.round(D_3)
D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
Uso de declaraciones de importación estática
Las declaraciones de importación estáticas se pueden especificar en el fichero WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties de la siguiente manera:
exparser.static.import.1=java.lang.Math
exparser.static.import.2=ext.geom.GeomFunctions
se puede omitir la ruta del paquete y el nombre de clase, dejando solo el nombre del método, al especificar la función en la expresión cuando se utilizan declaraciones de importación estáticas:
D_1 == exp(D_2)
P_1 == round(D_3)
D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
Si existe un método con el mismo nombre en varias clases registradas en las importaciones estáticas, se muestra un error de excepción. Por ejemplo, java.lang.Math y java.lang.StrictMath tienen muchos nombres de método en común. Al registrar ambas clases como importaciones estáticas, se producirán condiciones de error al utilizar estos métodos comunes en las fórmulas.
Uso de abreviaturas (alias) para los métodos
La asignación entre una abreviatura de un método y la ruta completa al método se puede definir en el fichero WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties de la siguiente manera:
exparser.abbreviation.1=SURFACE_AREA=ext.geom.GeomFunctions.area
exparser.abbreviation.2=ARC_TAN=java.lang.StrictMath.atan
una vez definida la asignación entre una abreviatura de un método y su ruta completa, se pueden utilizar estos alias para acceder a la función en la expresión:
D_1 == ARC_TAN(D_2)
D_3 == SURFACE_AREA(D_4, D_5)
Esta técnica es útil si desea redefinir un método de una clase de Java para que sea igual que el nombre de una función en una aplicación diferente como Microsoft Excel. Cuando la propiedad ato.expression.rendering.context=com.ptc.wpcfg.logic.XLSExpressionRenderingContext se define en el fichero WT_HOME/wt.properties, el sistema añade alias adecuados para proporcionar acceso a la mayoría de las funciones numéricas, de texto y lógicas mediante los nombres que se utilizan en la aplicación Microsoft Excel. Entre las funciones numéricas se incluyen ABS, ACOS, ASIN, ATAN, CEILING, COS, DEGREES, FLOOR, INT, LN, LOG, MAX, MIN, MOD, POWER, RADIANS, ROUND, ROUNDDOWN, ROUNDUP, SIN, SQRT, TAN, ACOSH, ASINH, ATANH, COMBIN, COSH, EXP, FACT, LOG10, SIGN, SINH, TANH.
Uso de macros
Aunque una abreviatura proporciona un alias para la ruta completa de la función de una única función, una macro es un alias para un fragmento de expresión. Es útil cuando un fragmento de expresión se utiliza repetidamente en varias expresiones. La importación, la importación estática y la declaración de abreviatura se resuelven sobre la marcha cuando se analiza una expresión. Los fragmentos de macro se sustituyen primero para las macros de la expresión y luego esta se analiza. Como otras propiedades del analizador, las asignaciones de macros se definen en el fichero WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties de la siguiente manera:
exparser.macro.1=AREA=SURFACE_AREA(D_2, D_3)
exparser.macro.2=SUM=java.lang.StrictMath.addExact(P_2, P_3)
A continuación, se pueden utilizar las macros en las siguientes expresiones:
D_1 == AREA + 10.2
P_1 == SUM + P_4