Vous êtes sur la page 1sur 54

Guide du programmeur SDK

CaliberRM

Les applications mentionnes dans ce manuel sont brevetes par Borland Software Corporation ou en attente de brevet. Ce document ne donne aucun droit sur ces brevets. Copyright 19972008 Borland Software Corporation et/ou ses filiales. Tous les noms de marques et de produits Borland sont des marques de fabrique ou des marques dposes de Borland Software Corporation aux Etats-Unis et dans dautres pays. Toutes les autres marques appartiennent leurs propritaires respectifs. CRM06-SDKPG Fvrier 2008

Table des matires


Chapitre 1 Chapitre 4

Introduction
Chapitre 2

Cration dun complment de traabilit pour CaliberRM 41


Introduction . . . . . . . . . . . . . . . . . . . . Utilisation de lexemple Visual Basic.NET . . . . . Interface du complment de traabilit . . . . . . VendorSession . . . . . . . . . . . . . . . . . VendorView . . . . . . . . . . . . . . . . . . . VendorObject . . . . . . . . . . . . . . . . . . Enregistrement et activation de votre complment de traabilit . . . . . . . . . . . . . . . . . . . . . . . . . 41 41 42 42 44 44

Utilisation de Visual Basic pour crire des applications SDK


Introduction . . . . . . . . . . . . . . . . . . . . Configuration de votre EDI . . . . . . . . . . . . Initialisation de la bibliothque CaliberRM . . . . Connexion un serveur CaliberRM. . . . . . . . Utilisation de sessions . . . . . . . . . . . . . . Cration dobjets CaliberRM . . . . . . . . . . . Modification dobjets CaliberRM . . . . . . . . . Suppression dobjets CaliberRM . . . . . . . . . Exigences . . . . . . . . . . . . . . . . . . . . . Cration dexigences . . . . . . . . . . . . . Attributs et valeurs dattributs . . . . . . . . . Valeurs dattributs de listes . . . . . . . . . . Dfinition de valeurs dattributs . . . . . . . . Descriptions des exigences . . . . . . . . . . Rfrences de document . . . . . . . . . . . Responsabilits . . . . . . . . . . . . . . . . Historique . . . . . . . . . . . . . . . . . . . Discussions . . . . . . . . . . . . . . . . . . Arborescences dexigences . . . . . . . . . . Traabilit . . . . . . . . . . . . . . . . . . . . . Obtention des traces. . . . . . . . . . . . . . Cration de traces entre exigences . . . . . . Cration de traces vers des artefacts logiciels qui ne sont pas des exigences . . . . . . . . Suppression de traces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
. 3 . 3 . 4 . 5 . 6 . 7 . 7 . 8 . 8 . 8 . 9 . 11 . 13 . 14 . 15 . 16 . 17 . 19 . 20 . 23 . 24 . 25

. 45

Annexe A

Modle dobjets CaliberRM

47

Modle dobjets CaliberRM . . . . . . . . . . . . . 48

. . 25 . . 26

Chapitre 3

Utilisation de Java pour crire des applications SDK


Introduction . . . . . . . . . . . . . . . . . . . . Cration dun CaliberServer . . . . . . . . . . . Utilisation de sessions . . . . . . . . . . . . . . Conventions du SDK Java CaliberRM . . . . . . Cration dobjets CaliberRM . . . . . . . . . . . Modification dobjets CaliberRM . . . . . . . . . Suppression dobjets CaliberRM . . . . . . . . . Exigences . . . . . . . . . . . . . . . . . . . . . Arborescences dexigences . . . . . . . . . . Cration dexigences . . . . . . . . . . . . . Attributs dexigences. . . . . . . . . . . . . . Historique des exigences . . . . . . . . . . . Traabilit . . . . . . . . . . . . . . . . . . . . . Obtention des traces. . . . . . . . . . . . . . Cration de traces entre exigences . . . . . . Cration de traces vers des artefacts logiciels qui ne sont pas des exigences . . . . . . . . . . . . . . . . . . . . . . .

27
. 27 . 27 . 29 . 29 . 30 . 30 . 31 . 31 . 31 . 35 . 36 . 37 . 38 . 39 . 39

. . 40

ii

Chapitre

1
Chapitre 1

Introduction

Le kit de dveloppement (SDK) CaliberRM et lAPI du complment de traabilit favorise les possibilits dextension de CaliberRM.

CaliberRM SDK
A laide du SDK CaliberRM, vous pouvez crer, modifier et supprimer des informations CaliberRM, telles que projets, baselines, exigences, utilisateurs et groupes. Le SDK CaliberRM vous donne accs toutes les donnes dexigences de CaliberRM, au moyen de programmes crits en Java ou dans tout autre langage prenant en charge .NET ou COM. Ce document apporte aux programmeurs Visual Basic et Java les informations dont ils ont besoin pour dmarrer dans les API de CaliberRM. Remarque : Consultez la documentation dtaille pour les programmeurs, au format Javadoc, ladresse Program Files\Borland\CaliberRM SDK <version>\api\index.html, ou bien contactez le support de Borland, pour de plus amples informations. Important : Si votre application SDK existante doit se connecter un serveur qui na pas encore t mis au niveau de cette version, ne recompilez pas votre application avec le SDK inclus dans cette version. En gnral, quand vous crivez des applications SDK, utilisez la mme version du SDK que celle du plus ancien serveur auquel doit se connecter lapplication. Vous devez recompiler vos applications .NET/ COM SDK pour utiliser les nouvelles fonctionnalits du SDK (crer et affecter des profils de scurit, obtenir/dfinir un DN utilisateur LDAP) fournies dans cette version ; lapplication recompile sera compatible avec cette version du serveur. Pour de plus amples informations sur la cration dapplications SDK, reportez-vous aux sections Utilisation de Visual Basic pour crire des applications SDK et Utilisation de Java pour crire des applications SDK, dans ce manuel.

C h ap i t r e 1 : I n t r od u c t i o n

Technologie de traabilit complmentaire


CaliberRM fournit un moyen unique dtendre vos informations de traabilit par des outils tiers, grce sa technologie de traabilit complmentaire. Vous pouvez crer un module de traabilit complmentaire afin doffrir la fonction de traabilit une application externe. Par exemple, la cration dun complment de traabilit pour Microsoft Project, vous permet de dfinir et de grer facilement des traces en temps rel, partir dexigences CaliberRM et destination de tches MS Project. Une fois la trace cre, vous pouvez la voir dans la Matrice de traabilit et dans le Diagramme de traabilit, ou crer un rapport sur elle avec Document Factory. Pour de plus amples informations sur la cration dun complment de traabilit, reportez-vous la section Cration dun complment de traabilit pour CaliberRM, dans ce manuel.

Informations supplmentaires
Si vous souhaitez obtenir de laide sur le SDK CaliberRM, envoyez votre demande au groupe de discussion du SDK CaliberRM, ladresse news://newsgroups.borland.com/borland.public.caliber-rm.sdk. Pour signaler un problme dans le SDK CaliberRM, contactez le support ladresse http://support.borland.com/.

2 G ui d e du p r og r a m m e ur S DK Ca l ib e rR M

Chapitre

2
Utilisation de Visual Basic pour crire des applications SDK
Chapitre 2

Introduction
Ce chapitre prsente le kit de dveloppement (SDK) CaliberRM pour les programmeurs Visual Basic. Voici son contenu :
I

description des tapes ncessaires pour configurer votre EDI de faon utiliser le SDK CaliberRM ; utilisation du SDK pour se connecter un serveur CaliberRM ; cration, modification et suppression dinformations CaliberRM ; utilisation des arborescences, des attributs et de lhistorique des exigences ; prsentation des discussions CaliberRM ; utilisation du SDK pour afficher, crer et supprimer des relations de traabilit.

I I I I I

Configuration de votre EDI


Pour utiliser le SDK CaliberRM dans votre projet, vous devez dfinir dans votre EDI une rfrence la bibliothque dobjets du SDK.

Visual Studio 6.0


1 Cliquez sur Projet > Rfrence dans le menu principal.Si le SDK CaliberRM a t

correctement install, la rfrence CaliberRM library doit figurer dans la liste des rfrences disponibles.
2 Slectionnez CaliberRM library et cliquez sur OK pour enregistrer les

modifications.
3 Si vous ne voyez pas de rfrence nomme CaliberRM library dans la liste des

rfrences, cliquez sur Parcourir et cherchez le fichier CaliberRMSDK DLL sur votre disque dur.

C ha p it r e 2 : U t i li s at io n de V i s u al B a s ic p o ur c r i re d e s a pp li c a t io n s S D K

(La bibliothque est gnralement situe dans le dossier Program Files\Borland\ CaliberRM SDK <version>\api\lib et le nom du fichier bibliothque est CaliberRMSDK<version>.dll.)
4 Cliquez sur OK dans la bote de dialogue Rfrences.

Visual Studio .NET 2003


1 Cliquez sur Projet > Ajouter une rfrence dans le menu principal. 2 Cliquez sur le bouton Parcourir dans la bote de dialogue Ajouter une rfrence. 3 Localisez la bibliothque CaliberRM SDK sur votre disque dur et cliquez sur Ouvrir.

(La bibliothque est gnralement situe dans le dossier Program Files\Borland\ CaliberRM SDK <version>\api\lib et le nom du fichier bibliothque est CaliberRMSDK<version>.NET.dll.)
4 Cliquez sur OK dans la bote de dialogue Ajouter une rfrence.

Visual Studio 2005


1 Cliquez sur Projet > Ajouter une rfrence dans le menu principal. 2 Cliquez sur longlet Parcourir dans la bote de dialogue Ajouter une rfrence. 3 Localisez la bibliothque CaliberRM SDK sur votre disque dur et cliquez sur OK.

(La bibliothque est gnralement situe dans le dossier Program Files\Borland\ CaliberRM SDK <version>\api\lib et le nom du fichier bibliothque est CaliberRMSDK<version>.NET.dll.)
4 Cliquez sur OK dans la bote de dialogue Ajouter une rfrence.

Pour vrifier si la rfrence au SDK CaliberRM est correctement dfinie, effectuez les oprations suivantes :
1 Cliquez sur Projet > Tester les proprits VBNET dans le menu principal. 2 Cliquez sur longlet Rfrences. Vous devriez voir CaliberRMSDK<version>.NET

dans le volet Rfrences.

Vous pouvez alors utiliser la bibliothque CaliberRMSDK dans votre code. Assurez-vous dimporter les classes du SDK CaliberRM dans votre code comme ceci :

Imports Starbase.CaliberRM.Interop

Initialisation de la bibliothque CaliberRM


Chaque fois que vous lancez le SDK COM, celui-ci lance une machine virtuelle (VM) Java. Le code de cette section doit tre appel avant tout autre appel au SDK car, une fois la VM charge, ces options ne peuvent plus tre dfinies.

