Aktionen

Aktionen werden während der Transition von einem Workflow-Schritt zum nächsten ausgeführt. Aktionen sind dazu gedacht die Geschäftslogik des Prozesses auszulösen, oder je nach Datenmodel zu implementieren.

Interface Action

Actions werden über das Interface \Netzmacht\Workflow\Flow\Action beschrieben:

interface Action
{
    public function getRequiredPayloadProperties(Item $item): array;

    public function validate(Item $item, Context $context): bool;

    public function transit(Transition $transition, Item $item, Context $context): void;
}

Eine Action besitzt die Möglichkeit einen bestimmten Payload, sprich von Benutzer zur Verfügung gestellte Daten, vorauszusetzen. Dazu dient die Method getRequiredPayloadProperties, die die erforderlichen Attribute als Liste zurückgibt. Bevor eine Transition ausgeführt wird, erfolgt die Validierung der bereitgestellten User-Inputs. Dazu implementiert eine Action die Methode validate. Der Payload steht als Context#getPayload zur Verfügung.

Die eigentliche Action wird in der Methode transit ausgeführt.

Action registrieren

Manuell registrieren

Actions lassen sich manuell zu einer Transition hinzufügen. Dies kann in der configure Methode des implementierten Workflow-Typs erfolgen. Sinnvoll ist dieses Vorgehen für Aktionen, die in der Transition des Workflows erfolgen soll.

    public function configure(Workflow $workflow, callable $next): void
    {
        parent::configure($workflow, $next);

        $action = new MyAction();
        $postAction = new MyPostAction();
        foreach ($workflow->getTransitions() as $transition) {
            $transition->addAction($action);
            $transition->addPostAction($postAction));
        }
    }

Automatisch über Backend-Konfiguration

Darüber hinaus lassen sich Actions im Backend der Workflow-Konfiguration konfigurieren.

Interface ActionTypeFactory

Damit die nahtlose Integration in die Workflow-Erweiterung funktioniert, muss zusatzlich eine Factory-Klasse vom Typ Netzmacht\ContaoWorkflowBundle\Workflow\Flow\Action\ActionTypeFactory implementiert werden:

interface ActionTypeFactory
{
    public function getCategory(): string;

    public function getName(): string;

    public function isPostAction(): bool;

    public function supports(Workflow $workflow): bool;

    public function create(array $config, Transition $transition): Action;
}

Die ActionTypeFactory wird nun im Symfony-Container registriert:

services:
    Custom\Workflow\Action\CustomActionFactory:
      tags:
        - { name: 'netzmacht.contao_workflow.action' }

Hinweis Benötigt die Action zusätzliche Konfiguration, ist kann eine DCA-Palette mit dem Namen der Action angelegt werden.

results matching ""

    No results matching ""