Beliebte Suchanfragen

Cloud Native

DevOps

IT-Security

Agile Methoden

Java

|
//

Robotic Process Automation mit Kofax Kapow™

24.4.2017 | 10 Minuten Lesezeit

Kapow Software wurde 2013 von Kofax übernommen und passt perfekt in dessen First Mile™ Strategie. Kofax Kapow stellt eine Plattform für die Verabeitung von Daten von strukturierten oder unstrukturierten Datenbanken, Dateien, E-Mail-Systemen, Webseiten, Portalen und sogar älteren Mainframe-Systemen oder Terminal-Emulationen bereit. Es erledigt die automatische Extraktion und Transformation von Daten aus Excel-, XML-, XLS- und PDF-Dateien sowie aus RSS-Feeds und APIs, die auf SOAP, REST, XML oder JSON basieren.

Design Studio

Mit dem visuellen Editor Design Studio kann man automatisierte Workflows per schnellem Point-and-Click-Verfahren erstellen und somit die gewünschten Applikationen und Datenquellen integrieren. Dies wird mit der Kapow Synthetic API™ Technologie erreicht. Die Robotic Synthetic API kapselt bestehende Applikationen oder emuliert APIs ohne codieren zu müssen. Ein solcher automatisierter Workflow wird in Kofax Kapow Robot genannt. Entworfene Robots können als REST Service oder über einen Java- oder .NET-API-Endpunkt angesprochen werden.

Management Console

Erstellte Robots können vom Design Studio in ein zentrales Repository geladen werden und werden von der Management Console verwaltet. Die Management Console ist darüber hinaus verantwortlich für Lastverteilung, Failover und Monitoring des RoboServers.

RoboServer

RoboServer ist für die Ausführung der Robots verantwortlich. Die Robots können auf Abruf, über Java oder C# API, zugeschnittenem REST Service oder als Kapplet gestartet werden.

Kapplets und die KappZone

Ein Kapplet ist eine Web-Applikation, die eine benutzerfreundliche Schnittstelle zu den Robots bereitstellt, und es kann an die Ansprüche des Kunden angepasst werden. Die Kapplet Anwender haben Zugriff auf ihre eigene KappZone mit den Kapplets, die vom Kapplet Administrator zugänglich gemacht wurden.

Übersicht

Der Anwendungsfall

Die codecentric Webseite hat eine Unterseite „Team“, auf der viele von uns aufgelistet werden und die jede Kollegin und jeden Kollegen mit ihrer beziehungsweise seiner Profilseite verlinkt. Diese Profilseite gibt Ausschluss über die jeweilige Kollegin oder den jeweiligen Kollegen und weist deren oder dessen Schwerpunkte auf. Wäre es notwendig, nach einer Kollegin oder einem Kollegen mit einem speziellen Schwerpunkt zu suchen, müsste man sich durch alle Profilseiten klicken und die Schwerpunkte unter die Lupe nehmen. Zugegebenermaßen würde man das eigentlich über einen firmeninternen Slack-Channel bewerkstelligen, aber wir wollen das mal außer Acht lassen. Ein Robot soll diese Aufgabe übernehmen und über alle Profilseiten gehen, die Informationen extrahieren und für den Fall, dass er ein passendes Profil findet eine E-Mail versenden:

Erstellen eines Robots für unseren Anwendungsfall

Design Studio

Das Design Studio ist der visuelle Editor mit dem wir unseren Robot erstellen werden. Er bietet verschiedene Views, um die Erstellung des Robots zu bewerkstelligen.

Project View

Die Project View gibt eine Übersicht über die Robots, Typen und andere Ressourcen.

Robot View

Die Robot View zeigt die für einen Robot definierten Schritte an. Man kann zwischen dem Design- und Debug-Modus für das spätere Debuggen umschalten. Hier werden die Schritte und Aktionen des Workflows definiert.

Step View

Die Step View gibt Aufschluss über einen einzelnen Schritt und zeigt all seine einstellbaren Eigenschaften an, hauptsächlich aber die dem Schritt zu Grunde liegende Aktion.

Browser View

Wenn ein einzelner Schritt eine Webseite lädt, wird deren Inhalt in der Browser View dargestellt.

Source View

Der Quelltext der zugehörigen Webseite wird in der Source View angezeigt.

Variables View

Die definierten Variablen und ihre aktuellen Werte des Robots werden in der Variables View aufgelistet.

Variablen und Typen

