Materiał edukacyjny · OFL-1.1

Notacja BPMN 2.0

Uczestnicy

Pool
Participant
Tor (Lane)
Lane

Pool

Kontener dla procesu. Uczestnik interakcji. Pule wymieniają dane wyłącznie przez przepływy komunikatów. Można je zwinąć, aby ukryć szczegóły.

Pula z torami: model orkiestracji
Pula jako „dyrygent”: jeden koordynujący proces rozdziela zadania między uczestników
Kolaboracja: dwie pule wymieniają komunikaty
Kolaboracja: niezależne pule (klient i pizzeria) połączone przepływami komunikatów

Tor (Lane)

Pas wewnątrz puli pokazujący, kto wykonuje zadania (stanowisko, rola, dział lub system IT).

Tory: zadania podzielone według ról
Tory wewnątrz puli „wspólne mieszkanie” — zadania podzielone między współlokatorów (Christian, Falko, Robert); bramka XOR wybiera, co ugotować

Czynności (Activities)

Typy zadań

Abstrakcyjne
Task (None)
Ręczne
Manual
Użytkownika
User Task
Wysyłania
Send Task
Odbioru
Receive Task
Skryptowe
Script Task
Usługowe
Service Task
Reguła biznesowa
Business Rule

Zadanie abstrakcyjne (None Task)

Typ nie został określony. Stosowane we wczesnym modelowaniu, gdy sposób wykonania nie jest jeszcze ustalony lub gdy nie ma on znaczenia dla celu diagramu. W istocie to element zastępczy, później doprecyzowywany do konkretnego typu.

Zadanie użytkownika (User Task)

Wykonywane przez człowieka za pośrednictwem interfejsu oprogramowania: formularza CRM, ekranu w aplikacji webowej, pozycji w menedżerze zadań. Kluczowa różnica względem zadania ręcznego polega na tym, że osoba pracuje wewnątrz systemu, który śledzi status zadania.

Przykłady: zatwierdzenie wniosku w systemie, wypełnienie formularza, przejrzenie dokumentu w portalu samoobsługowym.

Zadanie ręczne (Manual Task)

Wykonywane przez człowieka bez udziału silnika BPM. System nie potrafi automatycznie wykryć, kiedy ta praca się zaczyna ani kończy.

Przykłady: fizyczne podpisanie dokumentu, rozmowa telefoniczna z klientem, spotkanie osobiste, dostarczenie przesyłki przez kuriera.

Zadanie usługowe (Service Task)

Wykonywane automatycznie przez program lub usługę. Bez udziału człowieka. Najczęstszy typ zadania w procesach wykonywalnych.

Przykłady: żądanie HTTP do API, zapis do bazy danych, wywołanie mikrousługi, uruchomienie obliczeń.

Zadanie wysyłania (Send Task)

Wysyła komunikat do konkretnego uczestnika zewnętrznego (innego procesu lub systemu) i kończy się natychmiast, bez czekania na odpowiedź. Wzorzec „wyślij i zapomnij”.

Przykłady: wysłanie e-maila do klienta, opublikowanie zdarzenia w kolejce komunikatów, wysłanie powiadomienia przez webhook.

Zadanie odbioru (Receive Task)

Czeka na przychodzący komunikat od uczestnika zewnętrznego. Proces zatrzymuje się na tym zadaniu, aż komunikat nadejdzie.

Szczególnym wariantem jest inicjujące zadanie odbioru: jeśli takie zadanie jest pierwszym krokiem procesu, samo odebranie komunikatu tworzy nową instancję procesu (alternatywa dla zdarzenia początkowego typu komunikat).

Przykłady: oczekiwanie na odpowiedź kontrahenta, oczekiwanie na wywołanie zwrotne od dostawcy płatności, oczekiwanie na potwierdzenie dostawy.

Zadanie skryptowe (Script Task)

Uruchamia osadzony skrypt (kod) zdefiniowany bezpośrednio w modelu procesu. W przeciwieństwie do zadania usługowego kod nie wywołuje żadnego systemu zewnętrznego — działa wewnątrz silnika BPM.

Przykłady: konwersja formatu danych, obliczenie terminu, złożenie treści e-maila, sprawdzenie warunku.

Zadanie reguły biznesowej (Business Rule Task)

Wywołuje silnik decyzyjny (np. tabelę DMN). Dane wejściowe są przekazywane do zestawu reguł, a w odpowiedzi zwracana jest decyzja.

