Wie greift Camunda 8 User Task auf Variablen im Java Code zu?

Erste Frage Aufrufe: 344     Aktiv: 21.11.2022 um 17:15

0

Hallo zusammen, Ich habe hier eine Verständnisfrage: Wie greift Camunda 8 User Task auf Java Variablen zu? Ich bin hier an der Stelle des User Tasks 'Select Keyword'. Wie man unten im 2. Image sehen kann, ist die Input Variable "keywords" - allerdings steht ja in diesem ZeebeWorker der vorherigen Service Task Methode 'loadKeywords' autoComplete = true --> D.h. nach meinem Verständnis ist die Methode bereits beendet, wenn in Camunda dann der nachfolgende User Task 'Select Keyword' aufgerufen wird. "keywords" ist aber so weit ich das sehe eine lokale Variable der Methode 'loadKeywords' und diese wird auch nicht auf Klassenebene abgespeichert! Wie kann also der User Task 'Select Keyword darauf zugreifen??

@ZeebeWorker(type = "load-keywords", autoComplete = true) public Map loadKeywords(final ActivatedJob job) { // Do the business logic LOGGER.info("Load Keywords");

    final List<Option<Integer>> keywords = keywordService.getRepository().findAll().stream()
            .map(e -> new Option<>(e.getText(), e.getId()))
            .collect(Collectors.toList());

    // Probably add some process variables
    final HashMap<String, Object> variables = new HashMap<>();
    variables.put("keywords", keywords);
    return variables;
}

@ZeebeWorker(type = "load-supervisors", autoComplete = true)
public Map<String, Object> loadSupervisors(final ActivatedJob job) {
    // Do the business logic
    LOGGER.info("Load supervisors");

    // Get the
    final Object keyword = job.getVariablesAsMap().get("keyword");
    final Optional<Keyword> found;
    if (keyword instanceof Integer) {
        found = keywordService.getRepository().findById(((Integer) keyword));
    } else if (keyword != null && keyword.toString().matches("\\d+")) {
        found = keywordService.getRepository().findById(Integer.parseInt(keyword.toString()));
    } else {
        found = Optional.empty();
    }
    final List<Option<String>> supervisors = found
            .map(supervisorService::findAllByKeyword)
            .orElse(supervisorService.getRepository().findAll()).stream()
            .map(e -> new Option<>(e.getName(), e.getName()))
            .collect(Collectors.toList());

    // Probably add some process variables
    final HashMap<String, Object> variables = new HashMap<>();
    variables.put("supervisors", supervisors);
    return variables;
}

BPMN Modell

'Select Keyword' form input

Diese Frage melden
gefragt

Punkte: 10

 
Kommentar schreiben
0 Antworten