Intégration avec d'autres applications > Intégration Creo Parametric - Windchill > Administration et configuration > Configuration de Windchill pour l'interopérabilité avec Creo Parametric > Personnalisation de la page de sélection d'objets du client HTML > Personnalisation de la recherche HTML
  
Personnalisation de la recherche HTML
Pour personnaliser la recherche HTML afin de modifier l'affichage des objets de recherche par défaut ou d'ajouter de nouvelles classes, consultez le fichier suivant distribué comme source Windchill\src\wt\query\SearchAttributeList .java. Comme expliqué dans le fichier javadoc de cette classe, sous-classe de SearchAttributeList, sélectionnez les entrées appropriées dans service.properties et wt.properties. Voici les méthodes d'implémentation dans un élément SearchAttributeList personnalisé, avec des exemples :
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 constitue la chaîne la plus récente et doit être utilisée comme référence.
La suite de cette section décrit deux nouvelles tables dans wt.query.SearchAttributeList : sortAttributes et sortPref.
A cause des différentes structures de données utilisées dans certaines classes, tous les attributs qui peuvent être affichés dans les résultats de recherche ne peuvent pas être triés dans ces résultats. La table sortAttributes de wt.query.SearchAttributeList permet de désigner les attributs qui peuvent être triés et permet également de spécifier si un autre attribut doit être utilisé pour le tri. L'attribut de version constitue un exemple d'autre attribut pouvant être utilisé pour le tri. L'attribut utilisé pour l'affichage est versionDisplayIdentifier, mais l'attribut utilisé pour effectuer le tri est versionInfo.identifier.versionId. Types java de base, tels que String (chaîne) et int, sont triables. Utilisez les exemples de wt.query.SearchAttributeList pour déterminer si un type personnalisé peut être trié. Vous pouvez également effectuer un simple test pour savoir si un attribut fonctionne, n'a aucun effet ou génère une exception.
La table sortPref (illustrée dans l'exemple de code précédent) permet de définir un nom de base pour les préférences de tri afin que les utilisateurs puissent définir leurs préférences de tri pour l'objet "Clé de recherche". Vous devez définir des préférences de tri par défaut au niveau du système, afin qu'à la première utilisation du système, les colonnes soient triées dans un ordre logique lorsque l'utilisateur ne définit pas de préférences. Ces préférences par défaut peuvent être définies à l'aide de wt.load.LoadFromFile ou à l'aide de l'éditeur du Gestionnaire des préférences disponible sur la page du portail de l'administration système.
Lorsqu'il s'agit d'une nouvelle base de données, les préférences par défaut sont chargées lors de l'exécution de la section requise de wt.load.Demo (qui exécute wt.load.LoadFromFile). Vous pouvez facilement ajouter ou modifier les préférences par défaut du site à l'aide du Gestionnaire des préférences. Si la base de données a été créée sur un système dont la version est antérieure à la version 6.0, vous pouvez utiliser wt.load.LoadFromFile pour charger les préférences par défaut de base des classes de recherche HTML fournies. Les entrées contenues dans "PrefEntry…/wt/query/htmlsearch" dans Windchill\loadFiles\preferences.txt peuvent servir d'exemples.
Un nom interne est affecté à chaque préférence utilisateur. Ce nom ne peut pas être affiché depuis le système client sauf à partir du Gestionnaire des préférences. Etant donné qu'une recherche fait appel à wt.query.SearchAttributeList pour autoriser les utilisateurs à ajouter de nouvelles recherches et que chaque recherche doit correspondre à un ensemble de préférences, il faut utiliser un nom de tri unique pour chaque nom répertorié dans la liste "Clé de recherche". Chaque objet de la liste "Clé de recherche" n'est pas forcément constitué d'un seul objet mais peut comporter une liste d'objets. La table sortPref dans wt.query.SearchAttributeList permet de définir une chaîne unique qui constitue une partie du nom de la préférence. Les préférences de tri sont sauvegardées dans le noeud de préférences /wt/query/htmlsearch et le format utilisé pour leurs noms est le suivant :
<sort preference base name>sortAttrib<#>
<sort preference base name>sortDirect<#>
<sort preference base name> représente une chaîne unique issue de la table sortPref dans wt.query.SearchAttributeList ; il doit être unique au niveau des noms des préférences de tri uniquement. sortAttrib représente le nom de l'attribut et sortDirect permet d'indiquer l'ordre de tri (croissant ou décroissant). Sa valeur est "Faux (False)" pour un ordre croissant et "Vrai (True)" pour un ordre décroissant. Le signe <n> représente le numéro de la clé de tri, 0 = première clé et ainsi de suite. Les préférences qui peuvent être chargées à l'aide de wt.load.LoadFromFile et Windchill\loadFiles\preferences.txt pour le type de tri All sont les suivantes :
#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
Dans l'exemple du type de tri par défaut All, les résultats sont d'abord triés selon la colonne des numéros (ordre croissant), puis selon la colonne du numéro de version (ordre décroissant). Actuellement, bien que le nombre de clés de tri ne soit limité que par les performances d'Oracle, le nombre de clés de tri pris est charge est de 3. Aucun test portant sur la prise en charge de plus de 3 clés n'a été effectué sur le système.