Przykłady: ustalenie rabatu według poziomu klienta, obliczenie składki ubezpieczeniowej, sprawdzenie wniosku pod kątem polityki, klasyfikacja zapytania.
Wszystkie typy zadań BPMN na jednym diagramie
Przegląd wszystkich typów zadań: abstrakcyjne, ręczne, użytkownika, odbioru, wysyłania, skryptowe, usługowe, reguły biznesowej

Znaczniki zadań

Małe ikony pośrodku dolnej krawędzi prostokąta zadania. Wskazują zachowanie zadania — a nie jego typ.

Pętla
Loop
Wieloinst. ∥
Parallel MI
Wieloinst. ≡
Sequential MI
Kompensacja
Compensation
Ad-hoc ~
Ad-hoc
Podproces +
Subprocess
ZnacznikZnaczeniePrzykład
↻ PętlaZadanie powtarza się, dopóki warunek jest spełniony (jedna instancja, wiele iteracji)Popraw dokument → wyślij → jeśli odrzucony, powtórz
∥ Wieloinstancyjność równoległaN instancji uruchamia się jednocześnie — po jednej na każdy element kolekcjiWyślij powiadomienie do wszystkich zatwierdzających jednocześnie
≡ Wieloinstancyjność sekwencyjnaTe same N instancji, ale jedna po drugiejPrzeprowadź rozmowę z każdym kandydatem po kolei
⏪ KompensacjaZadanie wycofujące: uruchamia się tylko po wyzwoleniu kompensacji, aby cofnąć już zakończone działanie„Anuluj rezerwację” po tym, jak „Zarezerwuj hotel” już się zakończyło
~ Ad-hocZadania wewnątrz podprocesu wykonywane są w dowolnej kolejności, można je powtarzać lub pomijać; zdarzenia początkowe i końcowe nie są w nim dozwoloneSwobodny wybór kroków podczas konsultacji z klientem
+ PodprocesCzynność złożona z ukrytą wewnętrzną sekwencją; przepływy nie mogą przekraczać jej granicy„Obsługa zamówienia” ukrywa 10 wewnętrznych kroków
Znacznik pętli na zadaniu
Znacznik pętli (↻): zadanie powtarza się, aż warunek zostanie spełniony
Znacznik wieloinstancyjności na zadaniu
Wieloinstancyjność równoległa (∥): „wybierz pizzę” uruchamia po jednej instancji na współlokatora jednocześnie
Znacznik kompensacji na zadaniu
Znacznik kompensacji (⏪): zadanie wycofujące, które uruchamia się przy cofaniu zakończonego działania

Podproces (Subprocess)

Czynność złożona oznaczona znakiem „+”. Zawiera własną sekwencję kroków. Przepływy nie mogą przekraczać jej granicy. Zdarzenia pośrednie dołącza się do krawędzi.

Podproces: ukryta złożoność
Podproces hermetyzuje swoją wewnętrzną sekwencję — z zewnątrz widoczny jest tylko znacznik „+”

Call Activity

Gruba krawędź. Odwołuje się do globalnego podprocesu (np. „Zakupy”) wielokrotnie używanego w różnych procesach.

Różnica względem osadzonego podprocesu: w osadzonym podprocesie dane są dostępne bezpośrednio (współdzielony zakres z procesem nadrzędnym). Call Activity to odrębny proces — jego wejścia i wyjścia wymagają jawnego mapowania danych: co przekazujemy przy wywołaniu, a co odczytujemy po powrocie.
Call Activity: współdzielony podproces używany w wielu procesach
Call Activity: jeden globalny podproces „Zakup artykułu” (gruba krawędź) jest wywoływany zarówno z „Obsługi zamówienia”, jak i z „Utrzymania stanów magazynowych”

Podproces ad-hoc

Znacznik „~”. Czynności w środku mogą wykonywać się w dowolnej kolejności, powtarzać lub być pomijane. Zdarzenia początkowe/końcowe nie są w nim dozwolone.

Podproces ad-hoc: zadania w dowolnej kolejności
Ad-hoc (~): zadania w środku wykonują się w dowolnej kolejności i mogą być powtarzane

Podproces zdarzeniowy (Event subprocess)

Przerywana krawędź wewnątrz procesu. Wyzwalany przez zdarzenie początkowe, gdy proces nadrzędny jest aktywny. Przerywający — anuluje proces nadrzędny. Nieprzerywający — działa równolegle.

Podproces zdarzeniowy
Podproces zdarzeniowy (przerywana krawędź): wyzwalany przez zdarzenie wewnątrz aktywnego procesu nadrzędnego

Bramki (Gateways)

Sterują rozgałęzianiem i scalaniem. Bramka to nie zadanie! Decyzja zapada przed bramką.

