Services details
Camunda services
Case service
Onderstaande is een lijst van Camunda proces-gerichte functies die je kan gebruiken om procesinstanties, procesvariabelen, taken, activiteiten, messages, signals enzovoort te manipuleren.
Case execution stopzetten
${caseService.terminateCaseExecution(caseService.createCaseInstanceQuery().caseDefinitionKey('keyCase').superProcessInstanceId(execution.getProcessInstanceId()).singleResult().getId())}
Een lopende case
keyCase: key van de CMMN waarvan je een instantie wil stopzetten.
Execution service
Message sturen naar procesinstantie binnen een ander dossier
Een message aanmaken en versturen naar een andere procesinstantie behorend tot een ander dossier binnen de applicatie. Typische Skryv use case is bulk workflows.
${execution.getProcessEngineServices().getRuntimeService().createMessageCorrelation("jouwMessage").processInstanceVariableEquals("dossierId", selectedDossier).correlateWithResult()}
Vul een message key in. De method .processInstanceVariableEquals(value1,value2) laat toe om de andere procesinstantie te specifiëren. Zo stuur je de message enkel uit naar een procesinstantie waarvan de eigenschap value1 matcht met de waarde in value2. In de voorbeeldexpressie hierboven wordt verwezen naar de eigenschap “dossierId”. Je verstuurt de message dus enkel naar die procesinstantie met eigenschap (procesvariabele) dossierId die matcht met de waarde in de variabele selectedDossier. Concreet zal deze waarde een specifieke GUID zijn. De message opvangen gebeurt via een message receive task of via een message catch event in het ontvangende proces.
Het is ook mogelijk om variabelen mee te sturen via de message correlation. In onderstaand voorbeeld sturen we de variabele “mijnBoodschap” mee. Deze wordt ingevuld vanuit de lokale variabele “mijnVariabele”. De variabele “mijnBoodschap” kan je dan weer opvangen en gebruiken in het proces dat de message ontvangt.
${execution.getProcessEngineServices().getRuntimeService().createMessageCorrelation("mijnBericht").processInstanceVariableEquals("dossierId", selectedDossier).setVariable("mijnBoodschap", execution.getVariableLocal("mijnVariabele")).correlateWithResult()}
Proces business key (dossier id) ophalen
Haalt de business key van het proces op. Dit is hetzelfde als het dossier id. Klik hier voor meer info over het verband tussen dossier- en procesinformatie.
${execution.processBusinessKey}
Je kan deze bijvoorbeeld via een listener op het start event in een procesvariabele “dossierId” vatten. Use case binnen Skryv is het correct correleren van messages uitgestuurd vanuit een bulkworkflow.
${execution.setVariable("dossierId", execution.processBusinessKey)}
Procesvariabelen checken
Check of een specifieke procesvariabele aanwezig is binnen het proces.
${execution.hasVariable(mijnVariabele)}
Dit retourneert true indien de variabele aanwezig is, en false indien de variabele niet aanwezig is.
Procesvariabelen instellen
Hierbij kan je gebruik maken van twee systemen.
Gebruik een expressie zoals
${execution.setVariable(“mijnVariabele”,'Hello World!')}Gebruik een expressie als
${'Hello World!'}en definieer de naam van de procesvariabele in de taakeigenschapResultaatvariabele.
In de voorbeelden hieronder maken we gebruik van het eerste systeem.
Via directe input
Dit gebruik je bij een enkelvoudige datastructuur.
String
${execution.setVariable("mijnStringVariabele",'Hello World!')}
Getal
${execution.setVariable("mijnGetalVariabele",99)}
Datum ('yyyy-MM-dd')
${execution.setVariable("mijnDatumVariabele",‘2025-05-30’)}
Via input variabele of input parameter
Hierbij moet je eerst een taak inputparameter instellen. Dit gebruik je om de complexere datastructuren zoals lijsten en maps aan te maken.
Lijst
Bijvoorbeeld mijnLijst = ['paul','maria','jozef','antoon']
${execution.setVariable("mijnLijstVariabele",mijnLijst)}
Map
Bijvoorbeeld mijnMap = {"geslacht":"man","leeftijd":"60","naam":"paul"}
${execution.setVariable("mijnMapVariabele",mijnMap)}
Procesvariabelen ophalen
Een procesvariabele is direct beschikbaar via zijn key. Het kan gaan om een enkelvoudige waarde zoals een string, getal of datum, of een complexe waarde (ook wel collection genoemd) zoals een lijst, map of lijst-map.
Twee systemen mogelijk hier:
Directe referentie via
${mijnVariabele}Via de execution service
${execution.getVariable(mijnVariabele)}
Procesvariabelen verwijderen
Verwijdert een specifieke variabele uit het proces.
${execution.removeVariable(mijnVariabele)}
Signal uitsturen
Een signal aanmaken en versturen naar alle actieve procesinstanties binnen de applicatie.
Documentatie volgt.
Runtime service
Message uitsturen
Typisch zal je onderstaande expressies gebruiken binnen een message send task.
Message sturen naar procesinstantie binnen één en hetzelfde dossier
Een message aanmaken en versturen binnen de huidige procesinstantie of naar een op basis van business key gerelateerde procesinstantie (d.w.z. een andere procesinstantie, maar binnen één en hetzelfde dossier). De message opvangen gebeurt via een message receive task of via een message catch event.
${runtimeService.createMessageCorrelation('jouwMessage').processInstanceBusinessKey(execution.processBusinessKey).correlate()}
Vul daarbij een message key in. Tip: je kan deze expressie opstellen via de workflow expression builder.
Task service
Taakvariabele in stellen
Variabele instellen binnen de lokale scope van een taak. Typisch doe je dit via een listener of via een task listener. De logica of manier van werken is ongeveer gelijklopend met procesvariabelen instellen.
${task.setVariable("mijnLeeftijd",35)}
Cumul service
Cumul check - opzoeken
Klik hier voor meer info over de cumul check functionaliteit.
${genericCumulService.findByKeyWithoutSelf(dossierId, cumulType, cumulKey)}
De drie meegestuurde parameters:
dossierId: dit is het specifieke dossier waarvoor je de cumul check wil uitvoeren.cumulType: stemt doorgaans overeen met het dossiertype.cumulKey: string aan de hand waarvan je de uniciteit wil checken.
Als resultaat zal je een lijst met dubbele dossiers terugkrijgen (in de vorm van een Java lijst object) die je moet vatten onder een resultaatvariabele.
Onderstaande functie biedt dezelfde functionaliteit aan.
${genericCumulService.findByTypeAndKey(cumulType, cumulKey)}
De twee meegestuurde parameters:
cumulType: stemt doorgaans overeen met het dossiertype.cumulKey: string aan de hand waarvan je de uniciteit wil checken.
Cumul check - toevoegen
Klik hier voor meer info over de cumul check functionaliteit.
In deze service taak voegen we het dossier waarvoor de cumul check wordt uitgevoerd, toe aan de cumul database.
${genericCumulService.add(dossierId, cumulType, cumulKey)}
De drie meegestuurde parameters zijn opnieuw:
dossierId: dit is het specifieke dossier waarvoor je net de cumul check hebt uitgevoerd.cumulType: stemt doorgaans overeen met het dossiertype.cumulKey: string aan de hand waarvan je de uniciteit checkt.
Lokale besturen services
Attachment service
Bijlage aanmaken en toevoegen aan formuliercontext
${lbAttachmentService.createAttachmentAndSetContext(execution, 'yourContextFormKey', skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey( 'yourFormKey').getField("formattedLaatsteDatumIndiening").concat(' - ConsolidatieAdviezen.pdf'))}
Maakt een bijlage aan op basis van een communicatie template of een formulier ('yourFormKey') en plaatst deze in context van een bestaand formulier ('yourContextFormKey'). Merk op dat deze functie gebruik maakt van een Skryv dossierfunctie: formulier aanmaken.
Bijlage toevoegen aan formuliercontext
${lbAttachmentService.setContextAttachment(execution, 'yourContextFormKey', 'attachmentId')}
Plaatst een bijlage in de formuliercontext. Hiervoor heb je drie parameters nodig: execution (huidige procesinstantie), ‘yourContextFormKey’ (de key van het formulier waar je de bijlage in context wil plaatsen) en ‘attachmentId’ (de id van de bijlage, eventueel eerder opgehaald via de functie ‘bijlage id ophalen’).
Document service
Logindocument aanmaken
${lbDocumentService.createLogInDocument(execution)}
Geen specifieke parameters nodig. De expressie retourneert geen waarde.
Hiermee creëer je een login document.
Url service
Dossier url ophalen
${lbUrlService.getDossierUrl(execution.processBusinessKey)}
Geen specifieke parameters nodig. Hiermee haal je een url op die verwijst naar het dossier in de frontoffice.
Skryv platform services
Dossier service
Onderstaande is een lijst van Skryv-specifieke dossier-gerichte functies die je kan aanspreken binnen de workflow.
Anonimiseer dossier
${skryv.dossierFromScope(execution).anonymize(processDefinitionKeys)}
Voert de anonymisatie van het dossier uit. Als inputwaarde geef je een lijst van workflows waarvan je de procesvariabelen wilt wissen. Er wordt geen waarde geretourneerd.
Zie ook de service task template ‘anonimiseer dossier’ in Studio.
Bijlage id ophalen
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getField("fieldKey").attachmentId}
Haalt id van een bijlage of attachment op die opgeladen is binnen de scope van een specifiek formulier. Deze id kan je opslaan in een procesvariabele en vervolgens gebruiken in specifieke service taken op andere plaatsen in de workflow.
Bijlage toevoegen aan frontoffice downloadzone
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getAttachmentField("formField").addToDownloadZone(labelForDownloadZone, fileNameForDownload)}
Haalt een bijlage op die upgeload is binnen een formulier bijlageveld (formField is key van het veld, formKey is key van het formulier) en voert deze vervolgens toe aan de frontoffice download zone. Je kan de weergave naam van de bijlage in de frontoffice definiëren, alsook de naam van de bijlage na download uit de frontoffice.
Zie ook de service task template ‘voeg document toe aan frontoffice’ in Studio.
Bijlage verwijderen uit dossier (soft deletion)
${skryv.attachment(attachmentId).softDelete(notitie)}
Verwijdert een bijlage uit de backoffice, maar niet uit de applicatie.
attachmentId: unieke referentie naar de bijlage.notitie: notitie of uitleg waarom de bijlage verwijderd wordt.
Communicatie aanmaken
${skryv.dossierFromScope(execution).createCommunicationByTemplateName("templateName")}
Genereert een communicatie op basis van de gespecificeerde template.
Communicatie id ophalen
${skryv.dossierFromScope(execution).createCommunicationByTemplateName("templateName").getId()}
Genereert een communicatie op basis van de gespecificeerde template en retourneert de ID ervan. Deze ID kan je opslaan in een procesvariabele en vervolgens gebruiken in specifieke service taken op andere plaatsen in de workflow.
Communicatie toevoegen aan frontoffice download zone
Hier zijn een aantal mogelijkheden.
getLatestOrCreate
${skryv.dossierFromScope(execution).getLatestOrCreateCommunicationByTemplateName("communicationTemplate").addToDownloadZone(labelForDownloadZone, fileNameForDownload)}
Haalt laatst gegenereerde versie van de communicatie op of creëert deze indien nog onbestaand en voegt deze als link toe aan de frontoffice download zone. Wanneer de gebruiker klikt op de link, wordt een PDF gegenereerd en gedownload.
create
${skryv.dossierFromScope(execution).createCommunicationByTemplateName("communicationTemplate").addToDownloadZone(labelForDownloadZone, fileNameForDownload)}
Genereert een nieuwe versie van de communicatie, haalt deze op en voegt deze als link toe aan de frontoffice download zone. Wanneer de gebruiker klikt op de link, wordt een PDF gegenereerd en gedownload.
De drie meegestuurde parameters:
communicationTemplate: key van de communicatie template.labelForDownloadZone: weergave naam van de communicatie in de frontoffice.fileNameForDownload: naam van de PDF na donwload uit de frontoffice.
Je kan de weergave naam van de communicatie in de frontoffice definiëren, alsook de naam van de PDF na download uit de frontoffice.
Zie ook de service task template ‘voeg document toe aan frontoffice’ in Studio.
Optie: addAsPDF
Gebruik een alternatieve method om deze rechtstreeks als PDF toe te voegen aan de frontoffice download zone.
.addToDownloadZoneAsPdf(labelForDownloadZone, fileNameForDownload)
Je kan dit combineren zowel met getLatestOrCreate, als met create.
${skryv.dossierFromScope(execution).getLatestOrCreateCommunicationByTemplateName("communicationTemplate").addToDownloadZoneAsPdf(labelForDownloadZone, fileNameForDownload)}
${skryv.dossierFromScope(execution).createCommunicationByTemplateName("communicationTemplate").addToDownloadZoneAsPdf(labelForDownloadZone, fileNameForDownload)}
Opgelet: op heden nog niet ondersteund binnen de service task template ‘voeg document toe aan frontoffice’ in Studio.
Dossierlabel herberekenen (recalculateLabel)
${skryv.dossierFromScope(execution).recalculateLabel()}
Geen specifieke parameters nodig.
Deze functie herberekent het dossierlabel waarbij de uitkomst steeds de standaard formattering is. Dit wordt gebruikt bij opstart van het dossier vanuit de frontoffice met een aangepast labelformaat. Belangrijk: deze functie wordt achterliggend ook gebruikt binnen ‘Dossier indienen (submitDossier)’.
Links naar meer info: Dossiertype instellingen (ander labelformaat bij opstart vanuit frontoffice of bij opstart in draftmodus).
Dossierlabel ophalen (getLabel)
${skryv.dossierFromScope(execution).getLabel()}
Geen specifieke parameters nodig.
Deze functie retourneert het dossierlabel. Hou er rekening mee dat het mogelijk is om een dossier met een alternatief labelformaat op te starten (bijvoorbeeld in draft modus of met een aangepast label bij opstart vanuit de frontoffice).
Links naar meer info: Dossiertype instellingen (ander labelformaat bij opstart vanuit frontoffice of bij opstart in draftmodus).
Dossier indienen (submitDossier)
${skryv.dossierFromScope(execution).submitDossier()}
Geen specifieke parameters nodig. De expressie retourneert geen waarde.
In geval het dossier opgestart wordt als ‘concept’ (draft) dossier, is dit de functie die het dossier markeert als ‘ingediend’ (submitted). De functie wijzigt enerzijds de dossiereigenschap Concept en vervangt anderzijds het dossierlabel van concept-formattering naar de standaard formattering.
Links naar meer info:
Wat is een dossier? (onderscheid concept en ingediend)
Dossierinformatie (zie dossier eigenschappen concept en dossierlabel)
Dossiertype instellingen (om het dossier als concept op te starten, zie eigenschap
startAsDraft)Service taak template in Studio
Formulier aanmaken
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey")}
Genereert een formulier binnen de scope van een dossier op basis van de key van de formulierdefinitie.
Formulier inhoud opvragen
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getRawDocumentValue()}
Haalt binnen de scope van het dossier het formulier gegenereerd op basis van template formKey op en retourneert er de inhoud van als een map object.
Voorbeeld
Een formulier met drie velden: boodschap (tekst), aantal (getal), bedrag (bedrag).
{"boodschap":"bananen","aantal":5,"bedrag":1.99}
Formulier toevoegen aan frontoffice download zone
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").addToDownloadZone("labelForDownloadZone", "fileNameForDownload")}
Genereert formulier of haalt laatste versie van formulier op (vul key in van de formulierdefinitie) en voegt deze als PDF toe aan de frontoffice download zone. Je kan de weergave naam van de bijlage in de frontoffice definiëren, alsook de naam van de PDF na download uit de frontoffice.
Zie ook de service task template ‘voeg document toe aan frontoffice’ in Studio.
Formulierveld invullen (setField)
Hier maken we onderscheid tussen setField met directe input en setField met input variabele of input parameter.
setField met directe input
Dit gebruik je bij een enkelvoudige datastructuur.
String
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").setField("fieldKey",'Hello World')}
Getal
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").setField("fieldKey", 99)}
Datum ('yyyy-MM-dd')
Een formulier datumveld kan je zowel invullen met een datum waarde (bijvoorbeeld 2025-15-05T15:00:00) of een string waarde met specifieke formattering ‘yyyy-MM-dd’ (bijvoorbeeld ‘2025-15-05’).
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").setField("fieldKey", '2025-02-30')}
Keuzeveld
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").setField("yourChoice",'option1')}
Key van de keuze die je wil aanduiden meegeven als string value.
Meerkeuzeveld
setField ondersteunt het meerkeuze veldtype (multichoice) niet.
Lijst
setField ondersteunt het lijst veldtype niet.
setField met input variabele of input parameter
Complexe structuren (lijst, map, lijst-map) kan je niet mappen op een formulierveld.
Formulierveld waarde ophalen (getField)
Onderstaande expressies kan je geassisteerd bouwen via de workflow expression builder.
Tekst, getal, ja/nee
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getField("fieldKey")}
Als je een tekstveld, een getal of een ja/nee ophaalt komt die terecht in een variabele met enkelvoudige waarde van het type string, integer, float of boolean.
Datum
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getField("yourDate")}
Opgelet: het resultaat is een string waarde zoals ‘2025-15-05’. Zie datum tijd functies om deze string om te zetten naar een datum waarde waarmee je kan beginnen rekenen.
Keuze
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getField("yourChoice")}
Deze expressie retourneert de key van de aangeduide keuze. Deze zit gedefineerd in je procesvariabele als string.
Meerkeuze
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getField("yourMultiChoice")}
Deze expressie retourneert een Map zoals hieronder. Voor elke keuze (key) zie je via een boolean of deze aangevinkt is (true) of niet (false).
{“choice1”:true,”choice2”:false,”choice3”:true,”choice4”:false}
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getField("yourMultiChoice").keyChoice}
Deze expressie checkt of een specifieke keuze (key) aangevinkt is (true) of niet (false).
Lijst
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("formKey").getField("lijstKey")}
Als je een lijst ophaalt, komt die terecht in een Lijst-Map.
Snapshot van het dossier nemen
${skryv.dossierFromScope(execution).takeSnapshot("naamSnapshot")}
Binnen de scope van het dossier een snapshot nemen van alle formulieren. Via de parameter “naamSnapshot” kan je een specifieke naam geven aan de snapshot.
Voor meer info, zie de documentatie sectie omtrent snapshots in dossiers.
Zie ook service task template ‘Neem snapshot van het dossier’.
Snapshot van het formulier nemen
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey(formKey).takeSnapshot("naamSnapshot")}
Configuratie van het nemen van een formulier snapshot. Via de parameter “naamSnapshot” kan je een specifieke naam geven aan de snapshot.
Zie ook service task template ‘Neem snapshot van het formulier’.
Toegang tot dossier intrekken
${dossierAccess.revokeAccess(execution)}
Toegang tot dossier intrekken voor een specifieke gebruiker of organisatie.
Toegang tot dossier verlenen
${dossierAccess.giveAccess(execution)}
Toegang tot dossier verlenen voor een specfieke gebruiker of organisatie.
Mailservice
Verzend mail
${mailService.sendEmail(execution)}
Verstuur een e-mail vanuit de applicatie. Hiervoor moet de connectie met AWS Simple Email Service opgezet worden. Het versturen van een e-mail kan je configureren vanuit deze service task template.