Se connecter à MantisBT par SOAP

MantisBT est une interface Web codée en PHP qui sert à la gestion de bogues. Cet outil à code source ouvert est principalement utilisé pour faire le suivi de défaillance logicielle et la gestion de projet. MantisBT met à notre disposition un service Web qui utilise le WSDL (Web Services Description Language) pour accéder à son API à l’aide du protocole SOAP. Le WSDL est un langage basé sur le XML qui définit comment utiliser les fonctionnalités offertes par le service Web. Il est utilisé en combinaison avec SOAP pour l’échange d’information avec le serveur.

La première étape est de créer un nouveau projet FireMonkey HD. Ensuite il va falloir utiliser l’importateur WSDL qui se trouve dans le menu Component.
Import WSDL
Cet expert vous aidera à importer le document WSDL décrivant le service Web de MantisBT. Le seul champ à remplir est celui qui se nomme Location of WSDL File or URL. Vous devez y ajouter l’URL de MantisBT suivi de /api/soap/mantisconnect.php?wsdl. Dans ma capture d’écran plus haut, j’utilise l’URL du site web démo de MantisBT (http://www.mantisbt.org/demo/api/soap/mantisconnect.php?wsdl). Pour toutes les autres options de la fenêtre Import WSDL il est possible de garder les valeurs par défaut. Il suffit donc de cliquer sur Next jusqu’à la fin. Les fichiers mantisconnect.cpp et mantisconnect.h seront ajoutés au projet.

Dans la fenêtre principale de l’application, ajoutez un contrôle TEdit. Celui-ci servira à afficher la version de MantiBT avec laquelle nous communiquons. Il faudra aussi ajouter un contrôle TMemo, nous allons y insérer quelques informations acquises sur le serveur.

Dans votre fichier cpp voici le fichier d’en-tête à ajouter:

#include "mantisconnect.h"

Voici le code à ajouter dans votre constructeur:

    _di_MantisConnectPortType Mantis = NS_mantisconnect::GetMantisConnectPortType();
    Edit1->Text = Mantis->mc_version(); // Nous donnes la version de MantisBT

La méthode mc_version est la seule qui peut être appelée sans avoir besoin de donner un nom d’utilisateur et un mot de passe. Donc, pour ne pas avoir à écrire ces informations pour tous les appels à l’API je vous conseille d’ajouter ces macros:

#define USER "username" // Nom d'utilisateur sur MantisBT
#define PASS "password" // Mot de passe sur MantiBT

Dans le constructeur ajoutez le code suivant à la suite du code déjà existant:

    // On va checher les informations des états
    NS_mantisconnect::ObjectRefArray Status = Mantis->mc_enum_status(USER, PASS);
    for(int i = 0; i < Status.Length; ++i)
    {
        Memo1->Lines->Add(String(Status[i]->id) + ": " + Status[i]->name);
    }
    Memo1->Lines->Add("");
    // On va chercher les informations des résolutions
    ObjectRefArray Resolutions = Mantis->mc_enum_resolutions(USER, PASS);
    for(int i = 0; i < Resolutions.Length; ++i)
    {
        Memo1->Lines->Add(String(Resolutions[i]->id) + ": " + Resolutions[i]->name);
    }

Des informations similaires à celles-ci devraient apparaitre dans le TMemo à l’exécution du programme:

10: new
20: feedback
30: acknowledged
40: confirmed
50: assigned
80: resolved
90: closed

10: open
20: fixed
30: reopened
40: unable to reproduce
50: not fixable
60: duplicate
70: no change required
80: suspended
90: won't fix

Ces informations sont importantes, par exemple si vous désirez changer l’état et la résolution du bogue 27, alors voici le code qui sera nécessaire:

    NS_mantisconnect::IssueData* Issue;
    Issue = Mantis->mc_issue_get(USER, PASS, 27); // Prends les informations du bogue
    Issue->status->id = 80; // L'état est mis à resolved
    Issue->resolution->id = 20; // La résolution est mise à fixed
    IssueNoteDataArray Notes; // Tableau de notes
    Issue->notes = Notes; // Corrige un bogue dans MantisBT avec mc_issue_update
    Mantis->mc_issue_update(USER, PASS, 27, Issue); // Mise à jour des valeurs

Avant de terminer, voilà un dernier bout de code qui sert à ajouter une note à un bogue.

    NS_mantisconnect::IssueNoteData* Note = new NS_mantisconnect::IssueNoteData();
    Note->text = "Ajout d'une note pour le bogue 27"; // Texte de la note
    Mantis->mc_issue_note_add(USER, PASS, 27, Note); // Ajoute la note au bogue 27
    delete Note;

J’espère que cette cet article vous aidera à créer de jolis logiciels pour manipuler MantisBT.