Avant de pouvoir ajouter certains types d'informations de modèle à un rapport (fichier
RPTDESIGN), vous devez écrire une fonction XPath personnalisée afin d'extraire ces informations des
modèles cible.
Avant de commencer
Conditions préalables : Pour effectuer cette tâche, vous devez être familiarisé avec le développement de
plug-ins dans l'environnement PDE (Plug-in Development Environment) d'Eclipse, ainsi qu'avec l'API UML2.
Procédure
Pour écrire une fonction XPath personnalisée :
- Créez un nouveau projet de plug-in :
- Dans la perspective Développement de plug-in, cliquez sur
,
étendez la branche Développement de plug-in, sélectionnez Projet de plug-in
et cliquez sur Suivant.
- Tapez un ID de plug-in tel que com.ibm.field.birt.xpath_extensions et cliquez sur
Suivant puis sur Terminer. Le plug-in est ajouté à la vue Explorateur de packages et les informations le concernant sont affichées dans
la vue Editeur de manifeste de plug-in, sur la page Aperçu.
- Etendez le point d'extension org.eclipse.jet.xpathFunctions.
- Sur la page Aperçu, sélectionnez l'onglet Extensions et cliquez sur
Ajouter.
- Décochez la case Montrer uniquement les points d'extension des plug-ins requis.
- Dans la zone Filtre de point d'extension, tapez le filtre *.jet. Dans la
liste des extensions filtrées, faites un double clic sur org.eclipse.jet.xpathFunctions.
- Cliquez sur Oui pour confirmer que vous souhaitez ajouter le plug-in à la liste des
dépendances de plug-ins.
- Cliquez sur l'onglet MANIFEST.MF et ajoutez org.eclipse.uml2.uml à la liste
Require_Bundle afin que le plug-in ait une visibilité de l'API UML. Le code de la liste doit ressembler à ceci :
Require_Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.uml2.uml,
org.eclipse.jet
- Cliquez sur l'onglet plugin.xml et modifiez la définition <function>
afin d'y définir votre fonction personnalisée. Par exemple, si vous définissez une fonction nommée SlotValue, ayant deux arguments et implémentée
dans la classe com.ibm.field.birt.xpath_extensions.SlotValue, le code ressemblera à ceci :
<function
implementation="com.ibm.field.birt.xpath_extensions.SlotValues"
maxArgs="2"
minArgs="2"
name="slotValue">
</function>
- Cliquez sur .
- Créez un shell de code et liez-le au plug-in :
- Dans la vue Explorateur de packages, cliquez avec le bouton droit sur le nouveau projet de plug-in et sélectionnez
.
- Dans la zone Package, spécifiez le nom du projet de plug-in.
- Dans la zone Nom, tapez un nom pour la classe. Utilisez le même nom que celui que vous avez affecté à la fonction. Par exemple, dans le cas de la fonction définie
à l'étape 2, le nom de classe est SlotValue.
- Pour ajouter une interface, cliquez sur Ajouter.
- Dans la boîte de dialogue Nouvelle classe Java, dans la zone Choisissez des
interfaces, tapez XPathFunction, puis, dans la liste des entrées concordantes, sélectionnez
XPathFunction - org.eclipse.jet.xpath, cliquez sur OK, puis sur
Terminer.
- Ajoutez du code au fichier
Java™ de la fonction XPath afin de
lui faire exécuter la tâche souhaitée, puis enregistrez le fichier.
Par exemple, si vous voulez que la fonction SlotValue itère sur les noeuds résultant du premier argument (un expression
XPath) et que lorsqu'elle trouve une spécification d'instance, elle renvoie la valeur du "slot" spécifié par l'argument
slotname en appelant la fonction getStringValue, le code à écrire est le suivant :
package com.ibm.field.birt.xpath_extensions;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jet.xpath.NodeSet;
import org.eclipse.jet.xpath.XPathFunction;
import org.eclipse.uml2.uml.InstanceSpecification;
import org.eclipse.uml2.uml.Slot;
import org.eclipse.uml2.uml.ValueSpecification;
public class SlotValue implements XPathFunction {
public String getStringValue(InstanceSpecification ia, String slotname) {
List slots = ia.getSlots();
for (Iterator iterator = slots.iterator(); iterator.hasNext();) {
Slot slot = (Slot) iterator.next();
String definingFeatureName = slot.getDefiningFeature().getName();
if (definingFeatureName.equals(slotname)) {
List values = slot.getValues();
for (Iterator iterator2 = values.iterator(); iterator2
.hasNext();) {
ValueSpecification value = (ValueSpecification) iterator2.next();
return value.stringValue();
}
}
}
return null;
}
public Object evaluate(List args) {
Object obj = args.get(0);
String slotname = (String) args.get(1);
if (obj instanceof NodeSet) {
NodeSet ns = (NodeSet) obj;
for (Iterator iterator = ns.iterator(); iterator.hasNext();) {
Object item = (Object) iterator.next();
if (item instanceof InstanceSpecification){
InstanceSpecification ispec = (InstanceSpecification) item;
if ((slotname != null)&&(slotname.length()>0))
return getStringValue(ispec,slotname);
}
}
}
return null;
}
}
- Créez un nouveau projet de dispositif (feature) pour le plug-in :
- Cliquez sur
,
étendez la branche Développement de plug-in, sélectionnez Projet de
dispositif et cliquez sur Suivant.
- Dans la zone Nom du projet, tapez un nom de projet et cliquez sur
Suivant. Il est souvent utile de choisir, pour le dispositif, un nom similaire à celui du plug-in. Ainsi, pour le plug-in
com.ibm.field.birt.xpath_extensions, vous pourriez choisir le nom de dispositif
com.ibm.field.birt.xpath_extensions.feature.
- Cochez la case du plug-in que vous avez créé à l'étape 1 pour l'inclure dans le dispositif, puis cliquez sur
Terminer. Le dispositif est ajouté à la vue Explorateur de packages et les informations le concernant sont affichées
dans la vue Editeur de manifeste de dispositif, sur la page Aperçu.
- Sur la page Aperçu, dans la zone Nom, tapez un nom de dispositif tel que Fonction
Extensions XPath.
- Sur la page Aperçu, cliquez sur le lien de l'assistant d'exportation.
- Sélectionnez Fichier d'archive, spécifiez un emplacement et un nom pour le fichier (par
exemple, xpath_extensions.zip) et cliquez sur Terminer.
Remarque : Vous pouvez utiliser ce plug-in pour plusieurs projets de fonction XPath personnalisée.
- Importez le nouveau plug-in dans l'instance d'Eclipse où vous concevez vos rapports :
- Extrayez le fichier d'archive dans un répertoire tel que C:/temp/xpath_extensions.
- Dans Eclipse, cliquez sur .
- Dans l'assistant Installation/Mise à jour, cliquez sur Rechercher les nouveaux dispositifs à
installer et cliquez sur Suivant.
- Cliquez sur Nouveau site local, sélectionnez le dossier contenant le dispositif et le plug-in,
cliquez sur OK, puis sur Terminer.
- Dans la fenêtre de résultats de la recherche, sélectionnez votre dispositif et cliquez sur
Suivant.
- Si vous êtes d'accord avec les termes du contrat de licence, sélectionnez J'accepte les dispositions du
contrat de licence, cliquez sur Suivant, puis sur Terminer.
- Lorsqu'un message vous invite à redémarrer votre ordinateur, cliquez sur Oui.
Résultats
Vous pouvez à présent utiliser la nouvelle extension XPath dans vos conceptions de rapport.
Remarque : Les utilisateurs de conceptions de rapport dépendant de fonctions XPath personnalisées devront également importer le
nouveau dispositif avant de pouvoir générer des rapports à partir de ces conceptions. La rubrique "Importation de
fonctions XPath personnalisées" fournit des informations générales, mais rien ne vous empêche d'accompagner le fichier
RPTDESIGN d'une documentation personnalisée expliquant aux utilisateurs où ils peuvent trouver le
dispositif et comment l'utiliser.