4 G ui d e du p r og r a m m e ur S DK Ca l ib e rR M

Les applications COM peuvent utiliser les objets Initializer et IStJavaVMInfo du SDK, par exemple :

Lobjet Initializer est responsable du chargement de la VM Java. Dim objInitializer As New Initializer IStJavaVMInfo dcrit une VM Java. Dim objStJavaVMInfo As IStJavaVMInfo Accs la VM en cours depuis lobjet Initializer... Set objStJavaVMInfo = objInitializer.JavaConfiguration.CurrentJavaVM Dfinition de lindicateur de mmoire max 1000 Mo... objStJavaVMInfo.Options = "-Xmx1000M"

Remarque : Par dfaut, la plupart des VM utilisent au maximum 64 Mo de mmoire. Cette limite peut tre redfinie laide de lindicateur de mmoire maximale de la VM (Xmx). Spcifiez la taille maximale, en octets, du pool dallocation mmoire. Cette valeur doit tre un multiple de 1024 suprieur 2 Mo. Ajoutez la lettre k ou K pour indiquer des kilo-octets, ou bien m ou M pour indiquer des mga-octets. La valeur par dfaut est 64 Mo. Par exemple :
I I I

-Xmx83886080 -Xmx81920k -Xmx80m

Si lapplication ne peut pas dmarrer la VM Java et que vous obtenez lerreur Espace insuffisant pour le tas de lobjet, diminuez la taille du tas de la JVM. Gnralement, vous devez spcifier la taille mmoire de la VM Java en fonction de la mmoire disponible de votre ordinateur.

Connexion un serveur CaliberRM


La premire tape pour utiliser le SDK CaliberRM consiste crer une connexion un serveur CaliberRM. Pour tablir une connexion, vous devez crer une rfrence un objet CaliberServer. Un objet CaliberServer sert tablir et maintenir une connexion avec un serveur CaliberRM pour le compte dun utilisateur CaliberRM.

C ha p it r e 2 : U t i li s at io n de V i s u al B a s ic p o ur c r i re d e s a pp li c a t io n s S D K

Le code suivant est une application Visual Basic simple qui tablit la connexion un serveur CaliberRM :

Dclaration de variables objet pour les objets Caliber factory de serveur, serveur et session. Dim objServerFact As CaliberServerFactory Dim objServer As CaliberServer Dim objSession As Session Affectation de rfrences dobjets aux variables serveur et factory de serveur. Set objServerFact = New CaliberServerFactory Set objServer = objServerFact.Create(localhost) Affectation dune rfrence dobjet la variable session par une connexion au serveur Caliber. Set objSession = objServer.login("admin", "admin")

Dans lexemple ci-dessus, remarquez que la cration dune rfrence un serveur CaliberRM se fait en deux tapes. En premier lieu, il faut crer une factory de serveur CaliberRM :

Set objSrvrFctry = New CaliberServerFactory

Ensuite, vous utilisez la factory de serveur pour crer une nouvelle rfrence de serveur :

Set objServer = objSrvrFctry.Create(localhost)

Utilisation de sessions
Un objet Session reprsente la vue dun utilisateur de CaliberRM et fournit ainsi un point dentre dans le modle dobjets CaliberRM. Lexemple prcdent cre une session en effectuant une connexion un objet CaliberRM. Dans le code suivant, cette session est utilise pour afficher les noms de tous les projets auxquels lutilisateur a accs.

Dclaration dune variable objet pour un projet Caliber Dim objProject As Project Itration sur tous les projets de la session. For Each objProject In objSession.Projects Debug.Print objProject.Name Next objProject

6 G ui d e du p r og r a m m e ur S DK Ca l ib e rR M

Cration dobjets CaliberRM


Avec le SDK CaliberRM, vous pouvez crer, modifier et supprimer les objets suivants :
I I I I I I I I I I I

Projets Baselines Utilisateurs Groupes Services Exigences Types dexigences Profils de scurit Glossaires Termes de glossaire Intgrations

Pour crer la plupart des informations CaliberRM, suivez ces tapes :


1 2 3

Crez une factory qui produira le nouvel objet. Appelez la mthode Create de la factory. Appelez la mthode Save du nouvel objet.

Lexemple suivant excute ces tapes pour crer un nouvel objet User.

Cration dune factory qui sera utilise pour produire des nouveaux objets User. Set objUserFactory = New UserFactory Cration dun nouvel objet User. Set objNewUser = objUserFactory.Create("jdoe", objSession) Dfinition des proprits du nouvel objet User. objNewUser.FirstName = "John" objNewUser.LastName = "Doe" Enregistrement de lobjet User. objNewUser.save

Modification dobjets CaliberRM


Pour modifier un objet CaliberRM, suivez ces tapes :
1 2 3 4

Obtenez une instance dun objet CaliberRM. Appelez la mthode Lock de lobjet. Dfinissez une ou plusieurs proprits de lobjet. Appelez la mthode Save de lobjet.

Reportez-vous lexemple ci-aprs.

C ha p it r e 2 : U t i li s at io n de V i s u al B a s ic p o ur c r i re d e s a pp li c a t io n s S D K

Accs un objet Group. Set objGroup = objSession.Groups.Item(2) Verrouillage du groupe. objGroup.lock Modification des proprits du groupe. objGroup.Name = "Nouveau nom" objGroup.EmailAddress = "Nouvelle adresse email" objGroup.Description = "Nouvelle description" Enregistrement du groupe modifi. objGroup.save

Suppression dobjets CaliberRM


Vous pouvez supprimer un objet CaliberRM en appelant sa mthode Remove. Par exemple :

Dim objRequirement As Requirement Set objRequirement = objSession.getRequirement(1) objRequirement.remove

Remarquez que la mthode Remove supprime une exigence uniquement partir de la baseline actuelle. Lexigence nest pas supprime des baselines prcdentes.

Exigences
Cette section dtaille la cration, la modification et la suppression dexigences.

Cration dexigences
Le SDK offre deux mthodes permettant de crer de nouvelles exigences. La premire mthode permet de crer des exigences au niveau suprieur de larborescence des exigences dun projet. La deuxime sert crer des enfants dune exigence existante.

8 G ui d e du p r og r a m m e ur S DK Ca l ib e rR M

Dans lexemple suivant, la premire mthode create (Create1) cre une nouvelle exigence.

Accs au premier projet dans la collection de la session. Set objProject = objSession.Projects.Item(0) Accs au premier type dexigences dans le projet. Set objType = objProject.CurrentBaseline.RequirementTypes.Item(0) Cration dune factory dobjets Requirement. Set reqFactory = New RequirementFactory Cration dune nouvelle exigence. Set newRequirement = reqFactory.Create1( _ "Nouvelle exigence", _ objProject, _ objType, _ 0, _ objSession) newRequirement.save ""

Dans lexemple prcdent, remarquez que le 4me paramtre transmis Create1 est un zro. Il indique, dans larborescence des exigences du projet, le niveau o insrer la nouvelle exigence. Lexemple suivant montre comment la deuxime mthode create (Create2) cre une exigence enfant dune exigence existante.

Cration dune factory dobjets Requirement. Set reqFactory = New RequirementFactory Accs une exigence qui sera le parent de la nouvelle exigence. Set parentReq = objSession.getRequirement(1) Cration dune nouvelle exigence enfant de parentReq. Set newChildRequirement = reqFactory.Create2( _ "Nouvelle exigence enfant", _ parentReq, _ 4, _ objSession)

Attributs et valeurs dattributs


CaliberRM permet de dfinir des exigences ayant nimporte quel nombre dattributs dfinis par lutilisateur (UDA). En outre, toutes les exigences contiennent les attributs systme Etat et Priorit. De mme, dans le SDK CaliberRM, un objet Requirement (exigence) dispose des proprits Status, Priority et AttributeValues qui, respectivement, renvoient son tat, sa priorit et les valeurs de ses UDA. Dans le SDK CaliberRM, les objets Attribute reprsentent un type dattribut CaliberRM alors que les objets AttributeValue reprsentent une instance dun type.

C ha p it r e 2 : U t i li s at io n de V i s u al B a s ic p o ur c r i re d e s a pp li c a t io n s S D K

Le tableau suivant dcrit les relations entre les attributs CaliberRM et les objets Attribute et AttributeValue du SDK. AttributeValue du SDK
UDATextValue UDAIntegerValue UDADurationValue UDAFloatValue UDADateValue UDABooleanValue UDAListValue

Attributs CaliberRM
Ligne de texte isole Texte multiligne Entier long Dure Flottant Date Boolen Liste choix multiple Liste choix unique Liste de slection de plusieurs groupes Liste de slection de groupe isol Liste de slection de plusieurs utilisateurs Liste de slection dutilisateur isol

Attribute du SDK
UDAText UDAInteger UDADuration UDAFloat UDADate UDABoolean UDAList

Le code suivant montre comment obtenir des objets Attribute partir dun type dexigences :

Accs au premier type dexigences dans la session. Set objRequirementType = objSession.RequirementTypes.Item(0) Accs au premier onglet personnalis dans le type dexigences. Set objCustomTab = objRequirementType.CustomTabs.Item(0) Impression du nom des attributs affects longlet personnalis. Dim objAttribute As CaliberRM.Attribute For Each objAttribute In objCustomTab.attributes Debug.Print vbTab & vbTab & objAttribute.Name Next objAttribute

De mme, vous pouvez obtenir des objets AttributeValue partir dune exigence. Lexemple suivant affiche la mme liste que lexemple prcdent en y ajoutant les valeurs :

Dim objAttribValue As AttributeValue Boucle sur toutes les valeurs dattributs. For Each objAttribValue In objRequirement.AttributeValues Impression du nom et de la valeur de lattribut Debug.Print _ objAttribValue.Attribute.Name _ & = _ & objAttribValue.Value Next objAttribValue

10 G u i de d u pr o g r am m eu r S D K C a li be r R M

Dans cet exemple, remarquez lutilisation de la proprit Attribute de AttributeValue pour obtenir le nom :

objAttribValue.Attribute.Name

Vous pouvez utiliser cette proprit chaque fois que vous avez besoin dobtenir le type dun AttributeValue. Lexemple ci-aprs illustre la manipulation dun certain type de Attribute et AttributeValue.

Boucle sur toutes les valeurs dattributs. For Each objAttribValue In objRequirement.AttributeValues Recherche dun UDATextValue. If TypeOf objAttribValue Is UDATextValue Then Conversion de lAttributeValue en UDATextValue. Dim textValue As UDATextValue Set textValue = objAttribValue Conversion de Attribute en UDAText. Dim textAttribute As UDAText Set textAttribute = objAttribValue.Attribute Impression dinformations spcifiques la valeur. Debug.Print _ "La valeur de UDATextValue est : _ & textValue.Value Impression dinformations spcifiques au type de valeur. Debug.Print _ "La longueur maximale de cette valeur est : _ & textAttribute.MaximumLength Debug.Print _ "La longueur minimale de cette valeur est : _ & textAttribute.MinimumLength End If Next objAttribValue