Bevor man einen Robot erstellt sollte man sich überlegen, welche Daten er extrahieren soll. Diese extrahierten Werte müssen in Variablen persistiert werden. Es gibt bereits Typen wie Short Text, Number, Binary, Image, JSON, Password und so weiter. Diese Typen werden simple Typen genannt. Man kann aber auch eigene Typen erstellen, die aus einem oder mehreren Attributen bestehen die jeweils auf den vorhandenen simplen Typen basieren. Man spricht dann von komplexen Typen. Eingabe- oder Ausgabevariablen des Robots müssen immer auf einem komplexen Typen basieren.

Erstellen eines neuen Projekts

In der Project View erstellen wir ein neues Projekt mit Namen Blog.

Danach erstellen wir zwei neue Ordner mit Namen Robots und Types, um so zwischen unseren Robots und Typen zu unterscheiden. Nun haben wir die folgende Struktur:

Definiern der Typen

Zuerst wollen wir einen Typen Blog erstellen, und er soll die folgende Attribute haben:

Attribute NameAttribute Type
NameShort Text
TitleShort Text
TeamShort Text
EmailShort Text
LinkShort Text
TitleLong Text
ImageImage

Schließlich brauchen wir einen Typen für eine Eingabevariable. Wenn man einen Typen erstellt, kann man Attributen einen Default-Wert geben. Das ist nützlich für das Debuggen eines Robots innerhalb von Design Studio.

Attribute NameAttribute TypeDefault Value
SkillSetShort TextKofax

Die Typen werden definiert, indem man den Ordner Types selektiert, rechtsklickt und dann New » Type auswählt.

Erstellen eines neuen Robots

Nun ist es an der Zeit, unseren Robot zu erstellen und zu entwickeln. Wir wählen den Ordner Robots in unserem Projekt aus, rechtsklicken und wählen dann New » Robot aus.

Wir beginnen nun zunächst mir einer leeren Robot View.

Das Dreieck am Anfang markiert den Anfang des Robots und der gekreuzte Kreis das Ende eines Zweiges.

Zweige, Robot Status und Ausführungsablauf

Das folgende Beispiel zeigt einen Robot, der linear ausgeführt wird, beginnend auf der ganz linken Seite und danach sequentiell Schritt für Schritt abarbeitend, bis er der Robot stoppt.

In jedem Schritt gibt es verschiedene Elemente, die den Status des Robots ausmachen:

  • aktuell geöffnete Anwendungsfenster oder Frames
  • Variablen
  • Cookies, Authentifizierungen und andere

Das folgende Beispiel zeigt einen nicht linearen Robot mit zwei Verzweigungen:

Der Robot führt jeden Zweig nacheinander von oben nach unten aus. Jedes Mal wenn der Robot einen Endpunkt erreicht, wird die Ausführung auf dem nächsten Zweig fortgesetzt.

Jedes Mal, wenn ein neuer Zweig ausgeführt wird, setzt der Robot seinen Status zurück. Wenn in Step 1 unseres Beispiels eine Webseite geladen wurde, dann wird bei Step 6 und Step 10 auf den Status von nach Step 1 zurückgegangen und die Seite muss nicht erneut geladen werden.

Wenn in Step 5, Step 9 and Step 13 dieselbe Aktion ausgeführt wird, kann man Schritte zusammenführen.

Und es ist möglich komplexe Robots zu bauen.

Der Ausführungsablauf ist wie folgt:
Step 1 » Step 2 » Step 3 » Step 4 » Step 5 » End Step
Step 6 » Step 7 » Step 8 » Step 5 » End Step
Step 8 » Step 5 » End Step
Step 9 » Step 10 » Step 11 » Step 5 » End Step

Sobald die Ausführung einen Endpunkt erreicht, wird die Ausführung vom nächsten Zweig des jüngst erreichten Verzweigungspunkts fortgesetzt.

For Each Schleifen

For Each Schleifen sind Ausnahmen zu der zuvor aufgestellten Regel. Diese Schleifen umfassen die folgenden Aktionen:

  • For Each Tag
  • For Each Window
  • For Each URL and other

Wenn der Endpunkt erreicht wurde, geht die Ausführung nicht zum nächsten Zweig, sondern zur nächsten Iteration der Schleife. Erst wenn es keine weiteren Iterationen mehr gibt wird die Ausführung auf dem nächsten Zweig fortfahren.

Sobald die Ausführung einen Endpunkt erreicht, wird die Ausführung vom nächsten Zweig des jüngst erreichten Verzweigungspunkts oder von der nächsten Iteration der jüngst erreichten Schleife fortgesetzt.

Definieren der Variablen

In der Variables View müssen wir unsere Variablen definieren, um Daten während der späteren Schritte persistieren zu können.

