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.
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.
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.
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.