Valeurs dattributs de listes


Comme nous lavons dj prcis, un objet UDAListValue englobe toutes les valeurs dattributs de listes quune exigence peut recevoir. Cette section contient des exemples pratiques montrant lutilisation dun objet UDAListValue pour afficher des listes choix unique et choix multiple.

C h ap it r e 2 : Ut il is a t io n d e V is u a l B a s i c po u r c ri r e de s a p pl ic a t i on s S D K

11

Lexemple ci-aprs affiche les entres de la liste dtats dune exigence et la valeur slectionne.

Private Sub Form_Load() ... Dim objRequirement As Requirement Set objRequirement = objSession.getRequirement(1) PrintList objRequirement.Status End Sub Private Sub PrintList(objListValue As UDAListValue) Impression des entres de la liste Debug.Print "Entre(s) de la liste :" Dim listEntry As UDAListEntry For Each listEntry In objListValue.ListEntries Debug.Print listEntry.Object Next listEntry Impression de la valeur slectionne Debug.Print "Valeur slectionne = " & objListValue.selectedValue End Sub

Ce code peut tre modifi pour afficher une liste de slection dutilisateur isol :

Private Sub PrintSSUserList(objReq As Requirement) Dim objAttribValue As CaliberRM.AttributeValue Itration sur tous les attributs associs lexigence fournie. For Each objAttribValue In objReq.AttributeValues Imprimer uniquement les attributs dune Liste de slection dutilisateur isol. Set objAttribute = objAttribValue.Attribute If objAttribute.UITypeName = objAttribute.UI_NAME_SSUL Then Impression des entres de la liste dutilisateurs Debug.Print "Entre(s) de la liste dutilisateurs :" Dim listEntry As UDAListEntry For Each listEntry In objAttribValue.ListEntries Debug.Print listEntry.Object.Name Next listEntry Debug.Print "Valeur slectionne : & _ objAttribValue.SelectedValue.Name End If Next objAttribValue End Sub

12 G u i de d u pr o g r am m eu r S D K C a li be r R M

Dans lexemple ci-dessus, remarquez que la liste de slection dutilisateur isol est extraite de faon unique partir dune collection dattributs en comparant la proprit UITypeName de son attribut la constante UI_NAME_SSL :

If objAttribute.UITypeName = objAttribute.UI_NAME_SSUL Then


Cependant, vous pouvez slectionner un attribut de la collection par son nom. Par exemple :

If objAttribute.Name = "Mon attribut SSUL" Then


Lobjet UDAListValue peut reprsenter aussi des valeurs de listes choix multiple. Par exemple, le code suivant imprime la proprit Name et Selected de chaque lment dune liste de slection de plusieurs groupes :

Dim listEntry As UDAListEntry For Each listEntry In objAttribValue.ListEntries Utilisation de la proprit Selected de lentre de la liste pour dterminer si le groupe est slectionn If listEntry.Selected Then Debug.Print listEntry.Object.Name & " *** Selected ***"" Else Debug.Print listEntry.Object.Name End If Next listEntry

Dfinition de valeurs dattributs


Pour modifier les valeurs des attributs dune exigence, suivez ces tapes :
1 Obtenez une exigence. 2 Appelez la mthode Lock de lexigence. 3 Dterminez les types des valeurs dattributs (cest--dire UDATextValue,

UDAListValue) que lexigence contient.


4 Modifiez les objets AttributeValue de lexigence selon leur type. 5 Mettez lexigence jour en donnant la nouvelle valeur sa proprit

AttributeValue.
6 Appelez la mthode Save de lexigence.

Reportez-vous lexemple ci-aprs.

C h ap it r e 2 : Ut il is a t io n d e V is u a l B a s i c po u r c ri r e de s a p pl ic a t i on s S D K

13

Set objRequirement = objSession.getRequirement(1) objRequirement.lock Boucle sur toutes les valeurs dattributs de lexigence. Dim objAttribValue As AttributeValue For Each objAttribValue In objRequirement.AttributeValues If TypeOf objAttribValue Is UDABooleanValue Then Sil sagit dune valeur UDA boolenne, inversez sa valeur. objAttribValue.Value = Not objAttribValue.Value ElseIf TypeOf objAttribValue Is UDATextValue Then Sil sagit dune valeur UDA texte, donnez-lui lheure actuelle. objAttribValue.Value = Time ElseIf TypeOf objAttribValue Is UDAIntegerValue Then Sil sagit dune valeur UDA entire, ajoutez-lui 1. objAttribValue.Value = objAttribValue.Value + 1 ElseIf TypeOf objAttribValue Is UDAListValue Then If objAttribValue.MaximumSelections = 1 Then Sil sagit dune valeur de liste slection unique, incrmentez de 1 lindex slectionn. objAttribValue.SelectedIndex = _ objAttribValue.SelectedIndex + 1 End If End If Mise jour de lobjet exigence avec la nouvelle valeur. objRequirement.AttributeValue = objAttribValue Next objAttribValue Enregistrement de lexigence modifie. objRequirement.save "Modification de valeurs UDA"

Descriptions des exigences


Dans CaliberRM, une description dexigence peut tre une chane de texte ou un participant dans une relation de description mappe/partage. Une description dexigence partage est utilise par plusieurs exigences. A linverse, une description dexigence est mappe quand elle est base sur celle dune autre exigence. Le SDK CaliberRM fournit trois classes qui reprsentent les tats possibles dune description dexigence : RequirementDescription, RequirementDescriptionMapped et RequirementDescriptionShared. Tous ces objets de description ont une proprit Text qui permet dobtenir le texte dune description. Ainsi, le snippet de code suivant fonctionne avec toutes les exigences :

Debug.Print req.Description.Text

14 G u i de d u pr o g r am m eu r S D K C a li be r R M

Pour modifier la description dune exigence, affectez un nouvel objet RequirementDescription ou RequirementDescriptionMapped la proprit Description de lexigence. Par exemple, le code suivant cre une description en texte simple (les appels des mthodes Lock et Save ont t supprims pour des raisons de clart) :

Cration dune factory qui produira des descriptions. Dim descriptionFactory As New RequirementDescriptionFactory Cration et utilisation dun nouvel objet description pour dfinir la proprit Description de Requirement 1. req.Description = descriptionFactory.Create("Une nouvelle description.")

Lexemple suivant cre une description HTML simple de lexigence.

Cration dune factory qui produira des descriptions. Dim descriptionFactory As New RequirementDescriptionFactory Cration et utilisation dun nouvel objet description pour dfinir la proprit Description de Requirement 1. req.Description = descriptionFactory.Create("<html><body>A new <i><b>formatted description.</b></i></body></html>")

Dans lexemple suivant, la description de Requirement n1 est mappe sur Requirement n2.

Set req1 = objSession.getRequirement(1) Set req2 = objSession.getRequirement(2) Cration dune factory qui produira des descriptions mappes. Dim mapDescriptionFactory As New RequirementDescriptionMappedFactory Cration et utilisation dune nouvelle description mappe pour dfinir la proprit Description de Requirement 1. req1.Description = mapDescriptionFactory.Create(req2, objSession)

Rfrences de document
Le SDK CaliberRM fournit trois types dobjets de rfrence de document : FileReference, TextReference et WebReference. Vous pouvez crer tous ces objets de rfrence et les ajouter la proprit DocumentReferences dune exigence. Lexemple ci-aprs cre une instance de chacun de ces objets, puis les utilise pour modifier une exigence.

C h ap it r e 2 : Ut il is a t io n d e V is u a l B a s i c po u r c ri r e de s a p pl ic a t i on s S D K

15

En premier, il faut copier la collection existante des rfrences de lexigence dans une collection pouvant tre modifie. Dim colFactory As New CollectionFactory Set docRefs = colFactory.CreateByIStCollection(req.DocumentReferences) Cration et ajout dune rfrence de texte la collection docRefs. Dim textRefFactory As New TextReferenceFactory docRefs.Add textRefFactory.Create("Rfrence de texte") Cration et ajout dune rfrence web la collection docRefs. Dim webRefFactory As New WebReferenceFactory docRefs.Add webRefFactory.Create("www.microsoft.com") Cration et ajout dune rfrence de fichier la collection docRefs. Dim fileRefFactory As New FileReferenceFactory docRefs.Add fileRefFactory.Create("C:\foo.txt") Dfinition des rfrences et enregistrement. req.lock req.DocumentReferences = docRefs req.save ""

Remarquez que lexemple ci-dessus commence par crer une nouvelle collection laide de la mthode CreateByIStCollection de CollectionFactory. Cest obligatoire, car la proprit DocumentReferences dune exigence est une collection en lecture seule et ne peut pas tre modifie.

Responsabilits
Gnralement, dans CaliberRM, chaque exigence a plusieurs utilisateurs responsables. Vous pouvez obtenir ces utilisateurs et leurs groupes au moyen de la proprit Responsibilities de lexigence, qui reprsente une collection dobjets GroupMemberAssignment.

16 G u i de d u pr o g r am m eu r S D K C a li be r R M

Le code suivant dsaffecte tous les utilisateurs responsables dune exigence.

Accs la collection dobjets GroupMemberAssignment qui contient les responsabilits de lexigence. Dim gmaCollection As CaliberRM.Collection Set gmaCollection = req.responsibilities Itration sur tous les objets GroupMemberAssignment de la collection. Dim gma As GroupMemberAssignment For Each gma In gmaCollection Itration sur tous les membres affects... Dim assignedMember As User For Each assignedMember In gma.AssignedMembers ... et dsaffecte chacun deux. gma.removeAssignedMember assignedMember Next assignedMember Next gma Verrouillage de lexigence, dfinition de ses responsabilits et enregistrement. req.lock req.responsibilities = gmaCollection req.save ""

Historique
Le SDK CaliberRM permet un accs complet aux enregistrements historiques des exigences. La proprit History dun objet Requirement permet dobtenir un historique de lexigence. Le code suivant montre comment utiliser ces objets pour afficher lhistorique des rvisions :

Dim revision As HistoryRevision For Each revision In objReq.History.Revisions Debug.Print "Ver major : " & revision.Version.MajorVersion Debug.Print "Ver minor : " & revision.Version.MinorVersion Debug.Print "Date : " & Format(revision.OLEDate, "d-mmm") Debug.Print "Nom utilisateur : " & revision.UserName Debug.Print "Commentaire : " & revision.Comment Next revision

Nous pouvons maintenant dvelopper cet exemple pour inclure des informations concernant les modifications individuelles de ces rvisions. Le code suivant effectue une itration sur tous les objets HistoryChange dun HistoryRevision, imprime le nom du champ dexigence ayant chang, le type de modification, lancienne valeur et la nouvelle valeur :

C h ap it r e 2 : Ut il is a t io n d e V is u a l B a s i c po u r c ri r e de s a p pl ic a t i on s S D K