Variables
Variable NameAttribute TypeDescription
skillShort TextEine temporäre Variable
blogBlogVariable zum Persistieren der extrahierten Daten
skillSetLong TextEine temporaräre Variable zum Konkatenieren der Skills (global)
inputInputUnser Eingabe-Skill nach dem der Robot sucht

Globale Variablen persistieren ihre Werte während der ganzen Ausführung eines Robots.

Definieren der Schritte

Nach dem Konzept der Zweige, der Status und des Ausführungsablaufs sind wir bereit, unsere Schritte zu definieren, um den Workflow zu erstellen.  Durch Rechtsklicken auf den Anfang des Robots and dann Auswählen Insert Step After » Action Step erstellen wir unseren ersten Schritt.

Jeder Schritt braucht eine Aktion, die er ausführen soll. Zu Beginn ist der Schritt unbenannt und undefiniert.

Load Page Schritt

Die Aktion des Schritts wird in der Step View definiert:

Das Ausrufezeichen zeigt an, dass eine Aktion für den Schritt auszuwählen ist. Wir wählen Load Page.

Nach dem Einsetzen der URL, von der wir die Seite laden wollen haben wir schon unseren ersten Schritt fertig gestellt. Wenn wir nun auf den Schritt hinter diesem klicken, in unserem Fall ist das der Endpunkt, wird der  Load Page Schritt ausgeführt. In der Browser View sieht man dann den Hinweis Executing… während die Seite geladen wird. Nachdem die Seite geladen wurde, wird sie in der Browser View angezeigt.

For Each Tag Path Schritt

Auf dieser Seite sind alle Mitarbeiterinnen und Mitarbeiter mit Fotos aufgelistet, und die jeweiligen Profilseiten sind verlinkt. Wir wollen über alle Mitarbeiterinnen und Mitarbeiter eine Schleife bilden. Daher fügen wir nach dem Load Page Schritt einen neuen Schritt ein und setzen die Aktion auf For Each Tag Path.

Auf der Finders Tab definieren wir wo gesucht werden soll. In unserem Fall:

Und auf der Action Tab definieren wir die Aktion, die innerhalb des gefundenen Tags, dessen Pfad wir zuvor auf der Finders Tab definiert haben, ausgeführt werden soll.

Wenn wir erneut auf den Schritt nach diesem Schritt klicken können wir das Iterieren durch das Klicken auf die Icons zur nächsten oder vorherigen Iteration testen.

In der Browser View wird das Bild der aktuellen Iteration durch einen blauen Rahmen markiert.

Klickt man auf nächste Iteration:

Extraktion der Daten

Im nächsten Schritt wollen wir Daten extrahieren und diese unserer Variable blog zuweisen. Um das zu bewerkstelligen, können wir die Source View nutzen. Wir selektieren das Tag, an dem wir interessiert sind und klicken darauf.

Dann rechtsklicken wir und wählen die Aktion Extract » Attribute, wählen itemref und weisen es unserer Variable blog.Team zu.

Dasselbe machen wir in einem weiteren Schritt und extrahieren den Link der Profilseite.

Laden der Profilseite

Den extrahierten Wert des Links haben wir in der Variablen blog.Link persistiert. Wir erstellen einen neuen Schritt und laden die Seite mit diesem Link. Wir können auch eine Variable für die URL der Aktion nutzen:

Wenn wir hinter diesen Schritt klicken, wird die Load Page Action der Profilseite ausgeführt und die Seite wird geladen:

Extrahieren von weiteren Daten

Wir wollen weitere Daten wie das Bild, den Namen, Titel und die E-Mail-Adresse extrahieren. Wir bewerkstelligen das durch Rechtsklicken in der  Source View und Selektieren was extrahiert werden soll und welcher Variable wir es zuweisen wollen.

Konverter

Die E-Mail-Adresse ist im Tag-Attribut href und sein Wert hat das Präfix mailto:. Wir können einen Konverter nutzen, um das Präfix zu beseitigen und die E-Mail-Adresse abzugreifen.

Auf der Action Tab wird ein Konverter definiert:

In unserem Fall nutzen wir einen Replace Text Konverter:

Zu diesem Zeitpunkt sieht unser Robot wie folgt aus:

Schleife über die Schwerpunkte

Die Schwerpunkte sind auf der Seite aufgelistet, und wenn wir das erste List-Objekt in der Browser View anklicken, können wir danach einen Schritt mit der Aktion Loop For Each Tag erstellen und so eine Schleife über die Liste der Schwerpunkte bilden.

