데이터 관리 기능 > 부품 구조 관리 > Windchill 옵션 및 파생 기능 > 표현식 지정 > 고급 표현식에서 함수 사용
  
고급 표현식에서 함수 사용
이 항목에서는 사용 링크 및 부품에 지정된 표현식에서 사용되고 옵션 필터링 프로세스 중에 옵션 필터링 위임으로 평가되는 함수를 정의하는 다양한 방법에 대해 설명합니다. 다음 섹션에서는 다음과 같은 측면을 다룹니다.
함수의 별칭을 지정하여 표현식의 크기를 줄이고 재사용할 수 있게 하는 다양한 방법
함수 구현자가 옵션 탐색 필터, 탐색 조건, 옵션 세트, 유효성 날짜, 필터링 프로세스에 관련되거나 필터링되는 객체(예: 부품, 사용 링크 및 연관된 데이터) 등 필터링 프레임워크의 객체에 액세스할 수 있는 방법에 대한 정보
함수 정의 및 표현식의 함수 사용에 대한 개요
함수에 전달하려는 인수를 받아들이는 public 정적 메소드(함수)를 사용하여 Java 클래스를 정의합니다. 함수에 전달할 수 있는 유일한 변수 인수는 선택 항목(특히, 선택 상태는 선택하면 true이고 선택하지 않으면 false임) 및 런타임에 필터링 프레임워크에서 제공하고 채우는 com.ptc.windchill.option.model.ATONavigationBean 유형의 객체(이후 섹션에서 설명)입니다. 정의된 후 Java 클래스의 public 정적 메소드는 다음과 같은 형식을 통해 다양한 방법으로 표현식에 사용될 수 있습니다.
메소드에 대한 전체 클래스 경로 사용
클래스에 해당하는 가져오기가 정의된 경우 ClassName.MethodName() 형식 사용
클래스에 해당하는 정적 가져오기가 정의된 경우 MethodName() format () 사용
메소드에 대한 약어(또는 별칭)이 정의된 경우 MethodAbbreviation() 사용
매크로가 정의된 경우 매크로 사용
다음 섹션에는 이러한 함수를 사용하여 앞에서 언급한 각 상황에 대한 샘플 함수 및 표현식을 구성하는 예제가 나와 있습니다. 현재 NavigationCriteria, ATONavigationFilter, 옵션 필터의 유효성 날짜, 옵션 필터의 옵션 세트, 옵션 필터에서 선택된 선택 항목, 옵션 세트의 모든 선택 항목에 대한 선택 상태, 필터링 노드(예: WTPartUsageLink) 및 지원 노드(예: 사용 링크의 하위 WTPart)가 포함된 현재 NavigationUnit에 대한 액세스를 제공하는 변수 ATONavigationBean 객체를 활용하는 함수를 작성할 수 있습니다. 특히, 이 경우 필터링 결정에 다른 객체(예: 부품, 사용 링크 및 사용 발생의 속성 값)를 사용할 수 있습니다.
함수 정의
함수를 정의하려면 원하는 인수와 함께 public 정적 메소드를 사용하여 Java 클래스를 작성합니다.
Java 코드
설명
부울 인수 네 개를 받아들이고 다음 진리표(T는 true, F는 FALSE를 나타냄)에서 결정된 값을 반환하는 정적 부울 함수의 예제입니다.
진리표
x1
x2
x3
x4
반환
T
F
T
F
T
T
T
F
F
T
F
T
F
T
T
F
F
T
T
T
x1, x2, x3 및 x4의 다른 모든 조합에서는 FALSE 값(F)이 생성됩니다.
각 행에 해당하는 표현식에 접근하려면 T에 매개변수 이름(예: x1)을 대체하고 F에 매개변수 부정(! x1)을 대체한 다음 논리곱 연산자(&&)로 해당 결과를 연결합니다. 예를 들어, 첫 번째 행은 다음 표현식을 생성합니다.
x1 && ! x2 && x3 && ! x4
그런 다음 논리합 연산자(||)로 행 부울 표현식을 연결하여 진리표를 나타내는 표현식에 접근합니다.
* 
표현식에서 같은 선택 항목을 반복 사용하는 경우 함수를 도입하여 다음에 설명하는 것처럼 표현식에 사용할 수 있습니다.
함수는 모든 유형(예: int, double, float 등의 기본 숫자)를 반환할 수 있으며, 같은 유형의 상수와 비교되어 다음 예제와 같은 부울 표현식을 생성할 수 있습니다.
이러한 종류의 함수를 통해 지정된 전체 비용을 초과하는 구성을 필터링할 수 있습니다. 다른 접근 방법은 비용 정수를 다른 매개변수로 함수에 전달하고 함수 자체 내에서 비교하는 것입니다. 이 경우 함수에서 부울이 반환됩니다.
표현식에서 사용
다음 예제에서는 COLOR 옵션의 RED, GREEN, BLUE, WHITE, COUNTRY 옵션의 UK, US, MX, MATERIAL 옵션의 PLASTIC, STEEL, WOODSIZE 옵션의 SMALL, MEDIUM, LARGE, X_LARGE 선택 항목이 있다고 가정합니다. 또한 hasHD_TV, hasBLUERAY, hasWI_FI 선택 항목을 사용합니다.
메소드에 대한 전체 클래스 경로 사용
이 경우 전체 클래스 경로와 메소드 이름을 사용하여 함수를 지정합니다. 이 예제에서는 함수의 인수로 선택 항목 이름을 전달합니다. 다음 예제에서는 이 접근 방법에 대해 설명합니다.
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
가져오기 선언 사용
등록 정보 파일 WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties에서 가져올 클래스를 다음과 같이 지정할 수 있습니다.
exparser.import.1=com.ptc.ext.BooleanTableFunction
exparser.import.2=com.ptc.ext.CostFunction
이 경우 표현식에서 함수를 지정할 때 패키지 경로를 생략할 수 있습니다.
BooleanTableFunction.evaluate(RED, UK, PLASTIC, LARGE)
BLUE && BooleanTableFunction.evaluate(GREEN, US, STEEL, SMALL) || MEDIUM
CostFunction.getCost(hasHD_TV, hasBLUERAY, hasWI_FI)> 100
정적 가져오기 선언 사용
이 경우 먼저 등록 정보 파일 WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties에서 정적 가져오기 선언을 다음과 같이 지정합니다.
exparser.static.import.1=com.ptc.ext.BooleanTableFunction
exparser.static.import.2=com.ptc.ext.CostFunction
이 경우 표현식에서 함수를 지정할 때 패키지 경로와 클래스 이름을 모두 생략(메소드 이름만 유지)할 수 있습니다.
evaluate(RED, UK, PLASTIC, LARGE)
BLUE && evaluate(GREEN, US, STEEL, SMALL) || MEDIUM
getCost(hasHD_TV, hasBLUERAY, hasWI_FI) > 100
메소드에 약어(별칭) 사용
이 경우 등록 정보 파일 WT_HOME/codebase/ com/ptc/wpcfg/exparser/LookUpService.properties에서 메소드 약어와 메소드 전체 경로 간의 매핑을 다음과 같이 정의합니다.
exparser.abbreviation.1=EVAL=com.ptc.ext.BooleanTableFunction.evaluate
exparser.abbreviation.2=COST=com.ptc.ext.CostFunction.getCost
그런 다음 표현식에서 이러한 별칭을 사용하여 함수에 액세스할 수 있습니다.
EVAL(RED, UK, PLASTIC, LARGE)
BLUE && EVAL(GREEN, US, STEEL, SMALL) || MEDIUM
COST(hasHD_TV, hasBLUERAY, hasWI_FI) > 100
매크로 사용
단일 함수의 전체 함수 경로에 대한 별칭을 제공하는 약어와 달리 매크로는 표현식 조각의 별칭입니다. 표현식 조각이 사용 링크, 부품 등 많은 객체에서 반복적으로 사용되는 경우에 유용합니다. 가져오기, 정적 가져오기 및 약어 선언은 표현식을 분석하는 동안 즉시 확인됩니다. 먼저 표현식의 매크로가 매크로 조각으로 대체된 다음 표현식이 분석됩니다. 다른 파서 등록 정보인 매크로 매핑은 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties에서 다음과 같이 정의됩니다.
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)
마지막 두 표현식은 다음과 같은 형식을 가정합니다.
BLUE && EVALUATE || MEDIUM
GET_COST > 100
매크로는 필터링되는 구조 객체와 탐색 조건에 대한 정보가 포함된 ATONavigationBean을 나타내는 데 유용합니다.
현재 필터링 정보 액세스
com.ptc.windchill.option.model.ATONavigationBean 객체는 필터링 프레임워크에서 제공하는 현재 NavigationUnitATONavigationFilter 인스턴스에 대한 래퍼 bean입니다. 필터 및 탐색 단위와 별도로, bean은 NavigationCriteria, 옵션 필터의 유효성 날짜, OptionSet, 옵션 필터에서 선택된 선택 항목, 옵션별로 그룹화된 OptionSet의 모든 선택 항목에 대한 선택 상태를 가져오는 메소드를 정의합니다.
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();
표현식에서 ATONavigationBean 사용
bean을 사용하려면 먼저 ATONavigationBean을 매개변수 중 하나로 받아들이는 함수를 정의해야 합니다. 예를 들어, 고정된 타임스탬프 상한값 및/또는 하한값과 필터 유효성 날짜를 비교하기 위한 메소드(함수)를 제공하는 com.ptc.windchill.option.filter.NavigationUtils 등의 기본 제공 클래스를 사용할 수 있습니다.
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)
추가 문자열 인수를 받아들여 날짜 패턴을 지정하는 세 개의 다른 메소드도 있습니다(미국 이외의 로캘에 유용). 표현식에서 구상 객체를 지정할 때는 정적 메소드 ATONavigationBean.newATONavigationBean()에서 반환된 대로 ATONavigationBean 유형의 빈 객체를 전달해야 합니다. 이 조각에서 제공하는 bean을 표시하는 데 매크로를 사용하면 편리합니다. 필터링 프레임워크는 bean을 ATONavigationFilterNavigationUnit으로 채워 현재 필터링 데이터에 액세스할 수 있도록 합니다.
먼저 LookUpService.properties 파일에서 ATONavigationBean 인스턴스에 대한 매크로와 NavigationUtils의 메소드에 대한 약어를 다음과 같이 정의합니다.
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
이제 유효성 날짜가 해당하는 시간 간격에 따라 달라지는 표현식을 정의할 수 있습니다.
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”)
이 표현식은 네 개의 분리된 서로 다른 시간 간격을 기준으로 각 행에서 지정된 대로 네 가지 다른 형식을 사용합니다.
RED && SMALL - 유효성 날짜가 05/05/2005 이전인 경우
GREEN && LARGE - 유효성 날짜가 05/05/2005에서 06/06/2006 사이인 경우
BLUE && MEDIUM - 유효성 날짜가 06/06/2006에서 07/07/2007 사이인 경우
WHITE && X_LARGE - 유효성 날짜가 07/07/2007 이후인 경우