17

Dim objChange As HistoryChange For Each objChange In revision.Changes Debug.Print "Nom de champ : " & objChange.FieldName Debug.Print "Type: " & ChangeTypeToString(objChange.changeType) Debug.Print "Ancienne valeur : " & VariantToString(objChange.OldValue) Debug.Print "Nouvelle valeur : " & VariantToString(objChange.NewValue) Next objChange

Les proprits OldValue et NewValue dun objet Change reprsentent la valeur dun champ dexigence avant et aprs une modification. Pour utiliser ces objets, vous devez les rpartir par type. Considrez quun objet de valeur de modification appartient un des trois types suivants :
I

String (Chane) : reprsente les modifications apportes des champs texte non UDA tels quun nom ou une description dexigence. Attribute (Attribut) : reprsente les modifications apportes tous les attributs systme et dfinis par lutilisateur. User: reprsente les modifications apportes au champ propritaire de lexigence.

La procdure suivante (appele deux fois dans lexemple prcdent) rpartit ces objets OldValue et NewValue en String, Attribute et User.

Convertit en chane le variant spcifi. Private Function VariantToString(ByVal vntValue As Object) As String Exclusion des modifications "null" (inexistante). If IsNull(vntValue) Then VariantToString = "[NULL]" Si cest dj une chane, la renvoyer seulement. ElseIf VarType(vntValue) = vbString Then VariantToString = vntValue Else "Rduction" de la valeur variante en un objet. Dim objValue As Object objValue = vntValue Si lobjet est un CaliberObject, renvoyer son attribut nom... If TypeOf objValue Is CaliberObject Then VariantToString = objValue.Name Impression des modifications apportes aux attributs systme et dfinis par lutilisateur. ElseIf TypeOf objValue Is AttributeValue Then VariantToString = UDAValueToString(objValue) Else VariantToString = "" End If End If End Function

18 G u i de d u pr o g r am m eu r S D K C a li be r R M

Remarquez que le code commence par vrifier que la valeur variante transmise cette procdure nest pas null. Gnralement, une modification null se produit quand un UDA a t ajout un type dexigences ou en a t supprim. Notez aussi que le gestionnaire des objets AttributeValue appelle la fonction UDAValueToString :

ElseIf TypeOf objValue Is AttributeValue Then VariantToString = UDAValueToString(objValue)


Cette fonction de conversion (liste ci-aprs) illustre comment diffrents types dobjets AttributeValue peuvent tre grs de manire gnrique.

Convertit une AttributeValue (galement appele valeur UDA) en chane. Function UDAValueToString(ByVal objValue As AttributeValue) As String Dabord, gre tous les objets AttributeValue dont lattribut "Value" se convertit facilement en une chane... If TypeOf objValue Is UDABooleanValue _ Or TypeOf objValue Is UDAFloatValue _ Or TypeOf objValue Is UDAIntegerValue _ Or TypeOf objValue Is UDATextValue Then UDAValueToString = objValue.Value ElseIf TypeOf objValue Is UDADateValue Then UDAValueToString = Format(objValue.OLEDate, "d-mmm") ElseIf TypeOf objValue Is UDADurationValue Then UDAValueToString = objValue.Value _ & objValue.Attribute.GranularityText ElseIf TypeOf objValue Is UDAListValue Then UDAValueToString = "Entres de liste slectionnes : For Each objListEntry In objValue.ListEntries If objListEntry.Selected = True Then UDAValueToString = UDAValueToString & _ VariantToString(objListEntry.Object) & _ , End If Next objListEntry End If End Function

Discussions
Avec la fonctionnalit de discussion de groupe de CaliberRM, les quipes de projets peuvent changer des informations concernant les exigences et les projets. De mme, avec le SDK CaliberRM, les programmeurs peuvent consulter les discussions relatives aux exigences et aux projets. La procdure suivante prend un CaliberObject et affiche des informations concernant ses messages de discussion. Pour cela, elle utilise la proprit Discussion du CaliberObject spcifi.

C h ap it r e 2 : Ut il is a t io n d e V is u a l B a s i c po u r c ri r e de s a p pl ic a t i on s S D K

19

Remarquez que cette procdure sarrte si le CaliberObject nest pas un Requirement ou un Project, puisque seuls les exigences et les projets peuvent avoir des discussions.

Private Sub PrintDiscussion(objCaliberObj As CaliberObject) Seuls les objets Project et Requirement peuvent avoir des discussions. If Not TypeOf objCaliberObj Is Project _ And Not TypeOf objCaliberObj Is Requirement Then Exit Sub End If Dim objDiscussion As Discussion Set objDiscussion = objCaliberObj.Discussion Dim objMessage As DiscussionMessage For Each objMessage In objDiscussion.Messages intTab = objMessage.Depth * 5 Debug.Print Tab(intTab); "Sujet : " & objMessage.Subject Debug.Print Tab(intTab); "Est lu : " & objMessage.Read Debug.Print Tab(intTabDepth); "Date : & _ Format(objMessage.OLEDate, "d-mmm") Next objMessage End Sub
Avec le SDK CaliberRM, vous pouvez envoyer des messages de discussion au moyen de la mthode postMessage de lobjet Discussion. De mme, vous pouvez rpondre des messages de discussion en utilisant la mthode postReply de DiscussionMessage. Lexemple suivant illustre lutilisation de ces deux mthodes.

Accs une discussion dexigence. Set objDiscussion = req.Discussion Envoi dun message la discussion. Set objMessage = objDiscussion.postMessage("Mon sujet", "Mon message") Envoi dune rponse au nouveau message. objMessage.postReply "Re: Mon sujet", "Ma rponse"

Arborescences dexigences
Gnralement, une baseline CaliberRM contient des ensembles dexigences relis par des relations hirarchiques. Une fois runies, ces exigences constituent une arborescence. Les objets RequirementTree et RequirementTreeNode fournissent des options prcieuses pour utiliser ces arborescences. Pour naviguer parmi les nuds dune arborescence dexigences :
1 Obtenez un objet RequirementTree partir dune baseline ; 2 Accdez la proprit Root du RequirementTree pour obtenir le

RequirementTreeNode racine ;
3 Appelez rcursivement la proprit Children du RequirementTreeNode.

20 G u i de d u pr o g r am m eu r S D K C a li be r R M

Le code ci-aprs suit ces tapes pour imprimer des informations individuelles sur tous les nuds dune arborescence dexigences.

... Obtention de larborescence dexigences de la baseline... Dim objRequirementTree As RequirementTree Set objRequirementTree = objBaseline.RequirementTree Navigation dans larborescence en commenant par le nud racine... TraverseTree objRequirementTree.Root End Sub Navigue dans la sous-arborescence dont la racine se trouve au premier niveau du nud spcifi et affiche des informations sur chaque nud. Private Sub TraverseTree(ByVal parent As RequirementTreeNode) Impression dinformations sur le nud parent... Debug.Print _ String(parent.Level, vbTab) _ & parent.HierarchyNumber _ & _ & parent.Name _ & _ & parent.SerialNumberTag Appel rcursif de cette fonction pour chaque enfant du parent... Dim child As RequirementTreeNode For Each child In parent.Children TraverseTree(child) Next child End Sub

Dans une arborescence dexigences, un RequirementTreeNode peut reprsenter un projet, un type dexigences ou un nud dexigence. Un objet RequirementTreeNode contient les donnes minimales ncessaires la reprsentation de lobjet CaliberRM qui lui est associ. Par exemple, si un nud est associ un objet Project, vous pouvez obtenir le nom du projet et son numro didentification via RequirementTreeNode ; mais vous ne pouvez pas obtenir directement la description du projet ni ses baselines.

C h ap it r e 2 : Ut il is a t io n d e V is u a l B a s i c po u r c ri r e de s a p pl ic a t i on s S D K

21

Pour obtenir lintgralit de lobjet associ un RequirementTreeNode, vous devez utiliser la proprit AssociatedObjectID du RequirementTreeNode. Par exemple :

Obtention de lID du CaliberObject reprsent par le nud. Dim id As CaliberObjectID Set id = objRequirementTreeNode.AssociatedObjectID Obtention du CaliberObject reprsent par le nud Dim co As CaliberObject Set co = objSession.get(id) Impression dun attribut spcifique au sous-type CaliberObject... If TypeOf co Is Project Then Impression de la description du projet Debug.Print co.Description ElseIf TypeOf co Is RequirementType Then Impression de la balise du type Debug.Print co.Tag ElseIf TypeOf co Is Requirement Then Impression de la description de lexigence Debug.Print co.Description.Text End If

Pour modifier une arborescence dexigences, vous pouvez utiliser les mthodes addChild et insertChild de RequirementTreeNode. Lexemple suivant utilise la mthode addChild pour ajouter un deuxime nud dexigence au premier nud dune arborescence dexigences.

... Obtention du nud du projet. Cest toujours le nud racine. Set objProjectNode = objRequirementTree.Root Obtention du premier nud de type dexigences sous le nud du projet. Set objTypeNode = objProjectNode.Children.Item(0) Obtention de la premire et de la seconde exigences sous le type dexigences. Set firstRequirementNode = objTypeNode.Children.Item(0) Set secondRequirementNode = objTypeNode.Children.Item(1) Ajout de la seconde exigence la premire. firstRequirementNode.addChild secondRequirementNode Enregistrement des modifications dans larborescence. objRequirementTree.save

Pour naviguer dans les arborescences dexigences, vous pouvez utiliser aussi la collection Requirements dune baseline conjointement la collection ChildRequirements de chaque exigence. Cependant, remarquez que cette mthode de navigation consomme plus de ressources que lutilisation de RequirementTree et RequirementTreeNode, puisque vous mettez une requte sur tous les objets exigence dans le serveur CaliberRM distance. Lexemple suivant utilise ces collections pour afficher les deux premiers niveaux dune arborescence dexigences.

22 G u i de d u pr o g r am m eu r S D K C a li be r R M

Dclaration de variables objet Project et Baseline. Dim firstProject As Project Dim curBaseline As Baseline Dfinition de la variable Project pour rfrencer le premier projet dans la collection de projets de la session. Set firstProject = objSession.Projects.Item(0) Dfinition de la variable Baseline pour rfrencer la baseline "actuelle" du premier projet. Set curBaseline = firstProject.CurrentBaseline Dclaration dune variable qui contiendra temporairement le premier niveau dexigences dans larborescence. Dim parentReq As Requirement Itration sur le premier niveau dexigences. For Each parentReq In curBaseline.Requirements Debug.Print parentReq.Name Dim childReq As Requirement Itration sur tous les enfants de lexigence parent actuelle. For Each childReq In parentReq.ChildRequirements log vbTab & childReq.Name Next childReq Next parentReq