Dies ist nun unsere zweite Schleife und wir extrahieren den Text jedes Schwerpunkts in einem folgenden Schritt. Wir weisen den Wert unserer temporären Variable skill zu. Danach wollen wir den Schwerpunk zu unserer globalen Variable skillSet hinzufügen und so alle Schwerpunkte auf der Profilseite sammeln. Das geschieht in einem weiteren Schritt und der Aktion Assign Variable.

Es ist eine einfache Konkatenation der einzelnen Schwerpunkte in der temporären Variablen skill, die wir der globalen Variablen skillSet zuweisen.

So sieht unsere zweite Schleife aus:

Am Ende der Schleife haben wir alle relevanten Daten in unserer Variable blog gesammelt und zusätzlich alle Schwerpunkte einer Mitarbeiterin oder eines Mitarbeiters in der globalen Variable skillSet. Folglich müssen wir einen Zweig vor der zweiten Schleife erstellen.

Erstellen eines Zweigs

Zunächst wählen wir den Schritt vor der zweiten Schleife aus, rechtslicken und wählen danach Create Branch.

In diesem Zweig müssen wir prüfen, ob der Wert unserer Eingabevariable mit den gesammelten Schwerpunkten in unserer globalen Variable skillSet übereinstimmt. Ist das der Fall wollen wir eine E-Mail versenden. Andernfalls setzen wir die weitere Verarbeitung aus. Damit geht der Ausführungsablauf zur nächsten Iteration der ersten Schleife.

Test Value

Das Prüfen, ob die Schwerpunkte mit dem Wert der Eingabevariable übereinstimmen wird mit einem neuen Schritt mit der Aktion Test Value bewerkstelligt:

Wenn die Bedingung nicht erfüllt wird, werden die folgende Schritte übersprungen.

Versenden der E-Mail

An diesem Punkt haben wir definitiv eine Mitarbeiterin oder einen Mitarbeiter gefunden nach deren oder dessen Skill wir gesucht haben. Bevor wir eine E-Mail versenden, wollen wir den Wert der Variable skillSet unserer Variablen blog.SkillSet zuweisen, und wir wollen ein wenig puristisch sein und ein mögliches Semikolon am Ende entfernen:

Zu guter Letzt brauchen wir einen Schritt zum Versenden der E-Mail. Auf der Message Tab müssen wir die Adressen für die E-Mail, Betreff und den Inhalt der E-Mail selber definieren. Man kann Text und Variablen konkatenieren und kombinieren. Schließlich kann man noch den Message Type – Text oder HTML festlegen.

Auf der Server Tab definiert man die Credentials zum Versenden der E-Mail.

Auf der Attachment Tab definiert man die Anhänge für die E-Mail. In unserem Fall wollen wir das Bild der Mitarbeiterin oder des Mitarbeiters anhängen.

Unsere zweite Schleife sieht wie folgt aus:

Da unsere Variable skillSet global ist, müssen wir sie zu Beginn der zweiten Schleife zurücksetzen. Wir nutzen einen Schritt mit der Aktion Assign Value action and weisen einen Leer-String der Variablen zu.

Gruppieren von Schritten

Es ist möglich, Schritte zu selektieren und zu gruppieren. Dies ist ein praktischer Weg, den Robot zu strukturieren. Die Schritte können ein- oder ausgeblendet werden:

Fehlerbehandlung

Jeder Schritt hat eine Error Handling Tab. Fehler werden per Default geloggt und es wird eine API Exception geschmissen. Im Fall, dass eine Mitarbeiterin oder ein Mitarbeiter keine Schwerpunkte aufgelistet hat – und ich bin auf dieses Problem gestoßen – wird eine Exception geschmissen, und die Verarbeitung des Robots wird beendet. Daher kann man entscheiden, keine API Exception zu schmeißen und die weiteren Schritte zu überspringen. In diesem Fall geht der Ausführungsablauf zurück zur nächsten Iteration der ersten Schleife.

Endgültige Robot View

Und das ist, wie unser Robot mit gruppierten Extraktionsschritten endgültig aussieht.

Und es funktioniert!

Anmerkung

Ich muss zugeben, dass dieser Robot nur ein Robot ist, um zu demonstrieren, wie man mit Kofax Kapow arbeitet. Normalerweise würde ein solcher Robot einmal in der Woche laufen, die Daten aller Mitarbeiterinnen und Mitarbeiter abgreifen und diese in einer Datenbank ablegen. Das Suchen nach den Skills würde dann direkt gegen die Datenbank gehen.

|

Beitrag teilen

Gefällt mir

0

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//

Gemeinsam bessere Projekte umsetzen.

Wir helfen deinem Unternehmen.

Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.

Hilf uns, noch besser zu werden.

Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.