Erste Schritte¶
Nach dem erfolgreichen Download der Phar Archive
kann das erste kleine Anwendungsscript erstellt werden. Dazu legen wir die Datei
myapp.php
an.
include_once '/phar/alvine.framework-snapshot.phar';
include_once '/phar/alvine.application.workflow-1.2.0.phar';
Im folgenden ist ein Beispiel aufgeführt.
class Item {
}
$created=new \Alvine\Application\Workflow\State('ERSTELLT');
$start=new \Alvine\Application\Workflow\State('ANFANG');
$middle=new \Alvine\Application\Workflow\State('ZWISCHENSTAND');
$end=new \Alvine\Application\Workflow\State('ENDE');
/**
* Erste Aktion
*/
/**
* Erster Schritt anlegen mit der Ersten Aktion
*/
$step=new \Alvine\Application\Workflow\Step('step-1');
$step->addAction
(new \Alvine\Application\Workflow\Action\Closure(function($container) {
echo "Action 1 (Schritt 1) \n";
echo "Item erstellen \n";
$item=new Item();
echo "Item in den Container verschieben \n\n";
$container->setValue('item', $item);
return $container;
}));
/**
* zweite Aktion
*/
/**
* zweite Aktion dem 1. Schritt zuweisen
*/
$step->addAction
(new \Alvine\Application\Workflow\Action\Closure(function($container) {
echo "Action 2 (Schritt 1) \n";
echo "Item aus dem Container laden \n";
$item=$container->getValue('item');
echo "Namen hinzufügen \n\n";
$item->name='T-Shirt';
return $container;
}));
/**
* dritte Aktion
*/
/**
* dritte Aktion dem 1. Schritt zuweisen
*/
$step->addAction
(new \Alvine\Application\Workflow\Action\Closure(function($container) {
echo "Action 3 (Schritt 1) \n";
echo "Item aus dem Container laden \n";
$item=$container->getValue('item');
echo "Der Name ist nun :".$item->name."\n\n";
return $container;
}));
/**
* Funktion zum Validieren des Ergebis der Aktion
*/
/**
* validieren dem 1. Schritt zuweisen
*/
$step->addValidation
(new \Alvine\Application\Workflow\Step\Validation\Closure(function($container) {
echo "Ergebnis der Aktionen werden geprüft \n\n";
return true;
}));
/*
* Eine Aktion erstellen welche die isValid Funktion
* des Steps aufruft
* Diese Aktion kann den Container Status ändern
*/
/**
* vierte Aktion dem 1. Schritt zuweisen
*/
$step->addAction
(new \Alvine\Application\Workflow\Action\Closure(function($container) {
echo "Action 4 (Schritt 1) \n";
echo "Aufruf der isValid() Methode des Schrittes \n";
echo "Letzet Aktion Schritt 1 --------------\n\n";
return $container;
}));
/**
* ersten Übergang erstellen
*/
$transition1=new \Alvine\Application\Workflow\Transition
(null, $step, $middle, 'Schritt1');
/**
* neuen Manager mit dem ersten Übergang erstellen
*/
$transisions=new \Alvine\Application\Workflow\Transitions();
$transisions->addTransition($transition1);
/*
* erste Aktion
*/
/*
* zweiten Schritt erstellen
*/
$step2=new \Alvine\Application\Workflow\Step('step-2');
$step2->addAction(new \Alvine\Application\Workflow\Action\Closure
(function($container) {
echo "Action 1 (Schritt 2) \n";
echo "Item laden \n";
$item=$container->getValue('item');
echo "und weiter bearbeiten \n\n";
$item->department='Herren';
return $container;
}));
/**
* zweite Aktion
*/
/**
* zweite Aktion dem 2. Schritt zuweisen
*/
$step2->addAction(new \Alvine\Application\Workflow\Action\Closure
(function($container) {
echo "Action 2 (Schritt 2) \n";
echo "Item laden \n";
$item=$container->getValue('item');
echo "Der Name ist nun :".$item->name."\n";
echo "Das Department ist nun :".$item->department."\n\n";
echo "Letzet Aktion Schritt 2 --------------\n\n";
return $container;
}));
/*
* Übergang von Schritt 1 zu Schritt 2
*/
$transition=new \Alvine\Application\Workflow\Transition
($middle, $step2, $end, 'Schritt2');
/*
* Validierung von Schritt 1 zu Schritt 2
*/
$validation=new class() extends \Alvine\Core\Alvine
implements \Alvine\Application\Workflow\Transition\Validation {
public function isValid(\Alvine\Application\Workflow\Transition $transition,
\Alvine\Application\Workflow\Container $container): bool {
return true;
}
};
$transition->addValidation($validation);
$transisions->addTransition($transition);
$admission=new \Alvine\Application\Workflow\Admission
(\Alvine\Application\Workflow\Container\Dataset::class, $created);
$processor=(new \Alvine\Application\Workflow\Processor('test'))
->setTransitions($transisions)
->setAdmission($admission);
$args=null;
$container=(\Alvine\Application\Workflow\Factory::getInstance($args)
->build($processor))->current();
/**
* Container serialisieren
* (zum Speichern)
*/
$containerString=\serialize($container);
// Container kommt aus der Serialisierung (aus der Speicherung)
$container=\unserialize($containerString);
// Ausführen der Übergänge
$processor->run($container, 'Schritt1');
/**
* Action 1 (Schritt 1)
* Item erstellen
* Item in den Container verschieben
*
* Action 2 (Schritt 1)
* Item aus dem Container laden
* Namen hinzufügen
*
* Action 3 (Schritt 1)
* Item aus dem Container laden
* Der Name ist nun :T-Shirt
*
* Action 4 (Schritt 1)
* Aufruf der isValid() Methode des Schrittes
* Letzet Aktion Schritt 1 --------------
*/
// Containerdaten ausgeben
echo (string) $container;
/**
* ID : 0e31e3ab-9423-4aae-bf8d-e447737e80fe
* State : ZWISCHENSTAND
* item : Item
*
* ⬤ 2019-05-05 17:57:25 test
* ▶ container created
* ▷ 2019-05-05 17:57:25 test ⬤ ▬▶ ERSTELLT
* ▶ container state changed from to ERSTELLT
* ▷ 2019-05-05 17:57:25 test ERSTELLT ▬▶ ZWISCHENSTAND
* ▶ container state changed from ERSTELLT to ZWISCHENSTAND Action 1 (Schritt 2)
*/
// Übhergang 2
$processor->run($container, 'Schritt2');
/**
* Item laden
* und weiter bearbeiten
*
* Action 2 (Schritt 2)
* Item laden
* Der Name ist nun :T-Shirt
* Das Department ist nun :Herren
*
* Letzet Aktion Schritt 2 --------------
*/
// Zur Speicherung serialisieren
$containerString2=\serialize($container);
// Hier serialisieren ....
// Containerdaten ausgeben
echo (string) $container;
/**
* State : ENDE
* item : Item
*
* ⬤ 2019-05-05 17:57:25 test
* ▶ container created
* ▷ 2019-05-05 17:57:25 test ⬤ ▬▶ ERSTELLT
* ▶ container state changed from to ERSTELLT
* ▷ 2019-05-05 17:57:25 test ERSTELLT ▬▶ ZWISCHENSTAND
* ▶ container state changed from ERSTELLT to ZWISCHENSTAND
* ▷ 2019-05-05 17:57:25 test ZWISCHENSTAND ▬▶ ENDE
* ▶ container state changed from ZWISCHENSTAND to ENDE
*/