Vous pouvez aussi passer de lenfant au parent en utilisant la proprit ParentRequirement dun objet Requirement. Par exemple, la procdure suivante imprime le chemin entre une exigence donne et lexigence racine de larborescence.

Private Sub PrintPathToRoot(ByVal objRequirement As Requirement) Do While Not objRequirement Is Nothing Debug.Print objRequirement.Name Set objRequirement = objRequirement.ParentRequirement Loop End Sub
Traditionnellement, les applications CaliberRM affichaient toutes les exigences du niveau suprieur regroupes et tries par type ; en consquence, la proprit Requirements dun objet Baseline renvoie toujours les exigences tries et regroupes de cette faon. Remarque : Les proprits Project, Baseline et Requirement Type permettent respectivement de dterminer le projet, la baseline et le type dune exigence.

Traabilit
Dans CaliberRM, une relation de traabilit peut exister entre deux exigences ou entre une exigence et un objet externe au systme CaliberRM. De faon similaire, le SDK CaliberRM permet de crer, supprimer et modifier des traces entre exigences CaliberRM et artefacts logiciels qui ne sont pas des exigences.

C h ap it r e 2 : Ut il is a t io n d e V is u a l B a s i c po u r c ri r e de s a p pl ic a t i on s S D K

23

Les objets relatifs aux traces contiennent, en particulier, les objets suivants :
I

Trace : reprsente une relation de traabilit entre deux objets CaliberRM. Il peut sagir dexigences ou dobjets rsidant lextrieur de CaliberRM. TraceManager : fournit la fonctionnalit ncessaire pour crer, modifier et supprimer des traces. XGenericObjectManager : fournit la fonctionnalit ncessaire pour crer des traces entre des exigences et des artefacts logiciels qui ne sont pas des exigences. VendorAddIn : reprsente une rfrence un objet qui rside dans le domaine dune autre application. Les vendeurs de logiciels dont les applications implmentent le module de traabilit complmentaire de CaliberRM fournissent ces objets.

Obtention des traces


Le SDK CaliberRM permet lextraction des traces de nombreux niveaux du modle dobjets CaliberRM. Par exemple, lobjet Session dispose dune proprit Traces qui renvoie toutes les traces entre tous les objets CaliberRM dont vous disposez. De plus, la proprit Traces dun objet Project renvoie toutes les traces destination ou provenant des exigences quil contient. Finalement, lobjet Requirement fournit deux proprits pour obtenir des traces : TracesFrom et TracesTo. Lexemple suivant utilise ces proprits TracesTo et TracesFrom pour imprimer les noms des objets effectuant une trace vers ou depuis une exigence.

Private Sub PrintTraces(objRequirement As Requirement) Dim objTrace As CaliberRM.Trace Debug.Print "Trace depuis objets " & objRequirement.Name For Each objTrace In objRequirement.TracesFrom La trace suivante est tablie vers notre exigence DEPUIS un autre objet. Debug.Print objTrace.FromObject.Name _ & vbTab _ & objTrace.Suspect Next objTrace Debug.Print "Trace vers objets " & objRequirement.Name For Each objTrace In objRequirement.TracesTo La trace suivante est tablie depuis notre exigence VERS un autre objet. Debug.Print objTrace.ToObject.Name _ & vbTab _ & objTrace.Suspect Next objTrace End Sub

24 G u i de d u pr o g r am m eu r S D K C a li be r R M

Cration de traces entre exigences


Lobjet TraceManager permet de crer et de modifier des relations de traabilit. Pour crer une trace, la premire tape consiste obtenir une rfrence de cet objet.

Dim objTraceManager As TraceManager Set objTraceManager = objSession.TraceManager


Aprs avoir obtenu un TraceManager, vous pouvez lutiliser pour crer des traces. Lexemple suivant cre une relation de traabilit entre deux exigences.

Dim req1 As Requirement Set req1 = objSession.getRequirement(1) Dim req2 As Requirement Set req2 = objSession.getRequirement(2) objTraceManager.createTrace3 req1, req2, False

Cration de traces vers des artefacts logiciels qui ne sont pas des exigences
Lexemple prcdent montrait comment crer une relation de traabilit entre deux objets (deux exigences) situs dans CaliberRM. Lexemple suivant utilise lobjet XGenericObjectManager pour crer une trace entre une exigence et un objet qui rside en dehors de CaliberRM.

... Dim req1 As Requirement Set req1 = objSession.getRequirement(1) Dim objIntegrationMgr As IntegrationManager Set objIntegrationMgr = objSession.IntegrationManager Cration dune trace depuis req1 vers lobjet ABCObject fourni par ABCCorp. objIntegrationMgr. createTrace2 _ req1, _ True, _ "ABCCorp", _ "ABCObjectID" ...

Le XGenericObjectManager fournit aussi une fonction permettant de crer des traces entre deux objets VendorAddIn externes.

objIntegrationMgr. createTrace1 _ "ABCCorp", _ "ABCObjectID", _ "XYZCorp", _ "XYZObjectID"

C h ap it r e 2 : Ut il is a t io n d e V is u a l B a s i c po u r c ri r e de s a p pl ic a t i on s S D K

25

Suppression de traces
Pour supprimer une trace, utilisez la mthode deleteTrace de lobjet TraceManager. Par exemple, la procdure suivante supprime toutes les traces tablies depuis une exigence donne :

Private Sub DeleteTraces(objRequirement As Requirement) Dim objTraceManager As TraceManager Set objTraceManager = objSession.TraceManager Dim objTrace As Trace For Each objTrace In objRequirement.TracesFrom objTraceManager.deleteTrace objTrace Next objTrace End Sub
Voir lAnnexe A : Modles dobjets CaliberRM qui contient des illustrations permettant de localiser lobjet avec lequel vous voulez travailler et de comprendre comment cet objet sinsre dans le modle dobjets global de CaliberRM.

26 G u i de d u pr o g r am m eu r S D K C a li be r R M

Chapitre

3
Chapitre 3

Utilisation de Java pour crire des applications SDK

Introduction
Ce chapitre constitue une introduction au SDK CaliberRM pour les dveloppeurs Java. Voici son contenu :
I I I I

utilisation du SDK pour se connecter un serveur CaliberRM ; description des conventions utilises par le SDK ; utilisation des arborescences, des attributs et de lhistorique des exigences ; utilisation du SDK pour afficher et crer des relations de traabilit.

Cration dun CaliberServer


Toutes les applications qui utilisent le SDK CaliberRM doivent commencer par crer une connexion un serveur CaliberRM. Pour cela, il faut crer une nouvelle instance de la classe CaliberServer. Une classe CaliberServer sert tablir et maintenir une connexion avec un serveur CaliberRM pour le compte dun utilisateur CaliberRM.

Ch a pi t r e 3 : U t i li s at i o n d e J a v a po u r c ri r e de s a p pl ic a t i on s S D K

27

Le code suivant est une application Java simple qui tablit la connexion un serveur CaliberRM :

import com.starbase.caliber.*; import com.starbase.caliber.server.*; public class ConnectionCreator { public static void main(String[] args) { CaliberServer server = new CaliberServer("foo"); try { Session session = server.login("admin", "admin"); } catch(RemoteServerException rse) { rse.printStackTrace(); } } }

Ce code illustre les tapes de base que toute application CaliberRM doit suivre :
I I I

importation des packages CaliberRM ncessaires, cration dun serveur CaliberRM, connexion au serveur CaliberRM.

La premire ligne importe le package CaliberRM principal :

import com.starbase.caliber.*;

Il contient la classe Session. Pour de plus amples informations sur la classe Session, voir Utilisation de sessions, page 29. La deuxime ligne importe le package du serveur CaliberRM :

import com.starbase.caliber.server.*;

Il contient toutes les classes concernes par les connexions au serveur, les transactions et les exceptions. La classe CaliberServer fait partie de ce package. Le code suivant cre une instance de CaliberServer utilise pour communiquer avec le serveur CaliberRM situ sur lhte foo :

CaliberServer server = new CaliberServer("foo");

Enfin, la connexion au CaliberServer cre un objet Session :

try { Session session = server.login("jdoe", "1234ABC"); } catch(RemoteServerException rse) { rse.printStackTrace(); }

28 G u i de d u pr o g r am m eu r S D K C a li be r R M

Dans lexemple ci-dessus, si un client narrive pas se connecter un serveur CaliberRM distance, la mthode login dclenche une exception RemoteServerException. Gnralement, une connexion choue si la mthode login reoit un ID utilisateur ou un mot de passe erron. Pour de plus amples informations sur RemoteServerException, voir Conventions du SDK Java CaliberRM, ci-aprs. Remarque : Chaque fois que vous lancez le SDK Java, celui-ci lance une machine virtuelle (VM) Java. Par dfaut, la plupart des VM utilisent au maximum 64 Mo de mmoire. Cette limite peut tre redfinie laide de lindicateur de mmoire maximale de la VM (Xmx). Pour les applications SDK Java, cet indicateur peut tre dfini sur la ligne de commande, par exemple :

java -Xmx1000M com.company.SDKApp


Ce code doit tre appel avant tout autre appel au SDK car, une fois la VM charge, ces options ne peuvent plus tre dfinies.

Utilisation de sessions
Une Session reprsente la vue utilisateur dun serveur CaliberRM et fournit ainsi un point dentre dans le modle dobjets CaliberRM. Le code suivant utilise la session cre dans lexemple prcdent pour afficher les noms de tous les projets CaliberRM auxquels lutilisateur a accs.

try { Project[] arrayOfProjects = session.getProjects(); for(int i = 0; i < arrayOfProjects.length; i++) { System.out.println(arrayOfProjects[i].getName()); } } catch(RemoteServerException) { rse.printStackTrace(); }

Conventions du SDK Java CaliberRM


Les deux exemples prcdents illustrent diverses conventions du SDK CaliberRM. En premier lieu, chaque fois quune mthode SDK dpend dun serveur CaliberRM pour effectuer une opration, elle est dclare comme dclenchant une RemoteServerException. Gnralement, une RemoteServerException enveloppe une exception dclenche par le serveur distance. Vous pouvez obtenir un message dtaill dcrivant lexception enveloppe en appelant sa mthode getMessage. Ensuite, toutes les mthodes qui renvoient plusieurs objets le font dans des tableaux. Enfin, le SDK CaliberRM respecte les normes de noms tablies par les API Java intgres.

Ch a pi t r e 3 : U t i li s at i o n d e J a v a po u r c ri r e de s a p pl ic a t i on s S D K

29

Le tableau suivant illustre ces rgles. Groupe


Mthodes Getter/Setter Mthodes boolennes Interfaces dcouteur dvnement Recensement dcouteur dvnement Mthodes de gestionnaire dvnement Classes dvnement

Rgles
getXxxxsetXxxx isXxxx XxxxListener addXxxxListener onXxxx XxxxEvent

Exemples
getName() setName() isEstablished() isKeyReference() ServerConnectionListener ServerTransactionListener addServerConnectionListener addServerTransactionListener onConnectionEstablished onServerTransaction ServerTransactionEvent ServerConnectionEvent

