Funzionalità per la gestione dei dati > Gestione di strutture di parti > Funzionalità Options and Variants di Windchill > Assegnazione delle espressioni > Utilizzo delle funzioni nelle espressioni avanzate
  
Utilizzo delle funzioni nelle espressioni avanzate
In questo argomento vengono descritti i modi diversi di definire le funzioni utilizzate nelle espressioni assegnate ai link di utilizzo e alle parti e valutate durante il processo di applicazione dei filtri delle opzioni mediante il delegato del filtro opzioni. Le sezioni che seguono trattano gli aspetti indicati di seguito.
Diversi modi per specificare un alias di una funzione per ridurre la dimensione e consentire il riutilizzo delle espressioni
Informazioni su come l'implementatore delle funzioni può ottenere l'accesso agli oggetti della struttura di filtri: il filtro di navigazione delle opzioni, i criteri di navigazione, l'insieme di opzioni, la data di effettività, gli oggetti filtrati o coinvolti nel processo di applicazione dei filtri, ad esempio parti, link di utilizzo e dati ad essi associati.
Panoramica sulla definizione della funzione e sul relativo utilizzo nelle espressioni
Definire una classe Java con un metodo statico pubblico (una funzione) che accetta gli argomenti che si desidera passare alla funzione. Gli unici argomenti variabili che è possibile passare alle funzioni sono scelte (in particolare, lo stato true in caso di selezione e lo stato false in caso contrario) e l'oggetto di tipo com.ptc.windchill.option.model.ATONavigationBean fornito e completato dalla struttura di applicazione dei filtri in fase di esecuzione (argomento descritto in una sezione successiva). Una volta definito, il metodo statico pubblico della classe Java può essere utilizzato nell'espressione in vari modi con i formati riportati di seguito.
Utilizzando il percorso completo di classe del metodo
Utilizzando il formato ClassName.MethodName() se l'importazione corrispondente della classe è definita
Utilizzando il formato MethodName() format () se l'importazione statica corrispondente della classe è definita
Utilizzando MethodAbbreviation() se l'abbreviazione (o l'alias) del metodo è definita
Utilizzando la macro se questa è definita
Nelle sezioni che seguono è possibile trovare esempi di costruzione di alcune funzioni e di espressioni con tali funzioni per ciascuna delle suddette situazioni. È possibile scrivere le funzioni per sfruttare l'oggetto ATONavigationBean variabile che fornisce l'accesso agli oggetti NavigationCriteria e ATONavigationFilter correnti, data di effettività del filtro opzioni, insieme di opzioni del filtro opzioni, scelte selezionate nel filtro opzioni, stato di selezione per tutte le scelte nell'insieme di opzioni, NavigationUnit corrente con il nodo filtrabile (ad esempio WTPartUsageLink) e i nodi di supporto (ad esempio, WTPart figlio del link di utilizzo). In particolare, ciò consente l'utilizzo di altri oggetti (ad esempio valori attributo per parti, link di utilizzo e occorrenze di utilizzo) nelle decisioni di applicazione dei filtri.
Definizione della funzione
Per definire una funzione, scrivere una classe Java con un metodo statico pubblico con gli argomenti desiderati.
Codice Java:
Descrizione:
Questo è un esempio di una funzione booleana statica con quattro argomenti booleani che restituisce un valore determinato a partire dalla tabella di verità (T e F indicano rispettivamente TRUE e FALSE):
Tabella di verità:
x1
x2
x3
x4
Valore restituito
T
F
T
F
T
T
T
F
F
T
F
T
F
T
T
F
F
T
T
T
Tutte le altre combinazioni di x1, x2, x3 e x4 producono il valore FALSE (F).
Per ottenere l'espressione corrispondente di ogni riga, sostituire T con il nome del parametro (ad esempio x1), F con la negazione del parametro (! x1) e concatenare questi risultati con gli operatori di congiunzione (&&). Ad esempio, la prima riga restituisce l'espressione riportata di seguito.
x1 && ! x2 && x3 && ! x4
Quindi, concatenare le espressioni booleane della riga con gli operatori di disgiunzione (||) per ottenere l'espressione che rappresenta la tabella di verità.
* 
Se si utilizza ripetutamente la stessa scelta nell'espressione, è possibile sfruttare l'introduzione di una funzione e il suo utilizzo nell'espressione, come illustrato in seguito.
La funzione può restituire qualsiasi tipo (ad esempio, un numero primitivo come int, doppio, decimale) e quindi può essere confrontato con la costante dello stesso tipo per produrre un'espressione booleana come nell'esempio riportato di seguito.
Questi tipi di funzione consentono di escludere le configurazioni che superano il costo totale specificato. Un altro approccio consiste nel passare il valore intero del costo come un altro parametro alla funzione e nell'effettuare un confronto nella funzione stessa. Ciò determina la restituzione di un valore booleano da parte dalla funzione.
Utilizzo nelle espressioni
Negli esempi riportati di seguito si presuppone che siano disponibili le scelte RED, GREEN, BLUE, WHITE per l'opzione COLOR, UK, US, MX per l'opzione COUNTRY, PLASTIC, STEEL, WOOD per l'opzione MATERIAL e SMALL, MEDIUM, LARGE, X_LARGE per l'opzione SIZE. Si suppone inoltre di utilizzare le scelte hasHD_TV, hasBLUERAY, hasWI_FI.
Utilizzo del percorso completo di classe del metodo
In questo caso si utilizzano il percorso completo di classe e il nome del metodo per specificare la funzione. Come argomenti della funzione in questo esempio vengono passati i nomi di scelta. Questo approccio viene illustrato negli esempi riportati di seguito.
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
Utilizzo delle dichiarazioni di importazione
Le classi da importare possono essere specificate nel file delle proprietà WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties come segue.
exparser.import.1=com.ptc.ext.BooleanTableFunction
exparser.import.2=com.ptc.ext.CostFunction
In questo caso è possibile omettere il percorso del package quando si specifica la funzione nell'espressione.
BooleanTableFunction.evaluate(RED, UK, PLASTIC, LARGE)
BLUE && BooleanTableFunction.evaluate(GREEN, US, STEEL, SMALL) || MEDIUM
CostFunction.getCost(hasHD_TV, hasBLUERAY, hasWI_FI)> 100
Utilizzo delle dichiarazioni di importazione statica
In questo caso, si specificano innanzitutto le dichiarazioni di importazione statica nel file delle proprietà WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties come segue.
exparser.static.import.1=com.ptc.ext.BooleanTableFunction
exparser.static.import.2=com.ptc.ext.CostFunction
In questo caso, è possibile omettere sia il percorso del package che il nome della classe (e lasciare solo il nome del metodo) quando si specifica la funzione nell'espressione.
evaluate(RED, UK, PLASTIC, LARGE)
BLUE && evaluate(GREEN, US, STEEL, SMALL) || MEDIUM
getCost(hasHD_TV, hasBLUERAY, hasWI_FI) > 100
Utilizzo delle abbreviazioni (alias) per i metodi
In questo caso, si definisce la mappatura tra un'abbreviazione per un metodo e il percorso completo del metodo nel file delle proprietà WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties come segue.
exparser.abbreviation.1=EVAL=com.ptc.ext.BooleanTableFunction.evaluate
exparser.abbreviation.2=COST=com.ptc.ext.CostFunction.getCost
Quindi, è possibile utilizzare questi alias per accedere alla funzione nell'espressione.
EVAL(RED, UK, PLASTIC, LARGE)
BLUE && EVAL(GREEN, US, STEEL, SMALL) || MEDIUM
COST(hasHD_TV, hasBLUERAY, hasWI_FI) > 100
Utilizzo delle macro
A differenza delle abbreviazioni che forniscono gli alias per il percorso completo di una singola funzione, una macro è un alias per un frammento di espressione. È utile quando un frammento di espressione viene utilizzato ripetutamente in numerosi oggetti quali link di utilizzo e parti. Le dichiarazioni di importazione, di importazione statica e di abbreviazione vengono risolte immediatamente durante l'analisi dell'espressione. I frammenti di macro vengono prima sostituiti alle macro nell'espressione, quindi l'espressione viene analizzata. Come le altre proprietà del parser, le mappature di macro sono definite in WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties come segue.
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)
Quindi, le ultime due espressioni presentano il formato illustrato di seguito.
BLUE && EVALUATE || MEDIUM
GET_COST > 100
Le macro sono utili per indicare ATONavigationBean che contiene informazioni sui criteri di navigazione e sugli oggetti strutturali filtrati.
Accesso alle informazioni sui filtri correnti
L'oggetto com.ptc.windchill.option.model.ATONavigationBean è un bean wrapper sulle istanze di ATONavigationFilter e dell'oggetto NavigationUnit corrente forniti dalla struttura di applicazione dei filtri. Oltre al filtro e all'unità di navigazione, il bean definisce i metodi per ottenere NavigationCriteria, la data di effettività del filtro opzioni, OptionSet, le scelte selezionate nel filtro opzioni e lo stato di selezione per tutte le scelte in OptionSet raggruppate per opzione.
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();
Utilizzo di ATONavigationBean nelle espressioni
Per utilizzare il bean, è innanzitutto necessario definire una funzione che lo utilizzi come uno dei suoi parametri. Ad esempio, è disponibile la classe incorporata com.ptc.windchill.option.filter.NavigationUtils che fornisce i metodi (le funzioni) per confrontare le date di effettività dei filtri con i limiti di data e ora superiore e/o inferiore prefissati.
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)
Esistono altri tre metodi che richiedono un argomento di stringa aggiuntivo per specificare lo schema di data (utile per le impostazioni locali non americane). Quando si specifica l'oggetto concreto nell'espressione, è necessario passare un oggetto vuoto di tipo ATONavigationBean restituito dal metodo statico ATONavigationBean.newATONavigationBean(). È opportuno utilizzare una macro per indicare il bean fornito dal frammento. La struttura di applicazione dei filtri completa il bean con ATONavigationFilter e NavigationUnit, consentendo l'accesso ai dati dei filtri correnti.
Innanzitutto, definire una macro per un'istanza di ATONavigationBean e le abbreviazioni per i metodi NavigationUtils nel file LookUpService.properties come segue.
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
A questo punto è possibile definire un'espressione che dipende dall'intervallo di tempo in cui rientra la data di effettività.
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”)
Questa espressione assume quattro formati diversi, come specificato in ogni riga, in base ai quattro diversi intervalli di tempo indipendenti.
RED && SMALL - Se la data di effettività è anteriore al 05/05/2005
GREEN && LARGE - Se la data di effettività è compresa tra il 05/05/2005 e il 06/06/2006
BLUE && MEDIUM - Se la data di effettività è compresa tra il 06/06/2006 e il 07/07/2007
WHITE && X_LARGE - Se la data di effettività è posteriore al 07/07/2007