Fonctionnalités supplémentaires de Windchill > Gestion des processus de fabrication > Personnalisation de l'Explorateur de structures produit de fabrication > Création d'un onglet Exigences
  
Création d'un onglet Exigences
Cette section décrit la procédure à suivre pour afficher un onglet Exigences dans l'Explorateur de structures produit. Ces instructions permettent de créer un onglet Exigences qui s'affichera dans l'Explorateur de structures produit et qui s'activera uniquement en cas de sélection d'un article d'un type spécifié dans l'arborescence de la structure. Cet onglet affiche les objets Exigence associés à l'objet sélectionné et fournit également certaines opérations permettant de travailler avec les exigences.
Cette documentation décrit les modifications apportées aux fichiers existants. Nous vous recommandons de créer un fichier client distinct destiné à contenir tous les éléments nouvellement créés.
Les instructions fournies sont les suivantes :
Mise à jour de l'élément <TabSet> pour y insérer l'onglet Exigences
Définir un élément <Tab> pour l'onglet Exigences
Définir l'élément <AssociationTable> pour l'onglet Exigences
Définir l'élément <StructureAuthorDefinition> pour le tableau d'association
Définir l'élément <StructureDefinitionSimple> pour l'association article-exigence
Définir l'élément <Table> pour le type Exigence
Définir les menus pour l'onglet Exigences
Définir les libellés, les info-bulles et les mnémoniques pour l'onglet Exigences
Définir les éléments <ActionDefinition> référencés dans les éléments <MenuItem>
Implémenter une classe "enabled decider" pour contrôler l'activation de l'onglet
Mise à jour de l'élément <TabSet> pour y insérer l'onglet Exigences
Cette opération ajoutera à l'élément TabSet défini une référence à un onglet Exigences.
1. Ouvrez le fichier PDMLinkExplorerMain.xml à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/product
structure
2. Recherchez l'élément <TabSet>, ajoutez une importation du nouvel onglet Exigences et placez-la à l'emplacement souhaité :
<TabSet id="ptc.pdm.pse.ExplorerTaskTabSet" tabPlacement="top"
tabIdWithFocus="ptc.wnc.exp.PropertiesTab">
<Import id="ptc.wnc.exp.PropertiesTab"/>
<Import id="ptc.wnc.exp.StructureChildrenTab"/>
<Import id="mycom.wnc.exp.RequirementsTab"/>
<Import id="ptc.wnc.exp.GpsParamTab"/>
<Import id="ptc.wnc.exp.GpsConstraintsTab"/>
<Import id="ptc.wnc.exp.ViewTab"/>
<Import id="ptc.wnc.exp.DocTab"/>
<Import id="ptc.wnc.exp.ReplacementsTab"/>
<Import id="ptc.wnc.exp.UsedByTab"/>
</TabSet>
Définir un élément <Tab> pour l'onglet Exigences
Cette opération définira l'élément d'onglet Exigences.
1. Ouvrez le fichier PDMLinkExplorerMain.xml à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/product
structure
2. Après l'élément <TabSet>, définissez un élément <Tab> pour l'onglet Exigences :
<TabSet id="ptc.pdm.pse.ExplorerTaskTabSet" ... >
...
</TabSet>
<Tab id="mycom.wnc.exp.RequirementsTab"
tabClass="com.ptc.windchill.explorer.structureexplorer.explorer
.tabs.ShowTablesTab"
enabledDeciderClass="com.mycom.windchill.explorer.structureexpl
orer.deciders.RequirementsEnabledDecider">
<Label imageName="wtcore/images/change_action.gif">
<Resource key="requirementsTabLabel"/>
</Label>
<Panel>
<Import id="mycom.pdm.pse.RequirementAssocTable"/>
</Panel>
</Tab>
* 
L'attribut id de l'élément Tab doit correspondre à la valeur id spécifiée dans le sous-élément d'importation de l'élément <TabSet> défini ci-dessus.
La classe définie pour l'attribut enabledDeciderClass de l'élément Tab contrôle les types pour lesquels cet onglet sera activé en cas de sélection des articles dans l'arborescence de la structure. Cette classe doit être implémentée par le client.
L'attribut imageName du sous-élément <Label> définit l'icône à afficher sur l'onglet.
Le sous-élément <Resource> de <Label> fait référence au libellé de texte défini pour l'onglet.
L'élément <Panel> contient une importation vers le tableau défini à afficher.
Définir l'élément <AssociationTable> pour l'onglet Exigences
Cette opération définira l'élément AssociationTable utilisé par l'onglet Exigences.
1. Ouvrez le fichier PDMLinkExplorerMain.xml à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/product
structure
2. Après la définition de l'élément <Tab> pour l'onglet Exigences, définissez l'élément <AssociationTable>.
<Tab id="mycom.wnc.exp.RequirementsTab" ... >
...
</Tab>
<AssociationTable
id="mycom.pdm.pse.mycom.pdm.pse.RequirementAssocTable">
<Label>
<Resource key="requirementsLabel"/>
</Label>
<Import id="mycom.wnc.exp.RequirementSAD"/>
<Import id="mycom.wnc.exp.ChangeActionTabTable"/>
<Import id="mycom.wnc.exp.ChangeActionAssocTableAA"/>
</AssociationTable>
* 
L'attribut id de l'élément <AssociationTable> doit correspondre à la valeur id spécifiée dans le sous-élément d'importation de l'élément <Tab> défini ci-dessus.
Le sous-élément <Resource> de l'élément <Label> fait référence au libellé de texte défini dans le fichier de ressources à utiliser pour le tableau.
Définir l'élément <StructureAuthorDefinition> pour le tableau d'association
Cette opération définit l'élément StructureAuthorDefinition utilisé par l'élément AssociationTable.
1. Ouvrez le fichier ExplorerStructures.xml à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/struct
ureexplorer
2. Recherchez dans le fichier la section où sont définies les définitions d'auteur de structure. Après le dernier élément <StructureAuthorDefinition>, ajoutez la définition ci-après pour l'onglet Exigences :
<StructureAuthorDefinition id="mycom.wnc.exp.RequirementSAD">
<Import id="mycom.wnc.exp.PartToRequirementSD"/>
</StructureAuthorDefinition>
* 
L'attribut id de l'élément <StructureAuthorDefinition> doit correspondre à la valeur id spécifiée dans le sous-élément d'importation de l'élément <AssociationTable> défini ci-dessus.
Définir l'élément <StructureDefinitionSimple> pour l'association article-exigence
Cette opération définit l'élément StructureDefinitionSimple utilisé par l'élément StructureAuthorDefinition.
1. Ouvrez le fichier ExplorerStructures.xml à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/struct
ureexplorer
2. Recherchez dans le fichier la section où sont définies les définitions de structure. Après le dernier élément <StructureDefinition>, ajoutez la définition ci-après :
<StructureDefinitionSimple
id="mycom.wnc.exp.PartToRequirementSD"
parentToChild="addressedPartMasterReference"
childDisplayId="number">
<Import id="ptc.wnc.exp.WTPartTD"/>
</StructureDefinitionSimple>
* 
L'attribut id de l'élément <StructureDefinitionSimple> doit correspondre à la valeur id spécifiée dans le sous-élément d'importation de l'élément <StructureAuthorDefinition> défini ci-dessus.
Définir l'élément <Table> pour le type Exigence
Cette opération définira un tableau destiné à afficher les exigences (actions de modification) associées à l'article sélectionné dans l'arborescence de la structure. Les données affichées dans les colonnes seront les suivantes :
numéro de l'exigence ;
plage d'effectivité de l'exigence ;
statut de l'exigence ;
numéro de l'élément ChangeDirective propriétaire de cette exigence ;
identificateur de l'article remplissant cette exigence ;
numéro de l'exigence prédécesseur de cette exigence.
Pour définir l'élément <Table> pour le type Exigence
1. Ouvrez le fichier PDMLinkExplorerForTablesAndPanels.xml à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/produc
tstructure
2. A la fin du fichier :
a. Créez l'élément <ExplorerElementGroup> ci-après en tant que sous-élément de l'élément <LogicRepository>.
b. Définissez un sous-élément <LogicContext> de l'élément <ExplorerElementGroup> avec le type de données de l'exigence.
c. Définissez l'élément <Table> et les colonnes, les éléments <CellDefinition>, à afficher dans le tableau.
<LogicRepository>
...
<ExplorerElementGroup>
<LogicContext
application="ptc.pdm.ProductStructureExplorer"
dataType="wt.change2.ChangeAction"/>

