# Podprocesy

## Czym jest podproces <a href="#podprocesy-utworzeniepodprocesu" id="podprocesy-utworzeniepodprocesu"></a>

**Podproces workflow** (ang. *subprocess*) to wydzielony fragment większego procesu biznesowego, który realizuje określony, powtarzalny zestaw działań. Stosuje się go w celu uporządkowania i modularnego zaprojektowania przepływów pracy – dzięki temu złożone procesy można podzielić na mniejsze, łatwiejsze do zarządzania części.

Podprocesy ułatwiają ponowne wykorzystanie tych samych procedur w różnych miejscach systemu, zwiększają przejrzystość diagramów BPMN oraz umożliwiają niezależne testowanie i modyfikowanie poszczególnych etapów procesu. W efekcie organizacja zyskuje większą elastyczność, spójność oraz łatwość utrzymania swoich procesów biznesowych.

## Praca z podprocesami <a href="#podprocesy-utworzeniepodprocesu" id="podprocesy-utworzeniepodprocesu"></a>

### Utworzenie podprocesu <a href="#podprocesy-utworzeniepodprocesu" id="podprocesy-utworzeniepodprocesu"></a>

Podproces tworzymy i zapisujemy w taki sam sposób, jak proces.

### Dodanie podprocesu do procesu <a href="#podprocesy-dodaniepodprocesudoprocesu" id="podprocesy-dodaniepodprocesudoprocesu"></a>

Edytując proces, do którego chcemy dodać utworzony wcześniej podproces, w procesie głównym dodajemy element typu **Task**.

Następnie zmieniamy jego typ na **Call Activity** (menu kontekstowe **Change element** zostanie wyświetlone po zaznaczeniu bloku i kliknięciu na ikonie klucza).

<figure><img src="/files/hwxmCVPfhmHkOOSMN8sF" alt=""><figcaption><p><em><strong>Ilustracja 1.</strong> Menu zmiany typu Taska</em></p></figcaption></figure>

W kolejnym kroku dla zaznaczonego bloku **Call Activity** w prawym panelu rozwijamy sekcję **Called element**. Najpierw ustalamy typ elementu (właściwość **Type**) na **BPMN**, a po rozwinięciu kolejnych pól wpisujemy w polu **Called element** stworzony wcześniej proces - umieszczając go jako podproces w edytowanym procesie.

<figure><img src="/files/shwQfAH1yMHWa4Ux1i9q" alt=""><figcaption><p><em><strong>Ilustracja 2.</strong> Menu "Call Activity"</em></p></figcaption></figure>

### Podprocesy a zależności

Ponieważ podproces jest częścią innego procesu, podczas zapisu definicji procesu w oknie zapisu wersji otrzymamy informację o artefaktach zależnych.

<figure><img src="/files/2zoPqhM97zeJAlkUSatn" alt=""><figcaption></figcaption></figure>

Z powodu takiej zależności niemożliwe jest usunięcie definicji podprocesu z repozytorium.

<figure><img src="/files/OJPGIiC0dKG7RIewQWNh" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Usunięcie procesu głównego jest możliwe i nie zostaje potwierdzone żadnym oknem. Pojawia się jednak u dołu ekranu komunikat umożliwiający cofnięcie tej operacji.
{% endhint %}

Przy pobraniu artefaktu procesu będącego procesem głównym (opcja **Pobierz** w menu kontekstowym danego procesu), zostanie także pobrany podproces tego procesu.

```xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<exportArtifactWithDependencies>
    <dependencies>
        <dependency>
            <additionalData></additionalData>              
            <content>PD94bXZlbnQ{...}XRpb25zPgo=</content>
            <folderPath>/developers/mwachowska/</folderPath>
            <majorVersion>1</majorVersion>
            <minorVersion>6</minorVersion>
            <name>podproces.bpmn</name>
            <type>bpmn</type>
        </dependency>
    </dependencies>
    <exportArtifact>
        <additionalData></additionalData>
        <content>PD94bW{...}lvbnM+Cg==</content>
        <folderPath>/developers/mwachowska/</folderPath>
        <majorVersion>1</majorVersion>
        <minorVersion>3</minorVersion>
        <name>proces_glowny.bpmn</name>
        <type>bpmn</type>
    </exportArtifact>
</exportArtifactWithDependencies>
```

Podczas importu do aplikacji procesu mającego podprocesy, zostaną one także automatycznie dodane do tej aplikacji

### Wersjonowanie i użycie podprocesów

W polu **Binding** możemy określić wersję podprocesu.

* Domyślnie ustawione jest latest, czyli zawsze najnowsza wersja.
* Możemy jednak wskazać konkretną wersję (version) lub powiązać wersję podprocesu z wdrożeniem procesu głównego (deployment).

Ten sam podproces **może być wykorzystywany w wielu procesach głównych**, dlatego jego aktualizacja może wpływać na wszystkie powiązane procesy. Po testach i przed wdrożeniem produkcyjnym rekomendowane jest powiązanie z konkretną stabilną wersją.

Otwarte instancje korzystają zawsze z tej wersji podprocesu, która istniała podczas uruchomienia procesu głównego. Nowe instancje, jeśli Binding = latest, będą używać już nowej wersji podprocesu.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.eximee.com/budowanie-aplikacji/proces-biznesowy/tworzenie-procesu-biznesowego-w-bpmn-2.0/podprocesy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