Cration dobjets CaliberRM


Avec le SDK CaliberRM, vous pouvez crer, modifier et supprimer les objets suivants :
I I I I I I I I I I I

Projets Baselines Utilisateurs Groupes Dpartements Exigences Types dexigences Profils de scurit Glossaires Termes de glossaire Intgrations

Le code exemple suivant montre la faon habituelle de crer des objets CaliberRM :

User newUser = new User("Un nouvel utilisateur", session); newUser.save();

Modification dobjets CaliberRM


Pour modifier un objet CaliberRM, suivez ces tapes :
1 2 3 4

Obtenez une instance dun objet CaliberRM. Appelez la mthode Lock de lobjet. Dfinissez une ou plusieurs proprits de lobjet. Appelez la mthode Save de lobjet.

30 G u i de d u pr o g r am m eu r S D K C a li be r R M

Lexemple ci-aprs suit ces tapes pour modifier un objet Group :

Group group = session.getGroups()[2]; group.lock(); group.setDescription("Une nouvelle description"); group.setEmailAddress("new@emailaddress.com"); group.save();

Suppression dobjets CaliberRM


Vous pouvez supprimer un objet CaliberRM en appelant sa mthode Remove. Par exemple :

Requirement requirement = session.getRequirement(77); requirement.remove();

Remarquez que la mthode remove supprime une exigence uniquement partir de la baseline actuelle. Lexigence nest pas supprime des baselines prcdentes.

Exigences
Cette section dcrit lutilisation de base des objets Requirement (exigence).

Arborescences dexigences
Gnralement, une baseline CaliberRM contient des ensembles dexigences relis par des relations hirarchiques. Une fois runies, ces exigences constituent une arborescence. Les classes RequirementTree et RequirementTreeNode fournissent des options prcieuses pour utiliser ces arborescences. Pour naviguer parmi les nuds dune exigence :
I I

obtenez un objet RequirementTree partir dune baseline ; appelez la mthode getRoot du RequirementTree pour obtenir le RequirementTreeNode racine ; appelez rcursivement la mthode getChildren du RequirementTreeNode.

Ch a pi t r e 3 : U t i li s at i o n d e J a v a po u r c ri r e de s a p pl ic a t i on s S D K

31

Le code ci-aprs suit ces tapes pour imprimer des informations individuelles sur tous les nuds dune arborescence dexigences.

... // Obtention de larborescence de la baseline actuelle. RequirementTree tree = currentBaseline.getRequirementTree(); // Obtention du nud racine de larborescence. RequirementTreeNode root = tree.getRoot(); TraverseTree(root); } public void TraverseTree(RequirementTreeNode parentNode) { // Impression dinformations concernant le nud actuel. PrintTreeNode(parentNode); // Itration sur la collection denfants du parent. RequirementTreeNode[] children = parentNode.getChildren(); for ( int i = 0; i < children.length; i++ ) { TraverseTree(children[i]); } } private void PrintTreeNode(RequirementTreeNode node) { StringBuffer sb = new StringBuffer(); for(int i = 0; i < node.getLevel(); i++) { sb.append(" "); } sb.append(node.getHierarchyNumber()); sb.append(" "); sb.append(node.getName()); sb.append(" "); sb.append(node.getSerialNumberTag()); System.out.println(sb); }

Ce code donne un rsultat qui ressemble ceci :

X100 Droid 2016412 Business Requirements BR2016416 1 Operating Environment BR1 1.1 Temperature BR2 1.2 Humidity BR3 1.3 Radiation BR4 2 Continuous operation BR5 2.1 Recharge Time BR73 3 Startup time BR6

32 G u i de d u pr o g r am m eu r S D K C a li be r R M

Pour naviguer dans une arborescence dexigences, vous pouvez utiliser aussi les mthodes getDepthFirstEnumeration et getBreadthFirstEnumeration de RequirementTreeNode. Pour illustrer ce point, le code suivant reprsente une partie du code ci-dessus de faon utiliser la mthode getDepthFirstEnumeration :

// Obtention de larborescence de la baseline actuelle. RequirementTree tree = currentBaseline.getRequirementTree(); // Obtention du nud racine de larborescence. RequirementTreeNode root = tree.getRoot(); // Obtention dune numration de tous les nuds issus de la // racine. Enumeration nodes = root.getDepthFirstEnumeration(); // Itration sur tous les nuds... while(nodes.hasMoreElements()) { RequirementTreeNode node = (RequirementTreeNode)nodes.nextElement(); PrintTreeNode(node); }

Dans une arborescence dexigences, un RequirementTreeNode peut reprsenter un projet, un type dexigences ou une exigence. Pour obtenir lID du CaliberObject associ un RequirementTreeNode, vous pouvez utiliser sa mthode getAssociatedObjectID. Par exemple :

// Obtention de lID du CaliberObject associ au nud. CaliberObjectID coid = node.getAssociatedObjectID(); // Obtention du CaliberObject en utilisant le CaliberObjectID. CaliberObject co = session.get(coid); if(co instanceof Project) { // Impression dinformations spcifiques au projet. Project p = (Project)co; System.out.println(p.getDescription()); } else if(co instanceof RequirementType) { // Impression dinformations spcifiques au type. RequirementType rt = (RequirementType)co; System.out.println(rt.getTag()); } else { // Impression dinformations spcifiques lexigence. Requirement r = (Requirement)co; System.out.println(r.getStatus().getSelectedValue()); }

Ch a pi t r e 3 : U t i li s at i o n d e J a v a po u r c ri r e de s a p pl ic a t i on s S D K

33

Pour modifier une arborescence dexigences, vous pouvez utiliser les mthodes addChild et insertChild de RequirementTreeNode. Lexemple suivant utilise la mthode addChild pour ajouter un deuxime nud dexigence au premier nud dune arborescence dexigences.

RequirementTree tree = currentBaseline.getRequirementTree(); // Obtention du nud du projet. Cest toujours le nud racine. RequirementTreeNode projectNode = tree.getRoot(); // Obtention du premier nud de type dexigences sous le nud du projet. RequirementTreeNode typeNode = projectNode.getChildAt(0); // Obtention des 1re et 2me exigences sous le type dexigences. RequirementTreeNode requirementNode1 = typeNode.getChildAt(0); RequirementTreeNode requirementNode2 = typeNode.getChildAt(1); // Modification de larborescence par ajout dun deuxime nud au premier. requirementNode1.addChild(requirementNode2); // Validation des modifications. tree.save();

Pour naviguer dans les arborescences dexigences, vous pouvez utiliser aussi la mthode getRequirements de Baseline conjointement avec la mthode getChildRequirements de Requirement. Cependant, remarquez que cette mthode de navigation consomme plus de ressources que lutilisation de RequirementTree et RequirementTreeNode, puisque vous mettez une requte sur tous les objets exigence dans le serveur CaliberRM distance. Lexemple suivant utilise ces mthodes pour afficher les deux premiers niveaux dune arborescence dexigences.