<Table id="airbus.wnc.exp.ChangeActionTabTable"
selectionMode="multi-non-contiguous" displayMode="view">
<CellDefinition id="number" mandatory="true" \
pinned="true">
<Label>
<Resource key="reqNumberLabel"/>
</Label>
<AttributeDefinition attributeId="number"/>
</CellDefinition>
<CellDefinition id="effVector" mandatory="true">
<Label>
<Resource key="reqValidityLabel"/>
</Label>
<AttributeDefinition attributeId="displayEffectivity"/>
</CellDefinition>
<CellDefinition id="theActionState"
mandatory="true">
<Label>
<Resource key="reqStatusLabel"/>
</Label>
<AttributeDefinition attributeId="theActionState"/>
</CellDefinition>
<CellDefinition id="owningChangeDirective"
mandatory="true">
<Label>
<Resource key="relatedCINLabel"/>
</Label>
<AttributeDefinition attributeId="MBA|
owningChangeDirectiveReference^WCTYPE|
wt.change2.WTChangeDirective~MBA|number"
rendererClass="com.ptc.windchill.explorer.structureexplorer.ren
derer.component.TypeIconifiedStringComponent"/>
</CellDefinition>
<CellDefinition id="satisfyPartMaster"
mandatory="true">
<Label>
<Resource key="fulfillingDSLabel"/>
</Label>
<AttributeDefinition attributeId="MBA|
satisfyPartMasterReference^WCTYPE|wt.part.WTPartMaster~MBA|
masterReference@WCTYPE|wt.part.WTPart~SCA|displayIdentifier"
rendererClass="com.ptc.windchill.explorer.structureexplorer.ren
derer.component.TypeIconifiedStringComponent"/>
</CellDefinition>
<CellDefinition id="oldActionReference"
displayWhenNoPreferenceSet="false">
<Label>
<Resource key="reqPredecessorLabel"/>
</Label>
<AttributeDefinition attributeId="MBA|
oldActionReference^WCTYPE|wt.change2.ChangeAction~MBA|number"
rendererClass="com.ptc.windchill.explorer.structureexplorer.ren
derer.component.TypeIconifiedStringComponent"/>
</CellDefinition>
</Table>
</ExplorerElementGroup>
</LogicRepository>
* 
L'attribut dataType de l'élément <LogicContext> définit le type d'article qui sera affiché dans le tableau défini.
L'attribut id de l'élément <Table> doit correspondre à la valeur id spécifiée dans le sous-élément d'importation de l'élément <AssociationTable> défini ci-dessus.
L'attribut attributeId de l'élément <CellDefinition> définit les données d'attribut qualifiées à afficher dans cette cellule.
L'attribut rendererClass de l'élément <CellDefinition> est facultatif et remplace l'utilitaire de rendu par défaut pour la cellule.
Le sous-élément <Resource> de l'élément <Label> fait référence au libellé de texte défini dans le fichier de ressources à utiliser pour l'en-tête de colonne.
Définir les menus pour l'onglet Exigences
Cette opération définira les menus et la barre d'outils de l'onglet Exigences. Une barre d'outils doit être définie avec la structure suivante :
bouton Informations standard ;
bouton Générer les exigences, qui déclenchera une action de génération d'exigences pour l'article actuellement sélectionné dans la structure ;
bouton Satisfaire l'exigence, qui présentera à l'utilisateur une liste d'articles candidats pouvant être sélectionnés et désignés comme remplissant l'exigence actuellement sélectionnée ;
bouton Afficher le journal d'effectivité, qui ouvrira une fenêtre de navigateur et affichera le journal d'effectivité pour l'exigence actuellement sélectionnée ;
bouton Rétablir standard ;
bouton Commentaire standard ;
bouton Rétablir standard ;
bouton Commentaire standard ;
Des menus contextuels sont également définis pour le tableau et contiennent des options de menu pour les trois nouvelles opérations :
Générer les exigences
Satisfaire l'exigence
Afficher le journal d'effectivité
Pour définir des menus pour l'onglet Exigences
1. Ouvrez le fichier PDMLinkExplorerMenusForRequirementsTab.xml à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/produc
tstructure
2. Ajoutez le contenu ci-après au fichier :
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE LogicRepository SYSTEM
"/config/logicrepository/dtd/LogicRepository.dtd">
<LogicRepository>
<ExplorerElementGroup>
<LogicContext
application="ptc.pdm.ProductStructureExplorer"/>
<ActionAccess id="mycom.wnc.exp.ChangeActionAssocTableAA">
<MenuBar id="MenuBar">
<Menu id="Menu">
<Import id="ptc.wnc.exp.InfoPageAssocMI"/>
<Separator/>
<MenuItem id="GenerateReqsMI">
<Label
imageName="com/ptc/windchill/explorer/config/images/child_creat
e.gif">
<Resource key="generateReqsLabel"/>
</Label>
<ToolTip>
<Resource key="generateReqsToolTip"/>
</ToolTip>
<Import
id="mycom.wnc.exp.GenerateRequirementsAction"/>
</MenuItem>
<MenuItem id="FulfillReqMI">
<Label
imageName="com/ptc/windchill/explorer/config/images/child_add.g
if">
<Resource key="fulfillReqLabel"/>
</Label>
<ToolTip>
<Resource key="fulfillReqToolTip"/>
</ToolTip>
<Import
id="mycom.wnc.exp.FulfillRequirementAction"/>
</MenuItem>
<MenuItem id="ViewEffLogMI">
<Label
imageName="com/ptc/windchill/explorer/config/images/child_repor
t.gif">
<Resource key="viewEffLogLabel"/>
</Label>
<ToolTip>
<Resource key="viewEffLogToolTip"/>
</ToolTip>
<Import
id="mycom.wnc.exp.ViewEffectivityLogAction"/>
</MenuItem>
<Separator/>
<MenuItem id="RevertMI">
<Label
imageName="com/ptc/windchill/explorer/config/images/revert.gif"
>
<Resource key="revertLabel"/>
</Label>
<ToolTip>
<Resource key="revertToolTip"/>
</ToolTip>
<Import
id="ptc.wnc.exp.RevertForAltAssocAction"/>
</MenuItem>
<Import id="ptc.wnc.exp.CommentAssocMI"/>
</Menu>
</MenuBar>
<ModeToolBar id="ToolBarA">
<Import id="ptc.wnc.exp.EditAppMode"/>
<MenuItemIdentifier
id="ptc.wnc.exp.InfoPageAssocMI"/>
<Separator/>
<MenuItemIdentifier id="GenerateReqsMI"/>
<MenuItemIdentifier id="FulfillReqMI"/>
<MenuItemIdentifier id="ViewEffLogMI"/>
</ModeToolBar>
<ModeToolBar id="ToolBarB">
<Import id="ptc.wnc.exp.DraftAppMode"/>
<Import id="ptc.wnc.exp.AnnotateAppMode"/>
<Import id="ptc.wnc.exp.ReadOnlyAppMode"/>
<MenuItemIdentifier
id="ptc.wnc.exp.InfoPageAssocMI"/>
<Separator/>
<MenuItemIdentifier id="GenerateReqsMI"/>
<MenuItemIdentifier id="FulfillReqMI"/>
<MenuItemIdentifier id="ViewEffLogMI"/>
<Separator/>
<MenuItemIdentifier id="RevertMI"/>
<MenuItemIdentifier
id="ptc.wnc.exp.CommentAssocMI"/>
</ModeToolBar>
<ModePopupMenu id="PopupMenuA">
<Import id="ptc.wnc.exp.EditAppMode"/>
<MenuItemIdentifier id="GenerateReqsMI"/>
<MenuItemIdentifier id="FulfillReqMI"/>
<MenuItemIdentifier id="ViewEffLogMI"/>
</ModePopupMenu>
<ModePopupMenu id="PopupMenuB">
<Import id="ptc.wnc.exp.DraftAppMode"/>
<Import id="ptc.wnc.exp.AnnotateAppMode"/>
<MenuItemIdentifier id="GenerateReqsMI"/>
<MenuItemIdentifier id="FulfillReqMI"/>
<MenuItemIdentifier id="ViewEffLogMI"/>
<Separator/>
<MenuItemIdentifier id="RevertMI"/>
<MenuItemIdentifier
id="ptc.wnc.exp.CommentAssocMI"/>
</ModePopupMenu>
</ActionAccess>
</ExplorerElementGroup>
</LogicRepository>
* 
L'attribut id de l'élément <ActionAccess> doit correspondre à la valeur id spécifiée dans le sous-élément d'importation de l'élément <AssociationTable> défini ci-dessus.
Le sous-élément <Resource> des éléments <Label> et <Tooltip> fait référence au libellé de texte défini dans le fichier de ressources à utiliser pour l'en-tête de colonne.
Définir les libellés, les info-bulles et les mnémoniques pour l'onglet Exigences
Définissez le texte des libellés, les info-bulles et les mnémoniques utilisés dans l'onglet Exigences.
1. Ouvrez le fichier ConfigurationResource.rbInfo à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/produc
tstructure
2. Ajoutez le contenu ci-après à la fin du fichier :
#
# Tabbed Pane - Requirements
#
requirementsTabLabel.value=Requirements
# Change Item to Requirements table
requirementsLabel.value=Requirements
reqNumberLabel.value=Number
reqValidityLabel.value=Effectivity
reqStatusLabel.value=Status
relatedCINLabel.value=Originating From
fulfillingDSLabel.value=Fulfilled By
reqPredecessorLabel.value=Predecessor
generateReqsLabel.value=Generate Requirements
generateReqsToolTip.value=Generate Requirements
fulfillReqLabel.value=Fulfill Requirement
fulfillReqToolTip.value=Fulfill Requirement
viewEffLogLabel.value=View Effectivity Calculation Log
viewEffLogToolTip.value=View Effectivity Calculation Log
* 
Le nom de propriété défini dans le fichier, par exemple <nom de propriété>.value, doit correspondre à l'attribut key de l'élément <Resource> dans les fichiers de configuration XML.
Définir les éléments <ActionDefinition> référencés dans les éléments <MenuItem>
Voici la procédure à suivre pour présenter les actions sous l'onglet Exigences dans l'Explorateur de structures produit. Ces instructions vous permettront de définir une action correspondant aux entrées d'option de menu et d'élément de barre d'outils pour l'action Satisfaire l'exigence définie dans les instructions de personnalisation pour la configuration de l'onglet Exigences.
1. Ouvrez le fichier PDMLinkExplorerActions.xml à partir de l'emplacement suivant :
<Windchill>/codebase/config/logicrepository/xml/explorer/produc
tstructure
2. Recherchez l'élément <ExplorerElementGroup> avec un sous-élément <LogicContext> présentant la valeur d'attribut d'application "ptc.pdm.ProductStructureExplorer". Les éléments ActionDefinition seront ajoutés après l'élément LogicContext.
3. Définissez l'élément approprié en suivant les procédures décrites dans les sections suivantes.
Définir l'élément ActionDefinition pour l'action Satisfaire l'exigence
Cette opération définira l'élément ActionDefinition pour l'action Satisfaire l'exigence.
Comme indiqué ci-dessus, recherchez l'élément <ExplorerElementGroup> avec un sous-élément <LogicContext> présentant la valeur d'attribut d'application "ptc.pdm.ProductStructureExplorer". Après l'élément LogicContext, ajoutez un élément ActionDefinition semblable à ce qui suit :
<ActionDefinition id="mycom.wnc.exp.FulfillRequirementAction"
actionClass="com.ptc.windchill.explorer.structureexplorer.panel
.actions.FulfillChangeActionForStructureWithIntermediateNodeAct
ion">
<StructureAuthorAction>
<Import id="mycom.wnc.exp.PartToRequirementSD"/>
</StructureAuthorAction>
<Import id="ptc.wnc.exp.IsValidInAllWithReadVAL"/>
</ActionDefinition>
* 
L'attribut id défini dans <ActionDefinition> doit correspondre à la valeur Import id spécifiée pour l'option de menu FulfillReqMI définie dans PDMLinkExplorerMenusForRequirementsTab.xml.
L'attribut actionClass sera défini en fonction de la structure nodale des éléments de modification et des solutions de conception. Si l'ensemble de solutions de conception figure immédiatement sous le noeud Elément de modification, la classe ci-après doit être spécifiée : com.ptc.windchill.explorer.structureexplorer.panel.actions.FulfillChangeActionAction. Si l'ensemble de solutions de conception apparaît deux niveaux plus bas que leur noeud Elément de modification, vous devez spécifier la classe suivante : com.ptc.windchill.explorer.structureexplorer.panel.actions.FulfillChangeActionForStructureWithIntermediateNodeAction.
La valeur Import id de l'élément <StructureAuthorAction> doit correspondre à la valeur id de la définition de structure définie dans le fichier ExplorerStructures.xml.
Tous les articles figurant au niveau défini par l'attribut actionClass seront considérés comme des solutions de conception possibles et seront présentés à l'utilisateur dans une liste déroulante.
Définir l'élément ActionDefinition pour l'action Générer des actions de modification
Cette opération définira l'élément ActionDefinition pour l'action Générer des actions de modification.
Comme indiqué ci-dessus, recherchez l'élément <ExplorerElementGroup> avec un sous-élément <LogicContext> présentant la valeur d'attribut d'application "ptc.pdm.ProductStructureExplorer". Après l'élément LogicContext, ajoutez un élément ActionDefinition semblable à ce qui suit :
<ActionDefinition id="mycom.wnc.exp.GenerateRequirementsAction"
actionClass="com.ptc.windchill.explorer.structureexplorer.panel
.actions.GenerateChangeActionsAction">
<Action/>
<Import id="ptc.wnc.exp.IsValidInAllVAL"/>
</ActionDefinition>
* 
L'attribut id défini dans <ActionDefinition> doit correspondre à la valeur Import id spécifiée pour l'option de menu GenerateReqsMI définie dans PDMLinkExplorerMenusForRequirementsTab.xml.
Définir l'élément ActionDefinition pour l'action Afficher le journal d'effectivité
Cette opération définira l'élément ActionDefinition pour l'action Afficher le journal d'effectivité.
Comme indiqué ci-dessus, recherchez l'élément <ExplorerElementGroup> avec un sous-élément <LogicContext> présentant la valeur d'attribut d'application "ptc.pdm.ProductStructureExplorer". Après l'élément LogicContext, ajoutez un élément ActionDefinition semblable à ce qui suit :
<ActionDefinition id="mycom.wnc.exp.ViewEffectivityLogAction"
actionClass="com.ptc.windchill.explorer.structureexplorer.panel
.actions.AssociationUrlAction">
<UrlAction selectionMode="single"
urlBaseName="servlet/TypeBasedIncludeServlet?">
<UrlParameter value="oid={selected_oid}"/>
</UrlAction>
<Import id="ptc.wnc.exp.IsValidForHTMLLaunchMasterOkVAL"/>
</ActionDefinition>
L'attribut id défini dans <ActionDefinition> doit correspondre à la valeur Import id spécifiée pour l'option de menu ViewEffLogMI définie dans PDMLinkExplorerMenusForRequirementsTab.xml.
Implémenter une classe "enabled decider" pour contrôler l'activation de l'onglet
Cette opération crée une classe qui contrôlera les cas d'activation et de désactivation de l'onglet Exigences. L'onglet Exigences ne sera activé et opérationnel que lorsqu'un article correspondant à l'un des types spécifiés dans la classe "enabled decider" sera sélectionné dans l'arborescence de la structure.
1. Créez le fichier RequirementsEnabledDecider.java à partir de l'emplacement suivant :
<Windchill>/codebase/com/mycom/windchill/explorer/structureexpl
orer/deciders
2. Modifiez l'implémentation ci-après si nécessaire :
Modifiez la chaîne common_ancestry pour la faire correspondre à la hiérarchie des types parents des articles pour lesquels vous souhaitez visualiser les exigences.
Dans le bloc de code statique, ajoutez une entrée à l'élément type_id_list pour chaque type d'article dont vous souhaitez visualiser les exigences.
package
com.mycom.windchill.explorer.structureexplorer.deciders;
import java.util.ArrayList;
import java.util.List;
import
wt.services.applicationcontext.implementation.DefaultServicePro
vider;
import
com.ptc.core.foundation.struct.common.StructureConstants;
import com.ptc.core.meta.common.AssociationIdentifier;
import com.ptc.core.meta.common.AssociationTypeIdentifier;
import com.ptc.core.meta.common.AttributeTypeIdentifier;
import com.ptc.core.meta.common.IdentifierFactory;
import com.ptc.core.meta.common.TypeIdentifier;
import com.ptc.core.meta.common.TypeInstanceIdentifier;
import com.ptc.core.meta.type.common.TypeInstance;
import
com.ptc.windchill.explorer.structureexplorer.config.AbstractCon
fig;
import
com.ptc.windchill.explorer.structureexplorer.deciders.EnabledDe
cider;
import
com.ptc.windchill.explorer.structureexplorer.utility.CommonData
;
public class RequirementsEnabledDecider implements
EnabledDecider
{
private static IdentifierFactory identifierFactory =
(IdentifierFactory)
DefaultServiceProvider.getService(IdentifierFactory.class,
"logical"); //$NON-NLS-1$
private static List<TypeIdentifier> type_id_list = new
ArrayList<TypeIdentifier>();
private static String common_ancestry = "WCTYPE|
wt.part.WTPart|com.mycom.MyPart|"; //$NON-NLS-1$
static {
try
{
type_id_list.add(
(TypeIdentifier)identifierFactory.get(common_ancestry +
"com.mycom.CustomPartA")); //$NON-NLS-1$
type_id_list.add(
(TypeIdentifier)identifierFactory.get(common_ancestry +
"com.mycom.CustomPartB")); //$NON-NLS-1$
type_id_list.add(
(TypeIdentifier)identifierFactory.get(common_ancestry +
"com.mycom.CustomPartC")); //$NON-NLS-1$
type_id_list.add(
(TypeIdentifier)identifierFactory.get(common_ancestry +
"com.mycom.CustomPartD")); //$NON-NLS-1$
}
catch(Exception e)
{
e.printStackTrace();
}
}

public boolean isItemEnabled(TypeInstance node_ti,
TypeInstance parent_node_ti, AbstractConfig item_config,
CommonData common_data)
{
boolean enabled = true
if (node_ti !=null)
{
enabled = isValidPart(node_ti);
}
return enabled;
}
/**
* is this node a generice part or a configurable generic
part?
**/
public static boolean isValidPart(TypeInstance node_ti)
{
if (node_ti ==null)
{
return false;
}
TypeInstanceIdentifier node_tii = (TypeInstanceIdentifier)
node_ti.getIdentifier();
if (node_tii ==null)
{
return false;
}
try
{
if (IsMasterd(node_ti))
{
return false;
}
TypeIdentifier type_id = trimTypeId((TypeIdentifier)
node_tii.getDefinitionIdentifier());
for(TypeIdentifier spec_type_id : type_id_list)
{
if(type_id.isDescendedFrom(spec_type_id))
(
return true;
}
}
return false;
}
catch (Exception e)
{
return false;
}
}

/**
* Assumes an iteration...
*
* isMastered is an unpersisted Iteration and a persisted
Master.
*@param ti
*@return
*
*/
private static boolean IsMastered(TypeInstance ti)
{
try
{
TypeInstanceIdentifier tii = (TypeInstanceIdentifier)
ti.getIdentifier();
if (tii instanceod AssociationIdentifier)
{
tii = ((AssociationIdentifier) tii).getTail();
}
if (!tii.isInitialized())
{
AttributeTypeIdentifier master_ati =
(AttributeTypeIdentifier)
identifierFactory.get(StructureConstants.MASTER_REFERENCE_ID_ST
R, tii.getDefinitionIdentifier());
Object object = ti.getSingle(master_ati);
TypeInstanceIdentifier master_tii = null;
if (object instanceof TypeInstanceIdentifier)
{
master_tii = (TypeInstanceIdentifier) object;
}
if (master_tii.isIntialized())
{
return true;
}
}
}
catch (Exception ex)
{
return false;
}

return false;
)
private static TypeIdentifier trimTypeId(TypeIdentifier
type_id)
{
if (type_id instanceof AssociationTypeIdentifier)
{
return ((AssociationTypeIdentifier) type_id).getTail();
}
return teyp_id;
}
}