Wyłączna XOR
Albo/Albo
Równoległa AND
I/I
Włączająca OR
Jedna lub więcej
Zdarzeniowa
Event-based
Złożona
Complex
Pusta
None

Bramka wyłączna (XOR)

Najczęściej stosowana bramka. Przy rozgałęzieniu aktywuje dokładnie jedną ścieżkę wyjściową — tę, której warunek jest spełniony jako pierwszy. Jeśli żaden warunek nie jest spełniony, proces kończy się błędem (dlatego dobrą praktyką jest zawsze definiowanie gałęzi „domyślnej”). Przy scalaniu natychmiast przepuszcza każdy napływający token, nie czekając na pozostałe.

Analogia: rozwidlenie drogi, na którym jedziesz tylko w jednym kierunku.

Przykłady: „Czy zamówienie jest opłacone? → Tak / Nie”, „Czy kwota > 10 000? → Tak / Nie”.
Wskazówka: sformułuj pytanie przed bramką, a warianty odpowiedzi umieść na wychodzących strzałkach.
Bramka wyłączna (XOR) — przykład
Bramka XOR: „które danie?” → wybierz jeden przepis spośród kilku (aktywowana jest tylko jedna ścieżka)

Bramka równoległa (AND)

Przy rozgałęzieniu aktywuje jednocześnie wszystkie ścieżki wyjściowe, bezwarunkowo — bez sprawdzania. Przy scalaniu czeka na tokeny na wszystkich ścieżkach wejściowych i dopiero gdy wszystkie dotrą, przekazuje dalej pojedynczy token.

Analogia: kierownik rozdziela zadania pięciu pracownikom i czeka, aż wszyscy skończą.

Przykłady: równoległa wysyłka towaru i wystawienie faktury; różne działy przeglądające dokumenty w tym samym czasie.
Antywzorzec: nie scalaj bramką AND gałęzi, które zostały rozdzielone przez XOR lub gdy zawsze wybierana jest tylko jedna z nich. AND będzie w nieskończoność czekać na tokeny na wszystkich wejściach — proces się zakleszczy. Po XOR scalaj bramką XOR (lub pustym rombem).
Bramka równoległa (AND) — przykład
Bramka AND: wszystkie gałęzie startują równolegle i są synchronizowane przy scalaniu (czekamy na wszystkie)

Bramka włączająca (OR)

Hybryda XOR i AND. Przy rozgałęzieniu aktywuje jedną lub więcej ścieżek w zależności od warunków — każdy warunek jest oceniany niezależnie. Przy scalaniu czeka tylko na tokeny ze ścieżek faktycznie aktywowanych (a nie na wszystkie, jak AND).

Analogia: bufet — bierzesz jedno danie, dwa albo wszystkie, ale nigdy zero.

Przykłady: klient wybrał dostawę i/lub odbiór osobisty i/lub pakowanie na prezent — wykonaj wybrane opcje i poczekaj, aż wszystkie się zakończą.
Uwaga: bramki OR są trudniejsze w analizie. Na rozgałęzionych diagramach reguły synchronizacji bywają nieoczywiste. Nie każdy silnik obsługuje je poprawnie.
Bramka włączająca (OR) — przykład
Bramka OR: w zależności od warunków aktywowana jest jedna lub więcej ścieżek; scalanie czeka tylko na gałęzie faktycznie wybrane

Bramka zdarzeniowa (Event-based)

Zasadniczo różni się od pozostałych: kieruje przepływem nie na podstawie danych, lecz według tego, które zdarzenie nadejdzie pierwsze. Za bramką umieszcza się pośrednie zdarzenia oczekujące (zegar, komunikat, warunkowe, sygnał). Gdy tylko jedno się wyzwoli, pozostałe są anulowane.

Analogia: zamówiłeś pizzę — jeśli nie dotrze w 60 minut, dzwonisz do pizzerii; jeśli przyjdzie wcześniej, jesz.

Przykłady: oczekiwanie na płatność z zegarem (brak zapłaty w 3 dni → anuluj zamówienie); oczekiwanie na odpowiedź klienta lub upływ terminu.
Bramka zdarzeniowa — przykład
Bramka zdarzeniowa: kieruje według tego, które zdarzenie nadejdzie pierwsze (zegar vs. komunikat)

Bramka złożona (Complex)

Stosowana, gdy logiki rozgałęzień nie da się wyrazić standardowymi bramkami. Warunek scalania określa wyrażenie (np. „kontynuuj, gdy zakończą się 3 z 5 gałęzi” lub „gdy nadejdzie pierwsza odpowiedź i minie 10 minut”).

W praktyce: rzadko używana i nie każdy silnik BPM ją obsługuje. Jeśli wystarczy kombinacja XOR / AND / OR, wybierz raczej ją.

