---
title: "Vizuálny editor — Workflows for Laravel | Roundly"
description: "Čo volá vizuálny editor — schémy, katalóg krokov, výber polí, priebežná validácia, porovnanie, skúšobné behy a prehľad behov — a JSON resources."
url: https://roundly-consulting.com/sk/open-source/navody/workflows-for-laravel/vizualny-editor
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Workflows for Laravel](https://roundly-consulting.com/sk/open-source/navody/workflows-for-laravel.md)

# Vizuálny editor

Balík neobsahuje žiadne UI. Editoru dá všetko, čo potrebuje na kreslenie, úpravy, kontrolu, porovnanie, náhľad a sledovanie workflowu. Zapojte to za vlastné controllery a autorizáciu (len pre správcov vlastníka):

| Editor potrebuje | Volanie | Vykreslenie |
| --- | --- | --- |
| Formát dokumentu | `Workflows::schema()->graph(), ->template(), ->definitions()` | JSON Schema (draft 2020-12) |
| Paleta krokov | `Workflows::catalogue()->export()` | CatalogueEntryResource::collection($export->types) |
| Formulár každého kroku | `CatalogueEntry::$configSchema` | Ľubovoľný renderer formulárov z JSON Schema; #/$defs zo schema()->definitions() |
| Výsledky uzla (popisy hrán) | `CatalogueEntry::$outcomes` | Môžu závisieť od konfigurácie: po úprave ich prepočítajte. |
| Výber polí | `Workflows::subjects()->export($subjectType)` | SubjectTypeResource |
| Kalendáre | `Workflows::calendars()->names()` | — |
| Namapované udalosti | `Workflows::triggers()->events()` | — |
| Načítanie / uloženie konceptu | `definition($key, $owner)->draft(), ->edit($graph, $expectedChecksum)` | VersionResource |
| Priebežná validácia | `definition(...)->validate() / versions()->validate($graph, $subjectType, $owner)` | ValidationReportResource (chyby nesú node, edge, path) |
| Publikovanie | `definition(...)->publish(by: $user)` | InvalidGraphException → jej report |
| Porovnanie verzií | `versions()->diff($from, $to)` | VersionDiffResource |
| Testovací režim | `definition(...)->dryRun()->sample([...])->assume([...])->run() / ->explore()` | DryRunResultResource |
| Živý prehľad behov | `versions()->overlay($version)` | OverlayResource |
| História a záznam krokov | `definition(...)->instances(), instances()->steps($instance)` | InstanceResource, StepRunResource |
| Detail jedného behu | `instances()->detail($instance)` | InstanceResource (steps, waits, escalations) |
| Kópia medzi vlastníkmi | `versions()->export() / versions()->import($payload, $owner) + resolveFlag()` | TemplateResource |

- Dve karty: kontrolný súčet, ktorý editor načítal, posielajte ako $expectedChecksum; zastarané uloženie vyhodí DraftConflictException (409).
- Nedokončené grafy sa uložia bez problémov; úplnú validáciu robí až publikovanie.
- Pozície a popisy patria do objektu ui každého uzla — ukladá sa doslovne, engine ho ignoruje a porovnanie ho hlási ako presun.
- Id uzlov určuje editor (^\[a-z\]\[a-z0-9\_\]{0,63}$); importy ich premapujú (ImportResult::$idMap).
- Validačné chyby ukazujú na uzol, hranu alebo JSON pointer v konfigurácii uzla, takže editor môže zvýrazniť presné pole. Správy sú preložené (en, sk) a neobsahujú názvy tried.
- Nikde žiadne názvy tried: typy subjektov sú kľúče z registra, odkazy sa vykresľujú cez referenčné resources.

## JSON resources

API pre editor a správu je vaše: použite manažéra a tieto resources (RoundlyConsulting\\Workflows\\Http\\Resources) za vlastnou autorizáciou:

```php
use RoundlyConsulting\Workflows\Http\Resources\{CatalogueEntryResource, InstanceResource, ValidationReportResource};

// The palette and a step's form
return CatalogueEntryResource::collection(Workflows::catalogue()->export()->types);

// Live validation
return new ValidationReportResource(Workflows::versions()->validate($request->input('graph'), 'purchase_request', $team));

// One run in detail: steps, waits and escalations in a fixed number of queries
$instance = Workflows::instances()->find($ulid) ?? abort(404);
Workflows::instances()->detail($instance);

return new InstanceResource($instance->loadMissing(['subject', 'owner', 'starter']));
```

| Resource | Obaľuje | Polia |
| --- | --- | --- |
| `DefinitionResource` | WorkflowDefinition | id, key, name, description, subject\_type, status {value, label}, owner, current\_version, draft, created\_at, updated\_at |
| `VersionResource` | WorkflowVersion | id, number, status, graph, trigger, actor, checksum, review\_flags, published\_at, published\_by |
| `InstanceResource` | WorkflowInstance | id (ULID), definition, version, status, subject, subject\_type, owner, trigger {type, key}, started\_by, current\_node, steps\_count, depth, failure {code, message, node}, started\_at, ended\_at; when loaded: steps, waits, escalations |
| `WaitResource` | WorkflowWait | kind {value, label}, due\_at, event, status |
| `EscalationResource` | WorkflowEscalation | level, due\_at, status, fired\_at |
| `StepRunResource` | StepRun | node, type, visit, attempt, status, outcome, input, output, error {code, message, retryable}, scheduled\_for, started\_at, finished\_at |
| `CatalogueEntryResource` | CatalogueEntry | key, label, description, category, config\_schema, output\_schema, outcomes \[{key, label, required}\], side\_effects, escalations, available, package |
| `SubjectTypeResource` | SubjectTypeDefinition | key, label, owner\_type, fields \[{name, type, label, writable, options}\] |
| `ValidationReportResource` | ValidationReport | valid, errors \[{code, severity, message, node, edge {from, to, outcome}\|null, path, params}\] |
| `VersionDiffResource` | VersionDiff | from, to, identical, nodes {added, removed, changed, moved}, edges {added, removed, relabelled}, trigger, settings |
| `OverlayResource` | OverlayReport | version, total, nodes \[{node, running, waiting, failed}\] |
| `DryRunResultResource` | DryRunResult | valid, started, reason, path, actions, ended\_at, ended\_by, report |
| `TemplateResource` | TemplatePayload | schema, definition {key, name, subject\_type, description}, graph, review \[{node, path, reason}\], exported\_at, source {checksum} |

- definition, version, subject, owner, started\_by a published\_by sa vykresľujú len z načítaných relácií alebo uloženej morph dvojice: kolekcia nikdy nerobí dopyt na každý riadok. Načítajte vopred, čo potrebujete: ->with(\['definition', 'version', 'subject', 'owner', 'starter'\]).
- Workflows::instances()->detail($instance) cez loadMissing() načíta definíciu, verziu, záznam krokov (v poradí), čakajúce čakania aj čakajúce eskalácie (podľa splatnosti), takže InstanceResource vykreslí steps, waits a escalations pevným počtom dopytov. Bez detail() sa tieto tri kľúče vynechajú.
- Správy neznámych výnimiek sa nikdy neposielajú von: pri exception alebo worker\_timeout je správou preložené workflows::failures.exception; pôvodná správa ostáva v databáze pre operátorov.
- output.request\_id kroku approval je kolo, v ktorom sa rozhoduje cez within().

## Referenčné resources — žiadne názvy tried navonok

Modely aplikácie (vlastník, subjekt, používateľ) sa vykresľujú cez referenčný resource — predvolene len {id, type: class\_basename}, nikdy morph trieda ani názov triedy. Zmazaný subjekt sa vykreslí z uloženej dvojice bez dopytu:

| Kľúč konfigurácie | Predvolená trieda | Dostane |
| --- | --- | --- |
| `workflows.resources.owner` | `WorkflowOwnerResource` | Model vlastníka. |
| `workflows.resources.subject` | `WorkflowSubjectResource` | Model subjektu. |
| `workflows.resources.user` | `WorkflowUserResource` | Používateľ (started\_by, published\_by, žiadateľ skúšobného behu). |

```php
final class TeamReferenceResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return ['id' => $this->resource->getKey(), 'name' => $this->resource->name];
    }
}

// config/workflows.php
'resources' => ['owner' => TeamReferenceResource::class, ...],
```

Prázdna hodnota použije predvolenú triedu; čokoľvek, čo nie je inštanciovateľná podtrieda JsonResource (vrátane samotnej základnej triedy), vyhodí InvalidWorkflowsConfigurationException s názvom kľúča.

## Chyby → HTTP

Každá výnimka balíka rozširuje WorkflowsException s errorCode(), status() a context(); úplný zoznam nájdete v časti Výnimky:

```php
try {
    $result = $workflows->start($key, $subject, $owner)->input($request->all())->by($request->user())->dispatch();
} catch (WorkflowsException $e) {
    return response()->json(['code' => $e->errorCode(), 'message' => $e->getMessage()], $e->status());
}
```

| HTTP | Výnimky |
| --- | --- |
| 404 | UnknownDefinitionException, NoVersionException, SubjectOwnerMismatchException |
| 409 | DefinitionNotActiveException, DefinitionKeyTakenException, DraftConflictException, NothingToPublishException, PublishedVersionImmutableException, TriggerMismatchException, InstanceNotRetryableException, InstanceNotCancellableException |
| 422 | InvalidGraphException, InvalidTriggerInputException, InvalidDefinitionException, InvalidEventKeyException, InvalidTemplateException, InvalidDiffException, MissingIdempotencyKeyException, MissingTriggeringUserException, SubjectTypeMismatchException, UnknownSubjectTypeException, UnknownStepTypeException, UnknownCalendarException, BusinessCalendarNeverOpenException |
| 403 | StepAuthorizationDeniedException |
| 500 | DuplicateStepTypeException, InvalidStepTypeException |

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/workflows-for-laravel.md)
