Uso de funciones en expresiones avanzadas
En este tema se explican distintas formas de definir las características que se utilizan en las expresiones asignadas a los vínculos de uso y los artículos y evaluadas durante el proceso de filtrado de opción realizado por el delegado de filtrado de opción. En las secciones subsiguientes se tratan los aspectos que se indican a continuación:
Las distintas formas de especificar un alias para que una función reduzca el tamaño y active la reutilización de las expresiones.
Información sobre cómo el implementador de las funciones puede obtener acceso a los objetos de la estructura de filtrado: el filtro de navegación de opciones, los criterios de navegación, el conjunto de opciones, la fecha de efectividad, los objetos que se filtran o se implican en el proceso de filtrado (tales como artículos, vínculos de uso y datos asociados a ellos).
Resumen de la definición de función y su uso en expresiones
Defina una clase Java con un método estático público (una función) que tome los argumentos que desee para pasar a la función. Los únicos argumentos de variables que se pueden pasar a las funciones son las elecciones (en concreto, su estatus de selección true, si está seleccionado, y false, si no está seleccionado) y el objeto del tipo com.ptc.windchill.option.model.ATONavigationBean proporcionado y completado por la estructura de filtrado en tiempo de ejecución (descrito en una sección posterior). Una vez definido, el método estático público de la clase Java se puede utilizar en la expresión de varias maneras diferentes mediante los formatos siguientes:
Mediante la ruta de clase completa al método
Mediante el formato ClassName.MethodName(), si se ha definido la importación correspondiente para la clase
Mediante el formato MethodName() format (), si se ha definido la importación estática correspondiente para la clase
Mediante MethodAbbreviation(), si la abreviatura (o el alias) se define para el método
Mediante la macro, si está definida
En las siguientes secciones se encontrarán ejemplos para crear algunas funciones y expresiones de muestra con estas funciones para cada una de las situaciones ya mencionadas. Las funciones se pueden escribir para aprovechar la ventaja que ofrece el objeto ATONavigationBean variable, que proporciona acceso al objeto NavigationCriteria actual, el objeto ATONavigationFilter, la fecha de efectividad de filtro de opciones, el conjunto de opciones de filtro de opciones, las elecciones seleccionadas en el filtro de opciones, el estatus de selección de todas las elecciones en el objeto OptionSet, el objeto NavigationUnit actual con el nodo Se puede filtrar (por ejemplo, WTPartUsageLink) y los nodos de soporte (por ejemplo, WTPart hijo del vínculo de uso). En particular, esto permite utilizar otros objetos (tales como valores de atributo en artículos, vínculos de uso y apariciones de uso) en las decisiones de filtrado.
Definición de la función
Para definir una función, escriba una clase Java con un método estático público con los argumentos deseados.
Código Java:
Explicación:
Este es un ejemplo de una función booleana estática que toma cuatro argumentos booleanos y devuelve un valor según lo determinado en la siguiente tabla de verdad (T significa verdadero, F significa falso):
Tabla de verdad:
x1
x2
x3
x4
Retorno
T
F
T
F
T
T
T
F
F
T
F
T
F
T
T
F
F
T
T
T
El resto de combinaciones de x1, x2, x3 y x4 producen el valor FALSE (F).
Para llegar a la expresión correspondiente para cada fila, sustituya el nombre del parámetro para T (por ejemplo, x1), la negación del parámetro para F (! x1) y concatene estos resultados con los operadores de conjunción (&&). Por ejemplo, la primera fila da como resultado la siguiente expresión:
x1 && ! x2 && x3 && ! x4
A continuación, concatene las expresiones booleanas de la fila con los operadores de disyunción (||) para llegar a la expresión que representa la tabla de verdad.
* 
Si se utiliza la misma elección repetidamente en la expresión, se puede beneficiar de la introducción de una función y su uso en la expresión, tal como se explica a continuación.
La función puede devolver cualquier tipo (por ejemplo, cualquier geometría numérica, tal como ent, doble, decimal) y luego compararla con la constante del mismo tipo para producir una expresión booleana, como se indica en el siguiente ejemplo.
Estas clases de funciones permiten filtrar las configuraciones que superen el coste total especificado. Otro enfoque es pasar el entero del coste como otro parámetro a la función y realizar la comparación dentro de la función en sí. Esto devuelve un booleano de la función.
Uso en expresiones
En los ejemplos siguientes, se entiende que existen las elecciones RED, GREEN, BLUE, WHITE de la opción COLOR; UK, US, MX de la opción COUNTRY; PLASTIC, STEEL, WOOD de la opción MATERIAL y SMALL, MEDIUM, LARGE, X_LARGE de la opción SIZE. También se utilizan las elecciones hasHD_TV, hasBLUERAY, hasWI_FI.
Mediante la ruta de clase completa al método
En este caso, se utiliza la ruta de clase completa más el nombre del método para especificar la función. Como argumentos para la función en este ejemplo, se pasan los nombres de elecciones. En los siguientes ejemplos se muestra este enfoque:
com.ptc.ext.BooleanTableFunction.evaluate(RED, UK, PLASTIC, LARGE)
BLUE && com.ptc.ext.BooleanTableFunction.evaluate(GREEN, US, STEEL, SMALL) || MEDIUM
com.ptc.ext.CostFunction.getCost(hasHD_TV, hasBLUERAY, hasWI_FI)> 100
Uso de declaraciones de importación
Las clases que deben importarse se pueden especificar en el fichero de propiedades WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties de la siguiente manera:
exparser.import.1=com.ptc.ext.BooleanTableFunction
exparser.import.2=com.ptc.ext.CostFunction
En este caso, se puede omitir la ruta del paquete al especificar la función en la expresión:
BooleanTableFunction.evaluate(RED, UK, PLASTIC, LARGE)
BLUE && BooleanTableFunction.evaluate(GREEN, US, STEEL, SMALL) || MEDIUM
CostFunction.getCost(hasHD_TV, hasBLUERAY, hasWI_FI)> 100
Uso de declaraciones de importación estática
En este caso, primero se deben especificar las declaraciones de importación estática en el fichero de propiedades WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties, de la siguiente manera:
exparser.static.import.1=com.ptc.ext.BooleanTableFunction
exparser.static.import.2=com.ptc.ext.CostFunction
En este caso, 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:
evaluate(RED, UK, PLASTIC, LARGE)
BLUE && evaluate(GREEN, US, STEEL, SMALL) || MEDIUM
getCost(hasHD_TV, hasBLUERAY, hasWI_FI) > 100
Uso de abreviaturas (alias) para los métodos
En este caso, se define la asignación entre una abreviatura para un método y la ruta completa al método en el fichero de propiedades en WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties de la siguiente forma:
exparser.abbreviation.1=EVAL=com.ptc.ext.BooleanTableFunction.evaluate
exparser.abbreviation.2=COST=com.ptc.ext.CostFunction.getCost
A continuación, estos alias se pueden utilizar para acceder a la función en la expresión:
EVAL(RED, UK, PLASTIC, LARGE)
BLUE && EVAL(GREEN, US, STEEL, SMALL) || MEDIUM
COST(hasHD_TV, hasBLUERAY, hasWI_FI) > 100
Uso de macros
A diferencia de las abreviaturas que proporcionan 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. Resulta útil cuando un fragmento de expresión se utiliza repetidamente en numerosos objetos como vínculos de uso y artículos. La declaración de abreviaciones, la importación y la importación estática se resuelven a la vez durante el análisis de la 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 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties de la siguiente manera:
exparser.macro.1=EVALUATE=com.ptc.ext.BooleanTableFunction.evaluate(GREEN, US, STEEL, SMALL)
exparser.macro.2=GET_COST= com.ptc.ext.CostFunction.getCost(hasHD_TV, hasBLUERAY, hasWI_FI)
A continuación, las dos últimas expresiones asumen la forma:
BLUE && EVALUATE || MEDIUM
GET_COST > 100
Las macros son útiles para indicar el objeto ATONavigationBean que contiene información sobre criterios de navegación y los objetos estructurales que se filtran.
Acceso a información de filtrado actual
El objeto com.ptc.windchill.option.model.ATONavigationBean es un bean de empaquetador sobre instancias del objeto ATONavigationFilter y NavigationUnit actual proporcionado por la estructura de filtrado. Aparte del filtro y la unidad de navegación, el bean define los métodos para obtener el objeto NavigationCriteria, la fecha de efectividad del filtro de opciones, el objeto OptionSet, las elecciones seleccionadas en el filtro de opción y el estatus de la selección para todas las opciones de OptionSet agrupadas mediante la opción.
public ATONavigationFilter getFilter();
public NavigationUnit getNavigationUnit();
public NavigationCriteria getNavigationCriteria();
public Timestamp getFilterEffectivityDate();
public OptionSet getFilterOptionSet();
public Map<String, Set<String>> getFilterChoiceMap();
public Map<String, Boolean> getFilterSelectedChoiceMap();
Uso de ATONavigationBean en expresiones
Para utilizar el bean, primero se debe definir una función que lo tome como uno de los parámetros. Por ejemplo, hay una clase integrada disponible: com.ptc.windchill.option.filter.NavigationUtils, que proporciona los métodos (las funciones) para comparar las fechas de efectividad del filtro con los límites de fecha superiores o inferiores fijos.
public static boolean afterDate(ATONavigationBean beanOfActivity, String after)
public static boolean beforeDate(ATONavigationBean beanOfActivity, String before)
public static boolean betweenDate(ATONavigationBean beanOfActivity, String after, String before)
Hay otros tres métodos que realizan un argumento adicional de cadena para especificar el patrón de la fecha (útil para las configuraciones regionales que no sean estadounidenses). Al especificar el objeto concreto en la expresión, se debe pasar un objeto vacío del tipo ATONavigationBean según lo que devuelve el método estático ATONavigationBean.newATONavigationBean(). Es conveniente utilizar una macro para indicar el bean proporcionado por este fragmento. El marco de filtrado rellena el bean con ATONavigationFilter y NavigationUnit, lo que proporciona acceso a los datos actuales de filtrado.
En primer lugar, defina una macro para una instancia de ATONavigationBean y las abreviaturas para los métodos de NavigationUtils en el fichero LookUpService.properties de la siguiente manera:
exparser.macro.1=EFFECTIVITY_INFO= com.ptc.windchill.option.model.ATONavigationBean.newATONavigationBean()
exparser.abbreviation.1=BEFORE= com.ptc.windchill.option.filter.NavigationUtils.beforeDate
exparser.abbreviation.2=AFTER= com.ptc.windchill.option.filter.NavigationUtils.afterDate
exparser.abbreviation.3=BETWEEN= com.ptc.windchill.option.filter.NavigationUtils.betweenDates
Ahora se puede definir una expresión que dependa del intervalo de tiempo en el que se encuentre la fecha de efectividad:
RED && SMALL && BEFORE(EFFECTIVITY_INFO, “05/05/2005”) ||
GREEN && LARGE && BETWEEN(EFFECTIVITY_INFO, “05/05/2005”, “06/06/2006”) ||
BLUE && MEDIUM && BETWEEN(EFFECTIVITY_INFO, “06/06/2006”, “07/07/2007”) ||
WHITE && X_LARGE && AFTER(EFFECTIVITY_INFO, “07/07/2007”)
Esta expresión toma efectivamente cuatro formas distintas, según lo especificado en cada fila, en función de cuatro intervalos de tiempo inconexos distintos:
RED && SMALL: si la fecha de efectividad es anterior a 05/05/2005.
GREEN && LARGE: si la fecha de efectividad está comprendida entre 05/05/2005 y 06/06/2006.
BLUE && MEDIUM: si la fecha de efectividad está comprendida entre 06/06/2006 y 07/07/2007.
WHITE && X_LARGE: si la fecha de efectividad es posterior a 07/07/2007.
¿Fue esto útil?