Working version v32.1.X v32.0.X v29.1.X
Working version v32.1.X v32.0.X v29.1.X Dutch

JIRA Service Desk

Inleiding

Jira Service Management (JSM), ook gekend als Jira Service Desk (JSD), is een ticket management systeem voor het opvolgen van requests of incidenten. Deze connector legt de link met een self-hosted JSD-instantie (bijvoorbeeld van een Vlaamse overheidsdienst).

Use case

Via de JSD-connector kan je vanuit een dossier een ticket aanmaken in een Jira Service Management omgeving.

Setup

Onboarding

De aansluitingsgegevens (access-token, consumer-key, secret, private-key) worden niet zelf gegenereerd, maar manueel aangemaakt door de beheerder van de Jira Service Desk-omgeving bij de Vlaamse overheid, via een OAuth 1.0a-applicatielink (Application Link). Neem hiervoor contact op met de betrokken beheerder om deze waarden te bekomen.

Maven dependency in pom.xml

Voeg onderstaande maven dependency toe in je pom.xml. Dit zorgt ervoor dat de connector code binnengehaald en meegenomen wordt in de build van je applicatie.

<dependency>
   <groupId>com.skryv.connectors</groupId>
   <artifactId>jsd</artifactId>
   <version>${skryv.version}</version>
</dependency>

Applicatie eigenschappen

JSD-specifieke applicatie eigenschappen die je moet toevoegen.

Eigenschap

Default

Uitleg

JsdProperties

skryv.connectors.jsd.service-desk-id

-

Enkel nodig als je de verkorte createTicket-variant gebruikt (zonder serviceDeskId/requestTypeId als parameter).

skryv.connectors.jsd.request-type-id

-

Idem, enkel nodig bij de verkorte createTicket-variant.

JsdBusinessConnector

skryv.connectors.jsd.access-token

token

Access-token, manueel gegenereerd bij het opzetten van de Application Link

skryv.connectors.jsd.secret

secret

Secret, geretourneerd bij het opzetten van de Application Link.

skryv.connectors.jsd.consumer-key

key

Consumer-key, manueel gegenereerd bij het opzetten van de Application Link.

skryv.connectors.jsd.base-url

url

Base URL van de JSD omgeving waarmee je wil connecteren.

skryv.connectors.jsd.private-key

private

PKCS8-private key (zonder de -----BEGIN/END PRIVATE KEY------headerregels), gebruikt om de OAuth-aanvragen te signeren.

Externe documentatie

Bekijk de Jira Server/Data Center REST API-referentiepagina’s voor meer technische info.

Services en functies

Overzicht

Functie

Retourtype

Info

createCustomer

String

Maakt een klant aan in Jira Service Desk op basis van e-mailadres en naam. Retourneert de aangemaakte klantnaam (username).

createTicket

String

Maakt een ticket (customer request) aan in Jira Service Desk. Retourneert de issue-key van het aangemaakte ticket. Bestaat in drie varianten (zie onder).

Deze functies zijn, naast de workflow expressie, ook rechtstreeks aanroepbaar vanuit Java-code door JsdCamundaConnector (bean jsd) te injecteren in je klasse:

Java
@RequiredArgsConstructor
public class MyOwnService {
    private final JsdCamundaConnector jsd;
}

createCustomer

Hiermee kan je een klant aanmaken in Jira Service Desk.

Workflow expression

${jsd.createCustomer(String email, String fullName)}

Java-code

String customerName = jsd.createCustomer(email, fullName);

Input

Inputparameters

Data type

Voorbeeld

Uitleg

email

String

‘jan.janssens@example.com'

E-mailadres van de klant. Wordt door Jira Service Desk gebruikt als username.

fullName

String

‘Jan Janssens’

Volledige naam van de klant.

Output

Retourneert de aangemaakte klantnaam (String) als bevestiging. Dit is niet louter een bevestiging zonder inhoud: de teruggegeven waarde kan je verder gebruiken in het proces (bv. opslaan in het dossier).

Error

Deze connector zet fouten niet om naar een BpmnError. Elke fout (inclusief een klant die al bestaat) resulteert in een onafgevangen RuntimeException, en dus in een Camunda-incident dat manuele tussenkomst vereist. Je kan hier dus geen error boundary event op voorzien.

Voorbeeld van het foutbericht wanneer de klant al bestaat:

JSON
{
  "errorMessage": "This request is invalid. Check that the request contains all the required parameters and that the parameters are valid. (username : A user with that username already exists.)",
  "i18nErrorMessage": {
    "i18nKey": "sd.rest.error.bad.request.with.extra.info",
    "parameters": ["username : A user with that username already exists."]
  }
}