Pusta (domyślnie wyłączna)

Romb bez znacznika. Semantycznie równoważny bramce wyłącznej (XOR) — standard BPMN pozwala pominąć krzyżyk. Część metodyków uważa to za złą praktykę, bo pogarsza czytelność: nie wiadomo, czy autor zapomniał o znaczniku, czy świadomie wybrał XOR.

Zdarzenia (Events)

Kluczowe pojęcia

Zdarzenie to coś, co się dzieje (fakt), w odróżnieniu od zadania (aktywnego działania). Rysowane jako okręgi.

Początkowe
Cienki okrąg
Pośrednie
Podwójny okrąg
Końcowe
Gruby okrąg

Przechwytujące (niewypełniony znacznik) — oczekiwanie. Rzucające (wypełniony) — wyrzucanie. Zdarzenia graniczne: przerywające (linia ciągła) i nieprzerywające (przerywana).

Tabela zbiorcza zdarzeń

Ikony z bpmn-font (Camunda). „—” = nieokreślone przez standard.

TypPoczątkowePośrednieKońcowe
NormalnePodproc. zdarz.Nieprzerw.Przechwyt.GraniczneGran. nieprzerw.Rzucające
Brak (None)
✉ Komunikat
⏱ Zegar
⚡ Błąd
▲ Sygnał
📋 Warunkowe
↗ Eskalacja
⬤ Zakończenie
⏪ Kompensacja
✖ Anulowanie
➡ Łącze
⬠ Wielokrotne
➕ Równoległe wielokr.

Komunikat (Message)

Wymiana z konkretnym odbiorcą: e-mail, rozmowa, HTTP, push. Dostępne w każdej pozycji.

Zdarzenie typu komunikat — przykład
Zdarzenie typu komunikat: wysłanie zamówienia pizzy jako zdarzenie rzucające uruchamia proces po stronie odbiorcy

Zegar (Timer)

Data/godzina, interwał, odliczanie (termin). Tylko przechwytujące.

Zdarzenie typu zegar — przykład
Zegar: początkowe (uruchomienie według harmonogramu), przerywające graniczne (termin), nieprzerywające graniczne (przypomnienie)

Błąd (Error)

Poważna awaria. Przechwytujące — tylko na granicy. Rzucające — tylko na końcu.

Zdarzenie typu błąd — przykład
Graniczne zdarzenie błędu na podprocesie „Zakup artykułu”: w razie niepowodzenia przepływ trafia do obsługi „obsłuż niepowodzenie zakupu”; ścieżka pozytywna kontynuuje opłaceniem faktury

Warunkowe (Conditional)

Oczekiwanie na warunek zewnętrzny („piekarnik jest gorący”). Tylko przechwytujące.

Zdarzenie warunkowe — przykład
Warunkowe: proces czeka na spełnienie warunków zewnętrznych — pizza nie trafia do piekarnika, dopóki nie osiągnie on 180°, i nie zostaje wyjęta, dopóki nie jest gotowa

Sygnał (Signal)

Rozgłaszanie (w odróżnieniu od adresowanego komunikatu). Reaguje każdy subskrybent.

Zdarzenie typu sygnał — przykład
Sygnał: telewizyjna reklama pizzy uruchamia proces przez sygnał początkowy; po zakupie pojawia się apetyt (warunek), po czym pizza zostaje zjedzona; sygnał końcowy rozgłasza ocenę do pizzatest.de

Zakończenie (Terminate)

Natychmiast zatrzymuje całą instancję procesu. Tylko końcowe.

Proces równoległy ze zwykłymi zdarzeniami końcowymi
Bez Zakończenia: po rozdzieleniu AND tokeny biegną równolegle. Zadanie 2 trwa 45 minut, zadanie 3 — 30; instancja kończy się po 55 minutach, gdy oba tokeny zostaną skonsumowane przez zwykłe (puste) zdarzenia końcowe.

Co, jeśli kontynuowanie zadania 2 po zakończeniu zadania 3 nie ma już sensu? Wtedy stosuje się poniższy wzorzec:

Ten sam proces ze zdarzeniem końcowym Zakończenia
Z Zakończeniem: po zadaniu 3 sprawdzany jest warunek „czy zadanie 2 jest jeszcze potrzebne?”. Jeśli nie — przepływ trafia do zdarzenia Zakończenia, które natychmiast konsumuje każdy pozostały token instancji (w tym wciąż działające zadanie 2). Zakończenie jest dopuszczalne wyłącznie jako zdarzenie końcowe.
Zdarzenie typu łącze — przykład
Zdarzenie łącza: „teleport” — rzucające wyrzuca przepływ, przechwytujące go podejmuje, zastępując długą, krzyżującą się strzałkę

