HTML 검색 사용자 정의
HTML 검색을 사용자 정의하여 기본 검색 객체 표시를 변경하거나 새 클래스를 추가하려면 소스로 배포되는 Windchill\src\wt\query\SearchAttributeList.java 파일을 참조하십시오. javadoc에 설명된 대로 SearchAttributeList 클래스의 서브클래스와 service.properties 및 wt.properties에 적절한 엔트리를 만듭니다. 다음은 사용자 정의 SearchAttributeList에서 구현되어야 하는 메소드와 예입니다.
public final class MySearchAttributeList extends SearchAttributeList implements
Externalizable {
public void setLocale( Locale locale ) {
// Load in the values for the drop down list for selecting what to search against.
clientLocale = locale;
// **Customize --------------------------------------------------------------
--------------
// Add new classes to search to list below.
// Make sure that they are assigned numbers in sequence from 0 to N.
// Set dropDownListCount to N+1.
final int ALL = 0;
final int WTPART = 1;

final int MYCLASS = 22
int dropDownListCount = 23;
// -------------------------------------------------------------------------
------------…
pickList = new String[classCount];
pickList[ALL] =
WTMessage.getLocalizedMessage(RESOURCE,queryResource.ALL,null,clientLocale);
pickList[WTPART] =
WTMessage.getLocalizedMessage(RESOURCE,queryResource.WTPART,null,clientLocale);

pickList[MYCLASS] = WTMessage.getLocalizedMessage(RESOURCE,queryResource.
MYCLASS,null,clientLocale);
pickValues = new String[classCount];
pickValues[ALL] = queryResource.ALL;
pickValues[WTPART] = queryResource.WTPART;

pickValues[MYCLASS] = queryResource.MYCLASS;
// **Customize You will need a string in here to correspond to each item in
pickList
// The string is a space separated list of what classes to query
// against. If you want to query against multiple classes that have a common
parent that
// has all of the attributes that you are interested in use that one class. If
you want
// to query against multiple classes that don't have a good common parent then
you can
// add them to a list and the search will loop through each class and combine
the results
// at the end. All classes in one list must only search against COMMON
attributes or
// attributes with the same name and of the same class! If you add both a
parent and
// a child class to the list you will get duplicate entries, when the results
are
// combined duplicate entries are not deleted.
queryClass = new String[classCount];
queryClass[ALL] =
"wt.part.WTPart wt.doc.WTDocument wt.change2.WTChangeIssue
wt.change2.WTChangeRequest2 " +
"wt.change2.WTChangeInvestigation wt.change2.WTAnalysisActivity
wt.change2.WTChangeProposal " +
"wt.change2.WTChangeOrder2 wt.change2.WTChangeActivity2
wt.csm.businessentity.BusinessEntity " +
"wt.effectivity.ConfigurationItem wt.epm.EPMDocument " +
"wt.replication.unit.WTUnit " +
"wt.part.WTProductConfiguration " +
"wt.part.WTProductInstance2 "; // Please remember to keep a space at the
end so that conditionally added items work.

queryClass[WTPART] = "wt.part.WTPart";

queryClass[MYCLASS] = "?.?.MyClass";
// **Customize These are the
// attributes that can be queried against.
inputAttributes = new String[classCount];
inputAttributes[ALL] =
"number name lifeCycleState projectId cabinet creator modifier
modifyTimestamp";
inputAttributes[WTPART] =
"number name view versionIdentifier partType source lifeCycleState projectId
cabinet creator modifier modifyTimestamp";

inputAttributes[MYCLASS] =
"name modifyTimestamp";
// **Customize Each individual
// string must match with the string listed above for the inputAttributes. "0"
stands for no
// input processing. If an attribute is an enumerated type use "0" and the
code will generate
// the drop down list. In the first string: projectId is in the fourth
position in inputAttributes
// so the method to generate the drop down list for it is also in the fourth
position in the
// string. The "0"s and methods must match in number with the number of
attributes listed
// under inputAttributes. You may add a fully qualified method from your
customization package
// as long as it is static and returns a vector of strings.
inputProcessing = new String[classCount];
inputProcessing[ALL] =
"0 0 0 wt.query.LocalSearchProcessor.getProjectList
wt.query.LocalSearchProcessor.getCabinetList 0 0 0";
inputProcessing[WTPART] =
"0 0 wt.query.LocalSearchProcessor.getViewList 0 0 0 0
wt.query.LocalSearchProcessor.getProjectList
wt.query.LocalSearchProcessor.getCabinetList 0 0 0";

inputProcessing[MYCLASS] =
"0 0";
// **Customize This is similar in concept to inputAttributes only these are
the attributes
// that will be displayed in the search results.
outputAttributes = new String[classCount];
outputAttributes[ALL] =
"number name versionDisplayIdentifier displayType lifeCycleState projectId
modifyTimestamp";
outputAttributes[WTPART] =
"number name versionDisplayIdentifier projectId lifeCycleState
modifyTimestamp";

outputProcessing[MYCLASS] =
"ObjProps 0";
// **New for 6.0
// **Customize This is similar in concept to outputAttributes only this list
is used
// to indicate which attributes can be sorted, can't be sorted, or an alternate
attribute
// that can be sorted to have the same affect as the display attribute. The
string that is used
// here should be the column descriptor so that it can be used to create the
ClassAttribute for
// the query. The query that is used for search is a simple query that will
not sort on all
// of the display attributes. Changing the 0 to 1 for an unsupported attribute
will
// either cause exceptions or sorts that don't work. Attributes of the
following types are
// just some examples of the attributes that will either throw exceptions or
sort incorrectly:
// EnumeratedType, CabinetReference, DataFormatReference,
LifeCycleTemplateReference, ProjectReference,
// and ViewReference.
sortAttributes = new String[classCount];
sortAttributes[ALL] =
"1 1 versionInfo.identifier.versionId 0 0 01";
sortAttributes[WTPART] =
"1 1 versionInfo.identifier.versionId 0 0 1";

sortAttributes[MYCLASS] =
"1 1";
// **New for 6.0
// **Customize This is similar in concept to outputAttributes only this list
is used
// for assigning a unique key to the sort preferences for this search. This
string will
// be persisted and used to retrieve the sort preferences for users. If the
value of one
// of these strings is changed or deleted after the system is in operation it
will create orphaned
// preferences in the system and users will lose the value that they had
persisted for that
// search. New entries can be added when a new search is added so that sort
preferences
// can be saved for that new search. These strings are arbitrary and never
displayed to the user.
sortPref = new String[classCount];
sortPref[ALL] =
"all";
sortPref[WTPART] =
"wtpart";

sortPref[MYCLASS] =
"myclass";
}
/**
*
* <BR><BR><B> Supported API: </B>false
*
* @param locale
* @return MySearchAttributeList
**/
public MySearchAttributeList( Locale locale ) {
setLocale(locale);
}
/**
*
* <BR><BR><B> Supported API: </B>false
*
* @return MySearchAttributeList
**/
public MySearchAttributeList() {
return;
}
}
wt.query.SearchAttributeList는 항상 최신 상태이므로 참조로 사용합니다.
이 단원의 나머지 부분에서는 wt.query.SearchAttributeList의 두 가지 새로운 배열, 즉 sortAttributes와 sortPref에 대해 설명합니다.
일부 클래스의 데이터 구조로 인해 검색 결과에 표시할 수 있는 속성 모두를 검색 결과에서 정렬할 수는 없습니다. wt.query.SearchAttributeList의 sortAttributes 배열은 정렬 가능한 속성과 대안 속성의 사용 여부를 지정합니다. 예를 들어, 버전 속성은 정렬에 사용되는 대안 속성의 예입니다. 표시하는 데 사용되는 속성은 versionDisplayIdentifier이지만, 정렬하는 데 사용되는 속성은 versionInfo.identifier.versionId입니다. 기본 java 유형(예: 문자열 및 정수)을 정렬할 수 있습니다. wt.query.SearchAttributeList의 예제를 사용하여 특정한 사용자 정의 유형이 정렬 가능한지 확인합니다. 혹은 간단한 테스트를 통해 속성의 작동 여부, 유효성, 예외 발생 여부를 확인할 수 있습니다.
선행 코드의 sortPref 배열은 사용자가 "검색 대상" 객체에 대한 정렬 기본 설정을 정의할 수 있도록 정렬 기본 설정의 기본 이름을 정의하는 데 사용됩니다. 정렬 기본 설정의 기본값은 시스템 수준에서 정의해야만 사용자가 처음으로 시스템을 사용할 때 또는 기본 설정을 정의하지 않더라도 열이 논리적으로 정렬될 수 있습니다. wt.load.LoadFromFile을 사용하거나 시스템 관리자 포털 페이지의 기본 설정 관리자 편집기를 사용하여 기본값을 정의합니다.
새로운 데이터베이스에서 기본값은 wt.load.Demo(wt.load.LoadFromFile을 실행)의 필요 섹션을 실행하는 과정에서 로드됩니다. 사이트 기본값은 기본 설정 관리자를 사용하여 간단하게 추가하거나 수정할 수 있습니다. 6.0 릴리즈 이전의 시스템에서 작성된 데이터베이스라면 wt.load.LoadFromFile을 사용하여 HTML 검색 클래스의 전달 구성에 대한 베이스 기본값을 로드할 수 있습니다. Windchill\loadFiles\preferences.txt의 “PrefEntry…/wt/query/htmlsearch” 엔트리를 예로 참조하십시오.
각각의 사용자 기본 설정은 내부 이름을 가지지만 기본 설정 관리자를 사용하지 않으면 클라이언트에서는 볼 수 없습니다. 현재 진행 중인 검색은 wt.query.SearchAttributeList를 사용하여 사용자의 새 검색 추가를 허용하며 각각에 대해 정렬 기본 설정 세트가 있어야 하므로, "검색 대상" 목록의 이름별로 고유의 정렬 이름이 필요합니다. "검색 대상" 목록의 각 객체가 반드시 단일 객체일 필요는 없으며 객체 목록이 될 수도 있습니다. wt.query.SearchAttributeList의 sortPref 배열은 고유한 문자열을 정의하며, 이것은 기본 설정 이름의 일부가 됩니다. 정렬을 위한 기본 설정은 /wt/query/htmlsearch 기본 설정 노드에 저장되며 이름 지정 형식은 다음과 같습니다.
<sort preference base name>sortAttrib<#>
<sort preference base name>sortDirect<#>
<sort preference base name>은 wt.query.SearchAttributeList의 sortPref 배열에서 오는 고유의 문자열이며 정렬 이름 내에서만 고유하면 됩니다. sortAttrib는 속성 이름이며 sortDirect는 오름차순 또는 내림차순을 나타냅니다. 오름차순은 false이고 내림차순은 true입니다. <#>은 정렬 키 번호로서 0 = first key 등입니다. wt.load.LoadFromFile 및 모두 정렬을 위한 Windchill\loadFiles\preferences.txt를 사용하여 로드하는 기본 설정은 다음과 같습니다.
#All
PrefEntry~allsortAttrib0~number~/wt/query/htmlsearch
PrefEntry~allsortDirect0~false~/wt/query/htmlsearch
PrefEntry~allsortAttrib1~versionInfo.identifier.versionId~/wt/query/htmlsearch
PrefEntry~allsortDirect1~true~/wt/query/htmlsearch
모두 기본값 예제에서, 결과는 먼저 번호 열을 따라 오름차순으로 정렬된 후 버전 열에 따라 내림차순으로 정렬됩니다. 즉 번호는 오름차순으로, 버전은 내림차순으로 정렬됩니다. 이론적으로 정렬 키의 개수는 Oracle 성능의 제한을 받지만, 정렬 키는 현재 3개까지 지원됩니다. 3개를 초과하는 키에 대해서는 시스템을 테스트하지 않았습니다.
도움이 되셨나요?