try { // Obtention de la baseline par dfaut/en cours. Baseline defaultBaseline = project.getDefaultBaseline(); // Obtention du premier niveau dexigences dans larborescence // dexigences // de la baseline. Requirement[] topLvlReqs = defaultBaseline.getRequirements(); // Itration sur le premier niveau dexigences. for(int i; i < topLvlReqs.length; i++) { Requirement req = topLvlReqs [i]; System.out.println(req.getName()); // Obtention de l"enfant" de lexigence en cours. Requirement[] childReqs = req.getChildRequirements(); // Itration sur les enfants. for(int j; j < childReqs.length; j++) { Requirement childReq = childReqs[j]; System.out.println("\t" + childReq.getName()); } } }

34 G u i de d u pr o g r am m eu r S D K C a li be r R M

Vous pouvez aussi passer dun enfant son exigence parent en appelant sa mthode getParentRequirement. Par exemple, le code suivant imprime le chemin entre une exigence et lexigence racine de larborescence.

try { // Obtention de la dernire version de lexigence ayant lID // numro 10. Requirement req = session.getRequirement( 10 ); while(req != null) { System.out.println(req.getName()); req = req.getParent(); } } catch(RemoteServerException) { rse.printStackTrace(); }

Traditionnellement, les applications CaliberRM affichent toutes les exigences du niveau suprieur de larborescence regroupes et tries par type dexigences. De ce fait, la mthode getRequirements dun objet Baseline renvoie toujours les exigences regroupes et tries de cette faon. Remarque : Les mthodes getProject, getBaseline et getRequirementType permettent respectivement de dterminer le projet, la baseline et le type dune exigence.

Cration dexigences
Le SDK CaliberRM fournit deux constructeurs des objets Requirement (exigence). Le premier constructeur vous permet de crer des exigences au niveau suprieur de larborescences des exigences dun projet, le second sert crer les enfants dune exigence existante. Lexemple suivant illustre lutilisation du premier constructeur pour crer une nouvelle exigence.

// Obtention du premier projet de la session. Project project = session.getProjects()[0]; // Obtention de la baseline en cours pour le projet. Baseline currentBaseline = project.getCurrentBaseline(); // Obtention du premier type dexigences de la baseline. RequirementType type = currentBaseline.getRequirementTypes()[0]; // Construction de la nouvelle exigence. Requirement newRequirement = new Requirement( "Nouvelle exigence", project, type, 0, session); // Enregistrement de la nouvelle exigence. newRequirement.save();

Ch a pi t r e 3 : U t i li s at i o n d e J a v a po u r c ri r e de s a p pl ic a t i on s S D K

35

Lexemple suivant montre comment le second constructeur sert crer lexigence enfant dune exigence existante. La nouvelle exigence sera appele Exigence enfant et sera le quatrime enfant dans la hirarchie des enfants du parent.

// Obtention dune exigence qui deviendra le parent de la nouvelle // exigence. Requirement parentReq = session.getRequirement(125); // Construction de la nouvelle exigence utilisant // lexigence parent. Requirement newRequirement = new Requirement( "Exigence enfant", parentReq, 3, session); // Enregistrement de la nouvelle exigence. newRequirement.save();

Attributs dexigences
CaliberRM permet de dfinir des exigences en utilisant un nombre quelconque dattributs dfinis par lutilisateur (UDA). En outre, les exigences contiennent toujours les attributs systme Etat et Priorit. Dans le SDK CaliberRM, un objet Requirement fournit la mthode getAttributeValues pour obtenir les valeurs de ses UDA et les mthodes getStatus et getPriority pour obtenir les valeurs de ses attributs systme. Par exemple, le code suivant imprime la valeur slectionne dun tat dexigence, qui est une instance de la sous-classe AttributeValue de UDAListValue :

UDAListValue status = requirement.getStatus(); Object selectedValue = status.getSelectedValue(); System.out.print("Valeur slectionne : " + selectedValue);
Avec la mthode getAttributeType( ), vous pouvez galement obtenir la valeur par dfaut dun attribut. Par exemple :

// Obtention du type dattribut correspondant. UDAList attributeType = status.getAttributeType(); // Obtention de la valeur par dfaut pour le type dattribut. UDAListValue defaultValue = attributeType.getDefaultValue(); // Obtention de la valeur slectionne partir de lUDAListValue par dfaut. Object selectedDefaultValue = defaultValue.getSelectedValue(); System.out.print("Valeur par dfaut : " + selectedDefaultValue);

Noubliez pas que chaque sous-classe AttributeValue est associe une sous-classe Attribute unique. En consquence, la mthode getAttributeType de UDABooleanValue renvoie une instance de UDABoolean et la mthode getAttributeValue de UDATextValue renvoie une instance de UDAText.

36 G u i de d u pr o g r am m eu r S D K C a li be r R M

Le tableau ci-aprs illustre les relations entre les classes AttributeValue et Attribute du SDK et les types dattributs de CaliberRM. Sous-classes AttributeValue
UDATextValue UDAIntegerValue UDADurationValue UDAFloatValue UDADateValue UDABooleanValue UDAListValue

Sous-classes Attribute
UDAText UDAInteger UDADuration UDAFloat UDADate UDABoolean UDAList

Types dattributs de lapplication


Ligne de texte isole Texte multiligne Entier long Dure Flottant Date Boolen Liste choix multiple Liste choix unique Liste de slection de plusieurs groupes Liste de slection de groupe isol Liste de slection de plusieurs utilisateurs Liste de slection dutilisateur isol

Historique des exigences


Le SDK CaliberRM permet un accs complet aux enregistrements historiques des exigences. Pour obtenir lhistorique dune exigence, vous pouvez appeler la mthode getHistory sur nimporte quelle instance dexigence. Le schma de classes suivant illustre les relations entre les classes Requirement, History, HistoryRevision et HistoryChange.

Ch a pi t r e 3 : U t i li s at i o n d e J a v a po u r c ri r e de s a p pl ic a t i on s S D K

37

Lexemple ci-aprs montre comment utiliser ces classes pour afficher des informations historiques :

// Obtention de lhistorique dun objet Requirement. History history = req.getHistory(); // Obtention des rvisions qui constituent lhistorique. HistoryRevision[] revisions = history.getRevisions(); for(int i = 0; i < revisions.length; i++) { Revision revision = revisions[i]; System.out.println("Rvision : " + revision.getVersion()); System.out.println("Date : " + revision.getDate()); System.out.println("Utilisateur : " + revision.getUserName()); System.out.println("Commentaire : " + revision.getComment()); // Obtention des modifications qui constituent la rvision. HistoryChange[] changes = revision.getChanges(); For(int j = 0; j < changes.length; j++) { Change change = changes[j]; System.out.println( "\tField: + change.getFieldName()); System.out.println( "\tOld Value: + change.getOldValue()); System.out.println( "\tNew Value: + change.getNewValue()); } }

Traabilit
Dans CaliberRM, une relation de traabilit peut exister entre deux exigences ou entre une exigence et un objet externe CaliberRM. De mme, le SDK CaliberRM permet de crer, supprimer et modifier des traces entre exigences CaliberRM et artefacts logiciels qui ne sont pas des exigences. Les objets relatifs aux traces contiennent, en particulier, les classes suivantes :
I

Trace : reprsente une relation de traabilit entre une exigence et un autre objet CaliberRM quelconque. Cet objet CaliberRM peut tre une exigence ou un objet externe CaliberRM. TraceManager : fournit la fonctionnalit ncessaire pour crer, modifier et supprimer des traces. ExternalObject : une classe de base abstraite qui reprsente tous les objets externes CaliberRM. File : reprsente un objet du systme de fichiers. SCMFile : reprsente un objet gr par un outil de gestion de configuration du code source. File et SCMFile se trouvent toutes les deux dans le fichier com.starbase.caliber.external. XGenericObjectManager : fournit la fonctionnalit ncessaire pour crer des traces entre des exigences et des artefacts logiciels qui ne sont pas des exigences. VendorAddIn : reprsente une rfrence un objet qui rside dans le domaine dune autre application.

I I

38 G u i de d u pr o g r am m eu r S D K C a li be r R M

Obtention des traces


Les traces peuvent tre extraites de nombreux niveaux de la hirarchie dobjets CaliberRM. La mthode getTraces de la classe Session renvoie toutes les traces disponibles pour la session. De faon semblable, la mthode getTraces de la classe Project renvoie toutes les traces tablies vers ou depuis les exigences dun projet. La classe Requirement fournit deux mthodes dobtention des traces : getTracesFrom et getTracesTo. Lexemple ci-aprs utilise ces mthodes pour imprimer les noms des objets effectuant une trace vers ou depuis une exigence.

try { // La ligne suivante obtient la dernire version // dune exigence ayant lID numro 1. Requirement requirement = session.getRequirement(1); Trace[] tracesTo = requirement.getTracesTo(); for(int i = 0; i < tracesTo.length; i++) { // La trace suivante est tablie DEPUIS notre exigence // vers un autre objet. Trace trace = tracesTo[i]; CaliberObject obj = trace.getToObject(); System.out.println(obj.getName()); } Trace[] tracesFrom = requirement.getTracesFrom(); for(int i = 0; i < tracesFrom.length; i++) { // La trace suivante est tablie VERS notre exigence // depuis un autre objet. Trace trace = tracesFrom[i]; CaliberObject obj = trace.getFromObject(); System.out.println(obj.getName()); } } catch(RemoteServerException) { rse.printStackTrace(); }

Cration de traces entre exigences


La classe TraceManager permet de crer et de modifier des relations de traabilit. Pour obtenir une instance de TraceManager, appelez la mthode getManager de Session. Lexemple suivant montre comment obtenir une instance de TraceManager :

TraceManager traceMgr; traceMgr = (TraceManager)session.getManager(Trace.class);

Ch a pi t r e 3 : U t i li s at i o n d e J a v a po u r c ri r e de s a p pl ic a t i on s S D K

39

Aprs avoir obtenu un TraceManager, vous pouvez lutiliser pour crer des traces. Lexemple suivant cre une trace entre deux exigences.

Requirement req1 = session.getRequirement(1); Requirement req2 = session.getRequirement(2); // La ligne suivante cre une trace depuis req1 vers req2. TraceMgr.createTrace(req1, req2, false);

Cration de traces vers des artefacts logiciels qui ne sont pas des exigences
Lexemple prcdent a cr une relation de traabilit entre deux objets (des exigences) situs lintrieur des frontires de CaliberRM. Lexemple suivant montre comment crer une trace vers un objet situ lextrieur de CaliberRM.

Class clazz = File.class; XGenericObjectManager extGenObjMgr = (XGenericObjectManager)session.getManager(clazz); Requirement req1 = session.getRequirement(1); // La ligne suivante cre un objet File dans le systme // Caliber ainsi quune trace depuis req1 vers le nouvel objet File. File f = extGenObjMgr.createFileTrace( Req1, true, "foo.txt", "C:\\temp\\");
Pour crer une rfrence un objet externe, il faut dabord obtenir une rfrence au gestionnaire dobjet appropri. Comme nous lavons dj dit, vous pouvez appeler la mthode getManager dun objet Session pour obtenir une instance de CaliberObjectManager. Dans lexemple ci-dessus, nous obtenons une instance de com.starbase.caliber.xgeneric.XGenericObjectManager (qui gre la plupart des objets externes CaliberRM).

Class clazz = File.class; FileManager fileMgr = (FileManager)session.getManager(clazz);

Remarquez que le premier paramtre de la mthode createFileTrace est une rfrence une exigence.

File f = fileMgr.createFileTrace( Req1, ...


En effet, une rfrence un objet externe ne peut exister lintrieur de CaliberRM que tant que cet objet participe une relation de traabilit avec une exigence. Une fois la trace dtruite, la rfrence est supprime. Les objets Mercury TestDirector et Select Enterprise, qui peuvent tre ajouts et supprims de CaliberRM sans tre lis une exigence, constituent les seules exceptions cette rgle.

40 G u i de d u pr o g r am m eu r S D K C a li be r R M

Chapitre

4
Cration dun complment de traabilit pour CaliberRM
Chapitre 4

Introduction
Le dveloppement et la distribution dun complment de traabilit est le moyen le plus simple de proposer vos utilisateurs une solution CaliberRM personnalise. Un complment fournit un ensemble dobjets CaliberRM. Ces objets sont affichs dans linterface utilisateur de CaliberRM, ce qui permet aux dveloppeurs de crer des relations de traabilit avec des exigences. Par exemple, un complment peut afficher des tches de Microsoft Project, ou bien des objets dun outil de conception ou dun outil de test. Ce document montre comment utiliser un exemple de projet Microsoft Visual Basic.NET pour crer un complment de traabilit destin CaliberRM. Les fichiers de lexemple sont fournis dans Program Files\Borland\CaliberRM\Samples\Addins\.

Utilisation de lexemple Visual Basic.NET


Linstallation de CaliberRM contient un ensemble de fichiers exemple qui peuvent tre utiliss pour crer un complment de traabilit dans Visual Basic.NET. Remarque : Vous devez changer tous les GUID dans les fichiers du complment de traabilit et dans Assembly.Info.vb. Par dfaut, le projet exemple est situ dans Program Files\Borland\CaliberRM\ Samples\Addins\HelloWorld2 VB.NET. Vous y trouverez les fichiers suivants :
I I I I I I

AssemblyInfo.vb HelloWorld2_VBNet.sln HelloWorld2_VBNet.vbproj HelloWorld2_VBNet.vbproj.user Icon1.ico Icon2.ico

Ch a p it r e 4 : C r at io n d u n c o m p l m e n t d e t r a ab il it p o u r Ca l ib er R M

41

I I I I I I

Icon3.ico Icon4.ico Icon5.ico VendorObject.vb VendorSession.vb VendorView.vb

Pour crer un nouveau complment de traabilit, excutez les tapes suivantes :


1 Crez un nouveau projet Visual Basic en utilisant le modle Class Library. 2 Copiez les fichiers VendorSession.vb, VendorView.vb et VendorObject.vb dans le

rpertoire de votre nouveau projet VB. Ajoutez ensuite les fichiers au projet, en utilisant Ajouter un lment existant.
3 Changez les valeurs de tous les GUID COM dans les fichiers que vous venez

dajouter en utilisant loutil CreateGUID (menu : Outils->CreateGUID) de VS.NET.


4 Construisez ensuite votre nouveau projet. VS.NET enregistrera la DLL que vous

venez de construire la fin. Vous pouvez enregistrer la DLL sur dautres ordinateurs en utilisant regasm (Outil Assembly Registration .NET) sur une ligne de commande.
5 Votre complment de traabilit est maintenant prt lemploi. Vous pouvez

dsormais implmenter les proprits et les mthodes qui sont ncessaires dans linterface.

Interface du complment de traabilit


Pour crer un complment, il faut renseigner les proprits et les fonctions de trois classes : VendorSession, VendorView et VendorObject. La suite de cette section dcrit en dtail ces classes et leurs procdures.

VendorSession
La classe VendorSession fournit un contexte dans lequel des clients CaliberRM peuvent interagir avec votre complment. Par la suite, VendorSession est la seule classe qui doit pouvoir tre cre publiquement.

Public ReadOnly Property SupportsViewBuilding() As Boolean


Si votre complment permet aux utilisateurs de construire des vues de faon dynamique, cette proprit doit tre dfinie par true. Par exemple, si vous construisez une intgration avec une base de donnes, vous pouvez souhaiter prsenter plusieurs vues des donnes bases sur des requtes. A linverse, si vous crez un complment qui ne prend en charge que les vues par dfaut, cette proprit doit tre dfinie par false. Voir GetVendorViews, page 43, pour de plus amples informations.

Public WriteOnly Property ConfigFilePath() As String


La proprit ConfigFilePath est dfinie par CaliberRM pour indiquer le chemin daccs un fichier de configuration utilis par votre complment. Ce fichier de configuration est spcifi quand vous enregistrez un complment dans CaliberRM Administrator. Voir Enregistrement et activation de votre complment de traabilit, page 45, pour de plus amples informations sur lactivation dun nouveau complment de traabilit.

42 G u i de d u pr o g r am m eu r S D K C a li be r R M

Une fois ce fichier de configuration dfini, il est gr par CaliberRM et transmis lintgration ( laide de la proprit ConfigFilePath) immdiatement aprs linitialisation de la classe VendorSession.

Public Property SilentMode() As Boolean


Cette proprit est dfinie par CaliberRM pour signaler quun complment doit sexcuter en silence. Dans cet tat, votre complment NE DOIT afficher aucune bote de dialogue ncessitant une intervention de lutilisateur. Quand CaliberRM reoit cette proprit, cela indique que le complment fonctionne en silence. Remarque : Le mode silencieux permet de planifier les rapports Datamart pour quils soient gnrs aux heures creuses. Lorsque votre serveur CaliberRM contient des projets dans lesquels vous tablissez des traces vers votre complment de traabilit, Datamart recherche les informations didentification pour excuter ces tches et, si le complment sexcute en mode silencieux, aucune bote de dialogue ne saffiche. Il est recommand de stocker les informations d authentification dans un fichier ou dans le registre de votre complment afin de rassembler ces informations sans avoir besoin dafficher une bote de dialogue de connexion.

Public ReadOnly Property InterfaceVersion() As Integer


Cette proprit fournit la version de linterface du complment de traabilit implmente. Actuellement, CaliberRM prend en charge la version 2.0 de cette interface, donc la valeur de cette proprit devrait toujours tre 2.

Public Function GetVendorViews(ByVal BuildView As Boolean) As Collection


Cette fonction fournit CaliberRM une collection dobjets VendorView. Chaque vue est affiche sous forme donglet dans la fentre Modification de traabilit de CaliberRM.

A linitialisation de la fentre Modification de traabilit, CaliberRM appelle la mthode GetVendorViews du complment en attribuant la valeur false au paramtre BuildView, ce qui indique que CaliberRM demande la ou les vues initiales (par dfaut). Si le complment prend en charge la construction de vues dynamiques (voir Public ReadOnly Property SupportsViewBuilding() As Boolean, page 42), le bouton Construire la vue est activ. Quand un utilisateur clique sur le bouton Construire la vue, CaliberRM appelle GetVendorViews en attribuant la valeur true au paramtre BuildView. Le complment peut afficher une bote de dialogue qui demande lutilisateur de spcifier les paramtres de la vue. Les vues renvoyes seront ajoutes aux onglets de vues existants.

Ch a p it r e 4 : C r at io n d u n c o m p l m e n t d e t r a ab il it p o u r Ca l ib er R M

43

Public Function GetVendorObject(ID As String) As VendorObject


La fonction GetVendorObject est appele par CaliberRM pour obtenir un VendorObject unique.

VendorView
Comme cela a dj t mentionn, un complment de traabilit fournit un ensemble dobjets VendorView au moyen de la mthode GetVendorViews de VendorSession. A son tour, chaque VendorView fournit un ensemble de VendorObjects affichs dans longlet des vues de la fentre Modification de traabilit de CaliberRM.

Public ReadOnly Property ViewName() As String


Cette proprit donne le nom de la vue.

Public ReadOnly Property IsList() As Boolean


CaliberRM peut afficher une collection dobjets complmentaires sous forme darborescence ou de liste. Si cette proprit a la valeur true, CaliberRM affiche les objets de la vue sous forme de liste. Sinon, CaliberRM les affiche sous forme darborescence.

Public ReadOnly Property VendorObjects() As Collection


Cette proprit fournit les objets qui constituent la vue. Si la vue reprsente une arborescence dobjets (cest--dire IsList = false), cette collection dobjets doit reprsenter le premier niveau des nuds de larborescence.

VendorObject
La classe VendorObject reprsente un objet unique expos par votre complment. CaliberRM obtient ces objets en tant que membres dun VendorView ou au moyen de la mthode GetVendorObject de VendorSession.

Public ReadOnly Property ID() As String


La proprit ID fournit lidentificateur unique dun objet dans CaliberRM. Par la suite, CaliberRM utilise cet ID quand il appelle la mthode GetVendorObject de VendorSession.

Public ReadOnly Property ObjectName() As String


La proprit ObjectName fournit le nom du VendorObject.

Public ReadOnly Property ShortObjectName() As String


Cette instruction fournit CaliberRM le nom abrg de lobjet. Sil contient plus de 16 caractres, CaliberRM tronque ce nom.

Public ReadOnly Property Icon() As Long


Cette proprit fournit une icne pour lobjet.

Public ReadOnly Property Traceable() As Boolean


La proprit Traceable prcise si CaliberRM autorise ou nom les utilisateurs crer une trace vers un VendorObject.

44 G u i de d u pr o g r am m eu r S D K C a li be r R M

Public ReadOnly Property HasChildren() As Boolean


Cette proprit dtermine si le VendorObject a des enfants ou non. CaliberRM ne consulte cette proprit que si le VendorObject est fourni sous forme darborescence dobjets (voir la proprit IsList de VendorView). Si elle a la valeur true, CaliberRM affiche un symbole ct de lobjet dans larborescence.

Public ReadOnly Property Children() As Collection


Cette proprit rend les enfants dun VendorObject disponibles CaliberRM. CaliberRM appelle cette mthode si la proprit HasChildren a la valeur true et si lutilisateur a dvelopp le VendorObject dans une arborescence.

Public ReadOnly Property Operations() As Variant


La proprit Operations permet chaque VendorObject dexposer une ou plusieurs oprations aux utilisateurs CaliberRM. Elle renvoie un tableau de chanes dont chacune reprsente une opration pouvant tre effectue sur lobjet. Par exemple, si le VendorObject reprsente un fichier, vous pouvez exposer les oprations Open et Properties.

Public Sub DoOperation(Operation As String)


Quand un utilisateur clique avec le bouton droit sur un VendorObject, CaliberRM interroge la proprit Operations et affiche un menu contextuel contenant les chanes renvoyes. Par la suite, quand il choisit un lment dans le menu des oprations, CaliberRM appelle la mthode DoOperation du VendorObject et lui transmet le nom de lopration slectionne.

Public Sub OnTraceCreated(RequirementID As Integer)


Cette mthode est appele par CaliberRM la cration dune trace entre une exigence CaliberRM et le VendorObject.

Public Sub OnTraceDeleted(RequirementID As Integer)


Cette mthode est appele par CaliberRM la suppression dune trace entre une exigence CaliberRM et le VendorObject.

Public Sub OnStatusChange(RequirementID As Integer, MadeSuspect As Boolean)


Cette mthode est appele par CaliberRM quand ltat suspect dune trace entre une exigence CaliberRM et le VendorObject change.

Enregistrement et activation de votre complment de traabilit


Une fois que vous avez crit et compil votre complment, vous devez lenregistrer et lactiver pour un projet spcifique sur un serveur CaliberRM et le dployer sur chaque ordinateur client CaliberRM. Pour enregistrer et activer votre complment, excutez les tapes suivantes :
1 Sur un ordinateur serveur CaliberRM, ouvrez CaliberRM Administrator et

slectionnez un projet dans le volet gauche.


2 Slectionnez longlet External Traceability dans le volet droit. 3 Cliquez sur le bouton New. La bote de dialogue New Integration saffiche.

Ch a p it r e 4 : C r at io n d u n c o m p l m e n t d e t r a ab il it p o u r Ca l ib er R M

45

4 Tapez un nom de complment (cest le nom qui figurera dans longlet Modification

de traabilit), un nom de bibliothque (dans Visual Basic, ce nom figure dans le champ Nom de projet de la bote de dialogue Proprits), et choisissez une icne. Vous pouvez spcifier aussi lemplacement dun fichier de configuration utilis par votre complment. CaliberRM distribue automatiquement ce fichier tous les clients qui utilisent lintgration (pour de plus amples informations, consultez la proprit ConfigFilePath de VendorSession, page 43).
5 Cliquez sur OK pour crer la nouvelle intgration. La nouvelle intgration est

ajoute la liste des intgrations Disabled de tous les projets CaliberRM.


6 Pour activer lintgration, slectionnez-la dans la bote liste Disabled et cliquez sur

le bouton Vers la gauche.


7 Cliquez sur File> Save Changes. Votre complment est enregistr et activ sur le

serveur CaliberRM.
8 Dployez votre complment sur chacun des ordinateurs client CaliberRM si les

utilisateurs ont besoin dtablir des traces des exigences vers les objets de votre complment. Vous pouvez utiliser un programme dinstallation, ou distribuer et enregistrer manuellement les fichiers ncessaires, ou utiliser le script de connexion.

46 G u i de d u pr o g r am m eu r S D K C a li be r R M

Annexe

A
Annexe A

Modle dobjets CaliberRM

Ces schmas permettent de localiser lobjet avec lequel vous voulez travailler et de comprendre comment il sinsre dans le modle dobjets global de CaliberRM. Le tableau suivant explique sous quelle forme les objets et les collections sont reprsents dans les schmas.

Indique un objet.

Indique une collection dobjets.

Indique quune vue complte de la hirarchie dobjets se trouve ailleurs dans les schmas.

A n n ex e A : M o d l e d ob j et s Ca l ib er R M

47

Modle dobjets CaliberRM

48 G u i de d u pr o g r am m eu r S D K C a li be r R M

A n n ex e A : M o d l e d ob j et s Ca l ib er R M

49

50 G u i de d u pr o g r am m eu r S D K C a li be r R M