Anmeldung und Start Ihrer ersten Workflow Engine
Sobald Sie Ihre Daten eingegeben haben, erhalten Sie eine E-Mail mit einem Link zur Verifizierung Ihres Kontos. Sobald Sie verifiziert sind, können Sie Ihre erste Workflow-Engine erstellen.
Über Workflow-Engines
Erstellen Ihres ersten Workflows
Für unser Beispiel werden wir einen einfachen Arbeitsablauf erstellen, der auch als Prozess bezeichnet wird und eine E-Mail versendet. Wenn wir diesen Arbeitsablauf visualisieren würden, würde er wie folgt aussehen:
Wenn Sie mit Geschäftsprozessen vertraut sind, wird Ihnen das obige Diagramm bekannt vorkommen. Es ist ein BPMN-Diagramm, das visuell darstellt, was wir tun wollen. ProcessMaker.IO ist eine BPMN-konforme Workflow-Engine. Wenn Sie mit BPMN vertraut sind, werden Sie sich bei der Verwendung der Engine wohlfühlen. Wenn Sie mit BPMN nicht vertraut sind, brauchen Sie sich keine Sorgen zu machen, das ist nicht notwendig. Wir werden die Konzepte durchgehen.
Wenn Sie einen Workflow in ProcessMaker.IO erstellen, haben Sie die Wahl, wie Sie vorgehen. Wenn Sie mit BPMN-Diagrammwerkzeugen vertraut sind, können Sie ein BPMN-Diagramm erstellen und es in die Engine importieren. Wir werden in einem späteren Tutorial ein Beispiel dafür zeigen. Sie können einen Prozess auch programmatisch erstellen, was wir in diesem Beispiel tun werden. ProcessMaker.IO bietet SDKs in vielen Sprachen an. Für dieses Beispiel werden wir das ProcessMaker.IO PHP SDK verwenden.
Zunächst müssen wir unseren SDK-Client initialisieren. Dazu benötigen Sie den API-Endpunkt Ihrer Engine und das API-Zugangs-Token Ihres ersten Benutzers. Diese können Sie in Ihrem Dashboard finden.
Stellen Sie sicher, dass Sie den Code von unserem GitHub-Repository herunterladen. Wir werden dies als Ausgangspunkt verwenden. Führen Sie den Befehl composer install von PHP aus, um das SDK zu installieren. Erstellen Sie anschließend eine .env-Datei im Stammverzeichnis Ihres Codes. Diese Datei enthält Ihren API-Endpunkt, Ihr Zugriffstoken und andere Konfigurationsoptionen.
PMIO_ENDPOINT=https://fds23zz.api.processmaker.io/api/v1 PMIO_ACCESS_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjkwMTBmZGI5YWMxYTZiNGI2ZGMyZjNiODZmZDg5OTJhYWRlODI0MGU5MWI3NWRkNDhjNTA4MzRlYjQzZjUzNmFjMDkxNTg4MDY5MDZiM2MxIn0.eyJhdWQiOiIxIiwianRpIjoiOTAxMGZkYjlhYzFhNmI0YjZkYzJmM2I4NmZkODk5MmFhZGU4MjQwZTkxYjc1ZGQ0OGM1MDgzNGViNDNmNTM2YWMwOTE1ODgwNjkwNmIzYzEiLCJpYXQiOjE1MDY1NDM5MTMsIm5iZiI6MTUwNjU0MzkxMywiZXhwIjoxNTM4MDc5OTEzLCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.PTFaPvddgKqB51trFAV2Ka_8W2npZ9jbc2uGAoYdFKfMNNvvNl07DWTDXxK90B0OwLAA08husWmfkVomWlm6W44hXuJEa8zG3SfRGwpzPQiA4NZ706YkbWqjLfY5QH41MwpJlkgKeQv6Q6nvZluyXrzQlvZVkSfSb9GvNe4h6arLLn1KQp3xQnnK-Jk8Q109uEnhmkOs4mfUKj5rd0E_DKJUTc-CmXoJZ8zsvuDv-irv7PtQlpQRmVdlOJD2mTO2NNwQpLjdl4d3D4a7zKpMcrkeLmqz_Cums4uk5069Ju2TRmAbyGfWUgL7aTg-o80xWPnwY9AY7xC__mZvW1ydlpLKX18-bIpj_5acCyqQmnA921KAoO99YV3rT19I_VKF9dglzMOPWrcLzb44qK4ONXjx8Za3zyFJZpBa_SrCkhYiOhY1GNNk5EpqqMCAT_D8nCnrR7fmLrXtFJsP9yPDYwMZxYuppCH6rcqLIeB0VlmEiNTJu_1RlYgcmG02boSNPXHmzrEd9eJKRksSWVfkE90quuDMNoEFYaL1A_yU0yn2iW0T--lh_kPOGEth2WrShoYEZ667FSrSmsRYoLe8BiqGbiSquYrtDhHYhcidOeWyZLtUDMnVNi00v3i3hrIp7KIvIM9zAQxzk3OwAxXFrKV6Ut3-cqyvpMhWo9NPyZI # Setzen Sie diese Option auf true, wenn Sie jeden HTTP-Api-Aufruf protokollieren möchten. [email protected] PMIO_DEBUG=false PMIO_DEBUG_FILE=debug.log
Initialisierung des PHP-SDK
Zunächst müssen wir unseren API-Client mit unseren Anmeldedaten initialisieren. In unseren Code-Beispielen ist die Datei bootstrap.php die Datei. Diese Datei ist enthalten in allen Beispielen enthalten. Schauen wir uns an, wie der Client initialisiert wird.
// Create our API configuration object and pass in it's configuration $config = new Configuration(); $config->setHost(getenv('PMIO_ENDPOINT')); $config->setAccessToken(getenv('PMIO_ACCESS_TOKEN')); $config->setDebug(getenv('PMIO_DEBUG')); $config->setDebugFile(__DIR__ . '/' . getenv('PMIO_DEBUG_FILE')); // Initialize our API client which will be referenced by client scripts $pmio = new Client(new ApiClient($config));
Erstellen des Prozessobjekts
Das Prozessobjekt speichert die Definition unseres Arbeitsablaufs. Es enthält die Zuordnung von Ereignissen zu Aufgaben und wie jedes Element in das nächste übergeht. Machen Sie sich keine Gedanken über diese Begriffe, wir werden sie bald behandeln. In der Datei introduction/create.php beginnen wir mit der Erstellung des Prozessobjekts über unsere API.
$response = $pmio->addProcess(new ProcessCreateItem([ 'data' => new Process([ 'attributes' => new ProcessAttributes([ 'name' => 'Einführungsprozess' ]) ]) ])); // Abrufen des zugrunde liegenden Datenobjekts, das unseren Prozess wirklich repräsentiert $process = $response->getData();
Erstellen der Start- und Endereignisse
In der Welt des Workflows beschreiben Ereignisse, was in Ihrem Workflow zu verschiedenen Zeiten geschieht. In unserem einfachen Fall verwenden wir ein Startereignis und ein Endereignis. Das Startereignis ist der Beginn der Ausführung unseres Prozesses. Unser Startereignis wird ausgelöst, wenn ein Kunde das Kontaktformular abschickt. Das Endereignis signalisiert, dass unser Workflow abgeschlossen ist. Das Ziel des Workflows ist es, vom Startereignis zum Endereignis zu gelangen. In der Datei introduction/create.php sehen Sie, wie wir sie erstellen.
$response = $pmio->addEvent($process->getId(), new EventCreateItem([ data' => new Event([ 'attributes' => new EventAttributes([ 'name' => 'Start', 'type' => 'START', 'definition' => EventAttributes::DEFINITION_MESSAGE ]) ]) ])); $startEvent = $response->getData(); $response = $pmio->addEvent($process->getId(), new EventCreateItem([ 'data' => new Event([ 'attributes' => new EventAttributes([ 'name' => 'Ende', 'type' => 'END', 'definition' => EventAttributes::DEFINITION_NONE ]) ]) ])); $endEvent = $response->getData();
Erstellen der Aufgabe zum Senden einer E-Mail
In unserem Workflow wollen wir eine E-Mail senden, wenn der Kunde das Kontaktformular abschickt. Dazu müssen wir eine Dienstaufgabe verwenden. Eine Aufgabe stellt etwas dar, das in einem Arbeitsablauf ausgeführt werden kann, und wen es betreffen sollte. Ein Service-Task läuft im Hintergrund und benötigt keinen menschlichen Eingriff. Das ist genau das, was wir wollen, damit unser Workflow eine E-Mail sendet.
$response = $pmio->addTask($process->getId(), new TaskCreateItem([ data' => neue Aufgabe([ 'attributes' => new TaskAttributes([ name' => 'Kontakt-Formular E-Mail senden', 'type' => 'SERVICE-TASK' ]) ]) ])); $serviceTask = $response->getData();
Wir müssen unserer ServiceTask die Details ihrer Implementierung mitteilen. Wir werden einen der ProcessMaker.IO-Konnektoren verwenden, um die Möglichkeit zu schaffen, E-Mails zu versenden. ProcessMaker.IO hat viele Konnektoren, die Interaktionen mit Diensten von Drittanbietern ermöglichen. Konnektoren für Slack, Mailchimp und Google Apps und mehr sind verfügbar.
Lassen Sie uns zunächst unsere E-Mail-Vorlage erstellen, damit wir unserem Connector mitteilen können, dass er sie verwenden soll.
$template = << Name: {name} Email: {email} Subject: {subject} Message: {message} EOM;
$pmio->addTaskConnector($process->getId(), $serviceTask->getId(), new TaskConnectorCreateItem([ 'data' => new TaskConnector([ 'attributes' => new TaskConnectorAttributes([ 'connector_class' => 'SendMailConnector', 'input_parameters' => [ 'to' => getenv('TARGET_EMAIL_ADDRESS'), 'name' => 'Introduction Form Submission', 'subj' => 'Contact Form Submission from {name}', 'body' => $template ] ]) ]) ]));
Stellen Sie sicher, dass Sie die TARGET_EMAIL_ADDRESS in Ihrer .env-Datei geändert haben. Der Verweis darauf ist im Codebeispiel zu sehen.
Verdrahtung des Ganzen mit Flows
Da wir nun unsere Ereignisse und Aufgaben haben, müssen wir den Pfad vom Startereignis zum Endereignis definieren. Flows definieren diese Pfade. Ein Flow muss eine Quelle und ein Ziel haben. Unser erster Flow beginnt zum Beispiel mit dem Start Event und endet mit der ServiceTask. Ein weiterer Flow bewegt sich von der ServiceTask zu unserem End Event. Lassen Sie uns diese jetzt erstellen.
$pmio->addFlow($process->getId(), new FlowCreateItem([ data' => new Flow([ 'attributes' => new FlowAttributes([ name' => 'Start zur Serviceaufgabe', 'from_object_id' => $startEvent->getId(), 'from_object_type' => $startEvent->getType(), to_object_id' => $serviceTask->getId(), bis_objekt_typ' => $serviceTask->getType() ]) ]) ])); $pmio->addFlow($process->getId(), new FlowCreateItem([ 'data' => new Flow([ 'attributes' => new FlowAttributes([ 'name' => 'Serviceaufgabe zu beenden', 'from_object_id' => $serviceTask->getId(), 'from_object_type' => $serviceTask->getType(), 'to_object_id' => $endEvent->getId(), to_object_type' => $endEvent->getType() ]) ]) ]));
Behalten Sie unsere Prozess-ID und Start-Event-ID für die zukünftige Verwendung
Sobald wir unseren Prozess definiert haben, müssen wir die ID des Prozesses und das Startereignis kennen. Wir werden diese Werte verwenden, wenn wir unsere API mit unseren HTML-Formulardaten aufrufen.
print("Prozess-ID: " . $process->getId() . "n"); print("Start-Event-ID: " . $startEvent->getId() . "n");
Ausführen des erstellten Skripts
Wenn Sie Ihr Skript ausführen, erhalten Sie die endgültige Prozess-ID und die Start-Event-ID
$ php ./einleitung/erstellen.php Prozess-ID: b78fc897-91f8-4f38-b8e3-7d60267d9b67 Start-Ereignis-ID: 271bf2f1-47bb-4616-9edb-3892b5696710
Vorbereiten des HTML-Formulars
Beachten Sie, dass die URL sowohl die Prozess-ID als auch die ID des Startereignisses enthält. Der Webhook-Endpunkt ermöglicht es uns, ein HTTP POST mit Formulardaten zu senden. Diese Formulardaten stellen das Datenmodell dar, wenn der Workflow ausgeführt wird.
In unserem Beispiel verwenden wir jQuery, um das Formular an unseren Webhook zu übermitteln. Wir verwenden einen AJAX-Aufruf. Wenn der Aufruf erfolgreich ist, zeigen wir dem Benutzer eine nette Nachricht an und unser Workflow wird gestartet.
$('#contact-form').on('submit', function(e) { $.ajax({ url: pmio_webook, type: 'POST', data: { name: $('#contactInputName').val(), email: $('#contactInputEmail').val(), subject: $('#contactInputSubject').val(), message: $('#contactInputMessage').val() } }) // Our promise handler on success .done(function() { $('#contact-form button, #contact-form p.alert-danger').remove(); $('#contact-form p.alert-success').removeClass('hide'); }) // And our promise handler on failure .fail(function(xhr, status, err) { $('#contact-form p.alert-danger').removeClass('hide'); }); return false; });
Übermittlung des Formulars
Wenn Sie die HTML-Datei in Ihrem Browser laden, können Sie das Formular abschicken und sehen eine Erfolgsmeldung. Hinter den Kulissen wurde der Webhook für das Startereignis unseres Workflows aufgerufen. Es ist lebendig!
Der Lebenszyklus einer Workflow-Instanz
- Das Token startete beim Start Event Webhook und füllte das Datenmodell auf.
- Das Token wird an die ServiceTask weitergeleitet, die den SendMailConnector ausführt.
- Das Token floss von der Serviceaufgabe zum End-Ereignis und signalisierte damit den Abschluss des Workflows.