高度なカスタマイズ > ビジネスロジックのカスタマイズ > PDM のカスタマイズ > HTML クライアントのオブジェクト選択ページのカスタマイズ
  
HTML クライアントのオブジェクト選択ページのカスタマイズ
HTML クライアントのオブジェクト選択ページは、Creo Parametric HTML クライアントでユーザーが操作を遂行するために必要なオブジェクトを Windchill データベースから選択するために使用します。
オブジェクト選択ページのドロップダウンリスト、サーチ基準、および結果の列の決定には、設定済みの com.ptc.windchill.cadx.common.picker.PickerSearchAttributeListDelegate が使用されます。デフォルトの設定済み PickerSearchAttributeListDelegatecom.ptc.windchill.cadx.common.picker.PickerSearchAttributeList です。オブジェクト選択ページで各種タイプリストを作成するための設定済み wt.query.SearchAttributeListDelegate に対する PickerSearchAttributeList 委任が設定されることで、サーチ基準がサポートおよび決定され、オブジェクト選択ページに表示される結果列が決定されます (SearchAttributeListDelegate の詳細については、HTML サーチのカスタマイズを参照してください)。
この PickerSearchAttributeListDelegate の実装が不十分である場合は、独自の PickerSearchAttributeList を作成して設定し、オブジェクト選択ページで使用できます。
* 
この機能はサードパーティの CAD ツールに統合されたすべての Windchill Workgroup Manager に適用可能です。
サーチ属性リスト委任の修正
独自に作成したカスタムの PickerSearchAttributeListDelegate を実装するには、wt.query.SearchAttributeListDelegate および com.ptc.windchill.cadx.common.picker.PickerSearchAttributeListDelegate を実装するクラスを作成するか、com.ptc.windchill.cadx.common.picker.PickerSearchAttributeList をサブクラスとするクラスを作成します。
PickerSearchAttributeListDelegate および PickerSearchAttributeList とそれらのメソッドの詳細については、Javadoc を参照してください。
* 
PickerSearchAttributeListSearchAttributeList を拡張するので、カスタムクラスを SearchAttributeListDelegate および PickerSearchAttributeListDelegate として使用できます。
* 
PickerSearchAttributeList を拡張する場合は、フィルタを設定して NullPointerExceptions を回避する必要があります。この問題は、今後のリリースで対処されます。
新しい PickerSearchAttributeListDelegate を設定するには、次の操作を行います。
1. xconfmanager を使用して com/ptc/windchill/cadx/common/picker/picker.properties
wt.services/svc/default/com.ptc.windchill.cadx.common.picker.PickerSearchAttributeListDelegate/
<unique delegate id which is also specified for com.ptc.windchill.cadx.common.picker.pickerSearchAttributeList>/java.lang.Object/0=mine.MyPickerSearchAttributeList/duplicate.
のようなエントリを追加します。
2. xconfmanager を使用して、wt.properties 内の pickerSearchAttributeList エントリを com.ptc.windchill.cadx.common.picker.pickerSearchAttributeList=<一意の委任 ID> に変更します。wt.properties にエントリがない場合は、STANDARD が委任 ID として使用されます。
タイプリストの修正
Creo Parametric HTML クライアントのオブジェクト選択ページでは、タイプリスト ID で識別される設定済みタイプリストが使用されます。これらのタイプリストは、オブジェクト選択ページの typeListID プロパティの値として指定されています。
タイプリストは、com\ptc\windchill\cadx\propfiles\picker.properties で定義されています。
新しいタイプリスト ID のタイプリストエントリを追加するには、xconfmanager を使用して、wt.services/rsc/default/<type list id>/java.lang.Object/0=<コンマで区切られた有効な照会値のリスト> のようなエントリを追加します。
リストに値が 1 つしかない場合は、コンマは不要です。タイプリストに「All」エントリが必要である場合は、タイプ ID のリストに ALL に対応するタイプリストエントリ値を指定する必要があります。
* 
オブジェクト選択ページのデフォルトの実装では、これらの有効なタイプリスト値が照会値として wt.query.queryResource に指定されています。
タイプリスト ID に対して指定されたタイプ ID のリストからタイプ ID を除去することは可能ですが、エントリを除去したり、タイプリストを空白にすることはできません。
HTML サーチのカスタマイズ
デフォルトのサーチオブジェクトの表示を変更するか、新しいクラスを追加するように HTML サーチをカスタマイズするには、ソースとして配布されているファイル Windchill\src\wt\query\SearchAttributeList.java を確認します。このクラスの Javadoc で説明されているように、サブクラス SearchAttributeListservice.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 の新しい配列 2 つ (sortAttributes および sortPref) を説明しています。
一部のクラスで使用されているデータ構造により、サーチ結果内に表示される属性はすべてがサーチ結果内で並べ替えできるわけではありません。wt.query.SearchAttributeListsortAttributes 配列は、どの属性が並べ替え可能であるか、また別の属性を使用して並べ替えるべきかを指定するために使用します。
並べ替えに使用する代替の属性の例にバージョン属性があります。表示に使用する属性は versionDisplayIdentifier ですが、並べ替えに使用する属性は versionInfo.identifier.versionId です。
String および int などの基本的な 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 が使用されており、サーチにはそれぞれに並べ替えプリファレンスのセットが必要なため、サーチ対象リストの各名前に一意の並べ替え名が必要です。
"サーチ対象" リスト内の各オブジェクトは、必ずしも 1 つのオブジェクトではなく、複数のオブジェクトが含まれたリストである場合もあります。wt.query.SearchAttributeListsortPref 配列では、プリファレンスの名前の一部を形成する一意の文字列が定義されます。並べ替えのプリファレンスは /wt/query/htmlsearch プリファレンスノードに保存され、ネーミングのフォーマットは次のとおりです。
<sort preference base name>sortAttrib<#>
<sort preference base name>sortDirect<#>
<sort preference base name> は、wt.query.SearchAttributeListsortPref 配列からの一意の文字列です。これは、並べ替え名内では一意でなければなりません。sortAttrib は属性名に対するもので、sortDirect には昇順または降順を指定します。昇順の場合は「偽」、降順の場合は「真」です。<#> は並べ替えキーの番号です。たとえば 0 = 最初のキーのようになります。ALL の並べ替えで wt.load.LoadFromFileWindchill\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 を超えるキーのテストは、システムに対して実施されていません。