Clinique
Camunda

Clinique
Camunda


Download Clinique_C8.zip file ⤳ case study requires Spring Boot Java

Requirements (in French)

Camunda Modeler process application

│   pom.xml
│
└───src
    ├───main
    │   │   .process-application
    │   │
    │   ├───java
    │   │   └───com
    │   │       └───BarbierDarnal
    │   │           └───clinique_c8
    │   │                   Approuver_signer_le_consentement_eclaire.java
    │   │                   Clinique_C8.java
    │   │                   Emission_besoin_info_supp_.java
    │   │                   Emission_info_supp_.java
    │   │                   Generer_les_acces_Web.java
    │   │                   Information_mediation.java
    │   │                   Operer.java
    │   │                   Signer_enquete_allergies_antecedents_anesthesiques_.java
    │   │                   Visiter_le_medecin_chirurgien.java
    │   │
    │   └───resources
    │       │   application.properties
    │       │   Besoin_info_supp_C8.bpmn
    │       │   Clinique_C8.bpmn
    │       │
    │       └───forms
    │               N_1_Valider_le_dossier_d_admission.form
    │               N_Valider_le_dossier_d_admission.form
    │               Produire_le_dossier_d_admission.form
    │
    └───test
        └───java

Process variable

Process variableOperate console

Sequence flow condition

Camunda 8 uses Friendly Enough Expression Language -FEEL- for expressing conditions

Conditional event in Camunda 7

No conditional event in Camunda 8

Timer event ⤳ acyclic

Message event ⤳ thrown (model)

Message event ⤳ thrown (code)

@org.springframework.stereotype.Component
public class Emission_besoin_info_supp_ implements io.camunda.client.api.worker.JobHandler {
    // https://docs.camunda.io/docs/components/best-practices/development/routing-events-to-processes/#starting-process-instance-by-message
    @org.springframework.beans.factory.annotation.Autowired
    private io.camunda.client.CamundaClient _emission_besoin_info_supp_;

    @io.camunda.client.annotation.JobWorker(type = "emission_besoin_info_supp_")
    @Override
    public void handle(final io.camunda.client.api.worker.JobClient client, final io.camunda.client.api.response.ActivatedJob job) {
        assert (_emission_besoin_info_supp_ != null); // Injection succeeded...
        System.out.println(job.getType());
        // To be thrown message *TECHNICAL* features are passed through "Headers" (i.e., metadata) in model...
        // job.getCustomHeaders().forEach((key, value) -> System.out.println("\t" + key + ": " + value));
        String messageName = job.getCustomHeaders().get("messageName");
        String correlationKey = job.getCustomHeaders().get("correlationKey");
        _emission_besoin_info_supp_.newPublishMessageCommand()
                .messageName(messageName).correlationKey(correlationKey)
                .variable("patient_id", "n°SS").send().join();
    }
}

Message event ⤳ start

Message event ⤳ end (model)

Message event ⤳ end (code)

@org.springframework.stereotype.Component
public class Emission_info_supp_ implements io.camunda.client.api.worker.JobHandler {

    @org.springframework.beans.factory.annotation.Autowired
    private io.camunda.client.CamundaClient _emission_info_supp_;

    @io.camunda.client.annotation.JobWorker(type = "emission_info_supp_")
    @Override
    public void handle(final io.camunda.client.api.worker.JobClient client, final io.camunda.client.api.response.ActivatedJob job) {
        assert (_emission_info_supp_ != null); // Injection must succeed!
        System.out.println(job.getType());
        String messageName = job.getCustomHeaders().get("messageName");
        String correlationKey = job.getCustomHeaders().get("correlationKey");
        // La variable de processus 'patient_id' a été "apportée" au "start message event"...
        assert (job.getVariable("patient_id") == "n°SS");
        _emission_info_supp_.newPublishMessageCommand()
                .messageName(messageName).correlationKey(correlationKey)
                .variables(java.util.Map.of("patient_id", job.getVariable("patient_id"), "info_supp_", "ECZéMA"))
                .send().join();
    }
}

Message event ⤳ caught

Execution listener as Job worker (model)

Execution listener as Job worker (code)

@org.springframework.stereotype.Component
public class Visiter_le_medecin_chirurgien /*implements io.camunda.client.api.worker.JobHandler*/ {

    @io.camunda.client.annotation.JobWorker(type = "visiter_le_medecin_chirurgien")
    public java.util.Map<String, String> handle(final io.camunda.client.api.worker.JobClient client, final io.camunda.client.api.response.ActivatedJob job) {
        System.out.println(job.getKind().name()); // Display is 'EXECUTION_LISTENER'
        // Création d'une nouvelle variable de processus :
        return java.util.Map.of("compte_rendu_de_visite", "par défaut, tout va bien...");
    }
}

User task ⤳ assignment

Users ⤳ Identity console

User task ⤳ form

Camunda Form

User task ⤳ execution

User task Tasklist console

User task ⤳ form

Camunda Form

User task Tasklist console

Script task FEEL*

*Script is for illustration only, i.e., it is a random (dummy) initialization of besoin_info_supp_process variable

© BarbierDarnal.com