Dit bericht komt terecht in de Camunda-incidentmelding, niet in een gestructureerd, opvangbaar foutobject.

createTicket

Hiermee kan je een ticket aanmaken in Jira Service Desk. Deze functie bestaat in drie varianten, afhankelijk van welke gegevens je wil meegeven.

Workflow expression 1

Met expliciete serviceDeskId/requestTypeId, met collection-velden.

${jsd.createTicket(String serviceDeskId, String requestTypeId, TreeMap<String, String> requestFieldValues, TreeMap<String, String> requestComplexFieldValues, TreeMap<String, ArrayList<String>> requestCollectionValues, String raiseOnBehalfOf)}

Workflow expressie 2

Zonder expliciete serviceDeskId/requestTypeId. Deze worden uit de applicatie-eigenschappen gehaald.

${jsd.createTicket(TreeMap<String, String> requestFieldValues, TreeMap<String, String> requestComplexFieldValues, TreeMap<String, ArrayList<String>> requestCollectionValues, String raiseOnBehalfOf)}

Workflow expressie 3

Met expliciete serviceDeskId/requestTypeId, zonder collection-velden.

${jsd.createTicket(String serviceDeskId, String requestTypeId, TreeMap<String, String> requestFieldValues, TreeMap<String, String> requestComplexFieldValues, String raiseOnBehalfOf)}

Java-code

// Variant 1
String issueKey = jsd.createTicket(serviceDeskId, requestTypeId, requestFieldValues, requestComplexFieldValues, requestCollectionValues, raiseOnBehalfOf);

// Variant 2
String issueKey = jsd.createTicket(requestFieldValues, requestComplexFieldValues, requestCollectionValues, raiseOnBehalfOf);

// Variant 3
String issueKey = jsd.createTicket(serviceDeskId, requestTypeId, requestFieldValues, requestComplexFieldValues, raiseOnBehalfOf);

Input

Inputparameters

Data type

Voorbeeld

Uitleg

serviceDeskId

String

(variant 1 en 3)

'4'

Id van de service desk waarin het ticket wordt aangemaakt. Bij variant 2 wordt dit in plaats daarvan uit de applicatie-eigenschap skryv.connectors.jsd.service-desk-id gehaald.

requestTypeId

String

(variant 1 en 3)

‘53’

Id van het aanvraagtype (request type). Bij variant 2: uit skryv.connectors.jsd.request-type-id.

requestFieldValues

TreeMap<String, String>

{"summary": "Beschrijving vraag", "description": "Vraag", "customfield_10301": "Dossiernummer"}

Eenvoudige tekstvelden, inclusief de standaardvelden summary en description, en tekst-custom fields. Waarden worden als gewone string doorgestuurd.

requestComplexFieldValues

TreeMap<String, String>

{"customfield_10310": "Eigenaar-bewoner", "customfield_10400": "residentieel"}

Select-/radio-custom fields. Verplicht in alle drie varianten, geef een lege TreeMap op als je geen dergelijke velden hebt (anders volgt een NullPointerException). Elke waarde wordt intern omgezet naar {"value": "..."}.

requestCollectionValues

TreeMap<String, ArrayList<String>> (enkel variant 1 en 2)

{"customfield_10450": ["optieA", "optieB"]}

Multi-select/checkbox-custom fields. Optioneel. Bij variant 3 bestaat deze parameter niet en wordt intern null doorgegeven (zonder probleem, deze wordt overgeslagen). Elke waarde wordt intern omgezet naar een lijst van {"value": "..."}-objecten.

raiseOnBehalfOf

String

'jan.janssens@example.com'

Gebruikersnaam/e-mailadres van de klant namens wie het ticket wordt aangemaakt.

Output

Retourneert de issue-key van het aangemaakte ticket (bv. "HELPDESK-123") als String. Ook hier geen ‘lege’ output, de issue-key kan je verder gebruiken in het proces (bv. opslaan in het dossier, gebruiken voor latere opvolging).

Error-handling

Zoals bij createCustomer: geen BpmnError-conversie. Elke fout (ontbrekend verplicht veld, ongeldig veld-id, verkeerd aanvraagtype, ...) resulteert in een onafgevangen RuntimeException en dus een Camunda-incident.

Let op de verplichte, niet-nullable requestComplexFieldValues-parameter in alle drie varianten: dit is een veelvoorkomende bron van een technisch incident (NullPointerException) als je enkel eenvoudige tekstvelden wil invullen. Geef in dat geval altijd een lege TreeMap mee in plaats van null.