Veröffentlicht: von & gespeichert unter Hobbies, Projekte.

Nachdem ich mich nun fast eine Woche mit dem Zugriff auf den Mantis Bugtracker via SOAP herumgeschlagen habe, habe ich endlich eine Lösung.

Nachdem die Webservice-URL im Visual Studio 2010 als sog. “Dienstverweis” eingerichtet wurde, konnte ein erster Zugriff auf die Methoden geschehen.
Dazu musste die Klasse MantisConnect instanziert werden um die Methode mc_issue_update() verwenden zu können.
Eine erste Anfrage an den Webservice erzeugte den Fehler

An element “faultstring” has namespace “”.

Dieser Fehler deutet darauf hin, dass die NuSOAP-Schnittstelle, welche MantisBT verwendet, nicht konform mit der aktuellen Version der WCF ist. In diesem Fall muss auf die erweiterten Optionen des Visual Studio zugegriffen werden um in den .NET-Framework 2.0 Kompatibilitätsmodus zu schalten. Ist dies erledigt, so kann die Webservice-Schnittstelle problemlos verwendet werden.
Ein entsprechendes Ticket zum Fehler wurde im Bugtracker der MantisBT-Webseite bereits hinterlegt.

Als Argumente für die mc_issue_update()-Methode sind zum einen ein Nutzername, ein Passwort und eine ID des zu aktualisierenden Bugs als String zu übergeben – zum anderen muss eine Instanz der Klasse IssueData übergeben werden.
Diese beinhaltet mindestens folgende Felder:

  • description
  • summary
  • category
  • ID und Name des Projektes

Nachdem ich diese Felder übergeben hatte, erschien folgende Fehlermeldung:

System.NullReferenceException wurde nicht behandelt.
Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Hier hat mich Visual Studio darauf hingewiesen, ich solle doch bitte ObjectRef() für das Projekt instanzieren (Quelltext Zeile 8).

public void UpdateData(List<String> data)
{
    IssueData newIssue = new IssueData();
    newIssue.description = data[0];
    newIssue.summary = data[1];
    newIssue.category = data[2];
            
    /* set project */
    newIssue.project = new MantisConnectReference.ObjectRef();
    newIssue.project.id = "1";
    newIssue.project.name = "MyProject";

    String bugId = data[3];

    try
    {
        MantisConnect myCon = new MantisConnectReference.MantisConnect();
        myCon.mc_issue_update("administrator", "_myPassword_, bugId, newIssue);
    }
    catch(Exception ex)
    {
        System.Console.Write("Error: " + ex);
    }
}

Der Quelltext beschreibt das Aktualisieren eines Bugs mit Hilfe der NuSOAP-Schnittstelle von MantisBT. Da sie sich ähnlich leicht wie die C#-Bibliothek “MantisConnect” verwenden, beherrscht jedoch im Gegensatz zu der, seit Juni 2005 nicht mehr weiterentwickelten, MantisConnect-DLL auch das aktualisieren von Bugs.

Auf eine ähnliche Art und Weise ermöglicht diese API auch das hinzufügen und löschen von Bugs – ebenso können Projekte angelegt und aktualisiert werden. Im Gegensatz zur völlig veralteten MantisConnect-DLL bietet die WebAPI umfangreiche Möglichkeiten, die Projekte mit Hilfe von .NET zu verwalten.

Weiterhin interessant ist die Möglichkeit, die sog. “Custom Fields” anzusprechen.

IssueData newIssue = new IssueData();

newIssue.custom_fields = new MantisConnectReference.CustomFieldValueForIssueData[1];
newIssue.custom_fields[0] = new MantisConnectReference.CustomFieldValueForIssueData();
newIssue.custom_fields[0].field = new MantisConnectReference.ObjectRef();
newIssue.custom_fields[0].field.id = "1";
newIssue.custom_fields[0].field.name = "CustomFieldname";
newIssue.custom_fields[0].value = "Text";

Zuerst muss – wie immer – die entsprechende Klasse instanziert werden. Zuvor muss in diesem Fall noch ein Array der Größe 1 erstellt werden, um die dazugehörigen Objekte darin anzulegen. Ist dies geschehen, können den CustomFieldValueForIssueData-Objekten ihre Eigenschaften zugewiesen werden. Dazu gehören unter anderem der Feldname sowie die ID des Benutzerdefinierten Feldes. Außerdem sollte der gewünschte Inhalt des Feldes hinterlegt werden.

Danach können die zugewiesenen Eigenschaften an das IssueData-Objekt angehängt und mit einem Update oder Add an die SOAP-Schnittstelle geschickt werden.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>