Kompensacja (Compensation)

Odwraca wcześniej zakończone działanie. Zadanie kompensujące jest połączone asocjacją.

Zdarzenie kompensacji — przykład
Kompensacja: graniczne zdarzenie (kontur ⏪) na zakończonym zadaniu wyzwala jego procedurę kompensacji przez asocjację

Eskalacja (Escalation)

Wysyłana z podprocesu do procesu nadrzędnego — nie jest błędem. Może być nieprzerywająca.

Zdarzenie eskalacji — przykład
Eskalacja: podproces „Dostawa” rzuca „opóźnienie”; proces nadrzędny przechwytuje je nieprzerywającą eskalacją graniczną i równolegle powiadamia klienta — główny przepływ trwa dalej

Anulowanie (Cancel)

Tylko w kontekście transakcji. Końcowe — wycofanie. Graniczne — przechwytywanie.

Dane, artefakty, przepływy

Obiekt danych
Data Object
Magazyn danych
Data Store
Wejście danych
Data Input
Wyjście danych
Data Output
Adnotacja
Text Annotation
Grupa
Group
Przepływ
Sequence Flow
Przepływ komun.
Message Flow
Warunkowy
Conditional Flow
Domyślny
Default Flow
Transakcja
Transaction

Obiekt danych (Data Object)

„Kartka papieru” z zagiętym rogiem. Reprezentuje informację, która jest tworzona, konsumowana lub przekazywana między zadaniami w ramach instancji procesu. Istnieje tylko dopóki instancja żyje.

Przykłady: zgłoszenie klienta, projekt umowy, raport składany po drodze.

Magazyn danych (Data Store)

Walec. Trwały magazyn, który przeżywa instancję procesu: baza danych, rejestr, repozytorium plików. Zadania z niego odczytują i do niego zapisują.

Przykłady: CRM, ERP, baza zamówień, archiwum dokumentów.

Wejście danych (Data Input) / Wyjście danych (Data Output)

Parametry procesu lub podprocesu na jego granicy. Wejście — to, co dostarczane z zewnątrz; wyjście — to, co zwracane. Strzałka z pustym/wypełnionym trójkątem.

Przykłady: podproces „Zakupy” przyjmuje na wejściu listę pozycji, a na wyjściu zwraca fakturę.

Adnotacja tekstowa (Text Annotation)

Komentarz dołączany do dowolnego elementu przerywaną linią. Nie wpływa na wykonanie — służy jedynie objaśnieniu dla czytelnika diagramu.

Grupa (Group)

Zaokrąglony prostokąt z przerywaną linią. Wizualne grupowanie elementów (np. „wszystkie zadania logistyczne”). Nie ma semantyki wykonania; przepływy mogą swobodnie przekraczać jej granicę.

Przepływ sekwencji (Sequence Flow)

Ciągła strzałka z wypełnionym grotem. Definiuje kolejność wykonania wewnątrz jednej puli. Nie może przekraczać granic puli.

Przepływ warunkowy (z małym rombem u źródła) — uruchamia się tylko, gdy jego warunek jest prawdziwy. Stosowany na strzałkach wychodzących z zadania bez bramki.

Przepływ domyślny (z kreską u źródła) — ścieżka awaryjna bramki XOR/OR lub rozgałęzienia warunkowego, wybierana, gdy żaden inny warunek nie jest spełniony.

Przepływ komunikatów (Message Flow)

Przerywana strzałka z otwartym grotem. Łączy różne pule — komunikat wymieniany między niezależnymi uczestnikami. Nie stosowana wewnątrz jednej puli.

Przykłady: klient wysyła zamówienie do pizzerii; bank wysyła potwierdzenie płatności.

Transakcja (Transaction)

Podproces z podwójną krawędzią. Semantyka ACID: albo każde wewnętrzne działanie zostaje pomyślnie zatwierdzone, albo cała transakcja jest wycofywana przez zdarzenie Anulowania (wraz z kompensacjami). Stosowana do zachowania spójności w operacjach rozproszonych.

Przykłady: rezerwacja pakietu „lot + hotel + samochód” — jeśli którykolwiek krok się nie powiedzie, cała rezerwacja zostaje anulowana.

Gotowy, aby spróbować?

Utwórz swój pierwszy diagram BPMN za darmo — bez rejestracji i karty kredytowej.

Zacznij generować diagramy BPMN z pomocą AI
Przykłady zaadaptowane z camunda.com. Opracowane przez BP1.AI.