Mit XWiki-Formularen Tickets erzeugen
Wenn Sie die RESTful Webservices in todo4teams in Betrieb genommen haben, können Sie Tickets automatisiert erzeugen - z.B. indem Sie Daten strukturiert in einem XWiki-Formular erfassen und an todo4teams senden.
Voraussetzung ist, dass Sie die REST-Schnittstelle Ihrer todo4teams-Instanz erfolgreich in Betrieb genommen und ggf. Test-Tickets erzeugt haben.
Hier stellen wir Ihnen vor, wie Sie eine entsprechende Seite in XWiki erstellen.
Betten Sie in eine XWiki-Seite zwei Komponenten ein:
- Ein HTML-Formular, in dem der Benutzer die Daten eingeben kann.
- Ein Stück Groovy-Code, das diese Formulardaten in eine Ticketbeschreibung einsetzt und das Ticket über den REST-Service an todo4teams sendet.
Den gesamten Code der Seite sehen Sie unten. Benutzen Sie ihn als Vorlage und passen Sie die Service-URL (YOURTODOSERVER), Benutzername und -passwort des API-Benutzers (YOURAPIUSERNAME, YOURAPIPASSWORD) sowie die ID des Teams, an das das Ticket adressiert werden soll (siehe addressedGroupId), an!
Der Code zwischen {{html}} und {{/html} erzeugt das Formular, das in diesem Beispiel etwas so ausieht:
Beim Absenden wird das Formular als POST-Request an die angezeigt Seite selbst gesendet. Der Code zwischen {{groovy}} und {{/groovy} verarbeitet die Anfrage, nachdem geprüft wurde, ob tatsächlich Daten gesendet wurde (oder ob die Seite nur angezeigt wurde).
Die Methode groovy.json.JsonOutput.toJson(...) erzeugt komfortabel den JSON-Code der Anfrage zur Erzeugung des Tickets in todo4teams.
Hier erfolgt auch die erforderliche Authentifizierung (HTTP-Basic Auth).
Die Antwort des Servers wird durch den HTTP-Status (if (postRC.equals(200))...) geprüft, und im Erfolgsfall die ID des erzeugten Tickets zurückgegeben.
Die in Velocity kodierte Bedingung
{{velocity}}
#if(!$request.formid)
...
sorgt dafür, dass das Formular nach dem Absenden nicht erneut angezeigt wird.
{{groovy}}
if(request.getParameter("formid")){
def name = request.getParameter("name")
def company = request.getParameter("company")
def email = request.getParameter("email")
def phone = request.getParameter("phone")
def username="YOURAPIUSERNAME"
def password="YOURAPIPASSWORD"
def post = new URL("https://YOURTODSERVER/todo4teams/rest/tasks").openConnection();
def message = groovy.json.JsonOutput.toJson([addressedGroupId:17,description:"Anfrage:\n"+name+"\n"+company+"\n"+email+"\n"+phone,"minutes":180,"priority":2,"title":"Anfrage"])
String encoded = Base64.getEncoder().encodeToString((username+":"+password).getBytes("UTF-8")); //Java 8
post.setRequestProperty("Authorization", "Basic "+encoded);
post.setRequestMethod("POST")
post.setDoOutput(true)
post.setRequestProperty("Content-Type", "application/json")
post.getOutputStream().write(message.getBytes("UTF-8"));
def postRC = post.getResponseCode();
if (postRC.equals(200)) {
println("**Vielen Dank für Ihre Anfrage! Wie setzen uns kurzfristig mit Ihnen in Verbindung!**")
println("\n\nID Ihrer Anfrage:" + post.getInputStream().getText());
} else {
println("**Beim Speichern Ihrer Anfrage ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut!**");
}
}
{{/groovy}}
{{velocity}}
#if(!$request.formid)
{{html}}
<form method="POST" name="dform" onsubmit="if(document.forms['dform']['email'].value=='' && document.forms['dform']['phone'].value==''){ alert('Bitte geben Sie eine E-Mail-Adresse oder Rufnummer an!'); return false;} else { return true;}">
<input name="formid" value="5645425" type="hidden"/>
<table>
<tr>
<td>Name:</td><td><input name="name" type="text" size="50"/></td>
</tr>
<tr>
<td>Firma:</td><td><input name="company" type="text" size="50"/></td>
</tr>
<tr>
<td>E-Mail:</td><td><input name="email" type="text" size="50"/></td>
</tr>
<tr>
<td>Rufnummer:</td><td><input name="phone" type="text" size="50"/></td>
</tr>
<tr>
<td></td><td><input type="submit" value="Absenden" /></td>
</tr>
</table>
</form>
{{/html}}
#end
{{/velocity}}
Wenn Sie zusätzlich ein Formular befüllen möchten, ändern Sie die "Nutzlast" wie in diesem Beispiel. Hier wird das Formular mit der ID 213 mit Werten befüllt:
def company = request.getParameter("company")
def email = request.getParameter("email")
def phone = request.getParameter("phone")
def post = new URL("https://YOURTODOSERVER/todo4teams/rest/tasks").openConnection();
def message = groovy.json.JsonOutput.toJson(
[addressedGroupId:17,
description:"Demo-Anfrage:\n"+name+"\n"+company+"\n"+email+"\n"+phone,
minutes:180,
priority:2,
title:"Demo-Anfrage",
forms : [
[
id:213,
fields : [
Nachname: name,
Firma: company,
Telefon: phone,
"E-Mail": email
]
]
]
]
)