Розробка BPMN-процесів через Camunda

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка BPMN-процесів через Camunda
Складна
~2-4 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розроблення BPMN-процесів через Camunda

Camunda — платформа для оркестрації бізнес-процесів на основі стандарту BPMN 2.0. Підходить для довгострокових робочих процесів із залученням людей (Human Tasks), зовнішніх сервісів та складної умовної логіки. На відміну від черг повідомлень, Camunda надає візуалізацію стану кожного екземпляра процесу.

Коли потрібен Camunda

  • Процеси тривають години/дні/тижні (кредитна заявка, онбординг співробітника)
  • У процесі беруть участь люди — потрібен UI для завдань
  • Необхідна трасування аудиту: хто прийняв яке рішення та коли
  • Умовна маршрутизація по бізнес-правилам
  • Компенсації при збоях (як Saga Pattern)

BPMN-діаграма: обробка кредитної заявки

[Start Event: Заявка отримана]
         │
[Service Task: Перевірити кредитну історію]
         │
[Gateway (XOR): Кредитний скор > 600?]
    │                │
  Так              Ні
    │                │
[User Task:        [End Event:
 Затвердження       Відмова]
 менеджером]
    │
[Gateway (XOR): Рішення менеджера?]
    │                │
 Затверджено    Відхилено
    │                │
[Service Task:  [End Event: Відмова]
 Видати кредит]
    │
[End Event: Успіх]

Camunda 8 (SaaS) vs Camunda 7 (self-hosted)

Camunda 8 Camunda 7
Рушій Zeebe (cloud-native) Java Process Engine
Розгортання SaaS або self-hosted Self-hosted (Spring Boot)
Worker External Task Workers Java/External
Масштабування Горизонтальне Вертикальне
Ліцензія Freemium Apache 2.0 (community)

Spring Boot + Camunda 7

<!-- pom.xml -->
<dependency>
  <groupId>org.camunda.bpm.springboot</groupId>
  <artifactId>camunda-bpm-spring-boot-starter</artifactId>
  <version>7.20.0</version>
</dependency>
// Розгортання BPMN з classpath
@Configuration
public class ProcessEngineConfig {
  @Bean
  public ProcessEnginePlugin deployProcesses() {
    return new ProcessEnginePlugin() {
      @Override
      public void postInit(ProcessEngineConfigurationImpl config) {
        config.setDeploymentResources(new String[] {
          "classpath*:processes/*.bpmn"
        });
      }
    };
  }
}

Реалізація Service Task:

@Component("creditCheckDelegate")
public class CreditCheckDelegate implements JavaDelegate {

  @Autowired
  private CreditBureauService creditBureauService;

  @Override
  public void execute(DelegateExecution execution) throws Exception {
    String applicantId = (String) execution.getVariable("applicantId");

    CreditReport report = creditBureauService.getReport(applicantId);

    // Записати результати у змінні процесу
    execution.setVariable("creditScore", report.getScore());
    execution.setVariable("creditHistory", report.toJson());
    execution.setVariable("scoreApproved", report.getScore() >= 600);
  }
}

User Task — завдання для менеджера:

@RestController
@RequestMapping("/tasks")
public class TaskController {

  @Autowired
  private TaskService taskService;

  @GetMapping("/manager")
  public List<TaskDto> getManagerTasks() {
    return taskService.createTaskQuery()
      .taskCandidateGroup("credit-managers")
      .active()
      .list()
      .stream()
      .map(task -> new TaskDto(
        task.getId(),
        task.getName(),
        runtimeService.getVariables(task.getProcessInstanceId())
      ))
      .toList();
  }

  @PostMapping("/{taskId}/complete")
  public void completeTask(@PathVariable String taskId,
                           @RequestBody TaskDecisionDto decision) {
    taskService.complete(taskId, Map.of(
      "managerDecision", decision.getDecision(),
      "managerComment", decision.getComment(),
      "decidedBy", getCurrentUser().getEmail()
    ));
  }
}

Camunda 8 з Zeebe Java Client

@Component
public class CreditCheckWorker {

  @JobWorker(type = "credit-check")
  public void handleCreditCheck(final JobClient client, final ActivatedJob job) {
    var variables = job.getVariablesAsMap();
    String applicantId = (String) variables.get("applicantId");

    try {
      CreditReport report = creditBureauService.getReport(applicantId);

      client.newCompleteCommand(job.getKey())
        .variables(Map.of(
          "creditScore", report.getScore(),
          "scoreApproved", report.getScore() >= 600
        ))
        .send()
        .join();

    } catch (Exception e) {
      client.newFailCommand(job.getKey())
        .retries(job.getRetries() - 1)
        .errorMessage(e.getMessage())
        .send()
        .join();
    }
  }
}

DMN — таблиці бізнес-правил

Camunda підтримує DMN для складних умов без коду:

| creditScore | loanAmount | employmentYears || decision    |
|-------------|------------|-----------------||-----------  |
| >= 750      | <= 5000000 | >= 1            || approved    |
| >= 700      | <= 2000000 | >= 2            || approved    |
| >= 650      | <= 1000000 | >= 3            || manual      |
| < 650       | -          | -               || rejected    |

DMN-таблиця викликається в Service Task:

DmnDecisionResult result = decisionService.evaluateDecisionByKey("credit-decision")
  .variables(execution.getVariables())
  .evaluate();

execution.setVariable("decision", result.getSingleEntry());

Моніторинг через Cockpit

Camunda Cockpit — UI для моніторингу процесів: активні екземпляри, завислі завдання, інциденти, аудит змінних.

Строки виконання

  • Один BPMN-процес з 3–5 Service Tasks та 1–2 User Tasks — 2–3 тижні
  • DMN-таблиці для бізнес-правил — 3–5 днів
  • Повна система з кількома процесами та Cockpit — 1–3 місяці