Robotic Process Automation mit Kofax Kapow™

Keine Kommentare

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.

 

Design Studio

 

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.

KappZone

 

Übersicht

Kofax Kapow Overview

 

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:

Email content

 

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.

Project View

 

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.

Robot View

 

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.

Step View

 

Browser View

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

Browser View

 

Source View

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

Source View

 

Variables View

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

Variables View

 

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.

Create new project

 

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:

My Projects

 

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.

My Projects

 

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.

Create new robot

 

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

Empty 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.

Linear robot

 

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:

Non-linear robot

 

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.

Robot with joined steps

 

Und es ist möglich komplexe Robots zu bauen.

Complex robot

 

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

For Each Loops

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.

Defining variables

 

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.

Defining steps

 

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

Unnamed step

 

Load Page Schritt

Die Aktion des Schritts wird in der Step View definiert:

Select an action for step

 

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

Load Page step

 

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.

Browser View

 

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:

Finders Tab

 

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.

Action Tab

 

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.

Iterate through tags

 

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

Blue frame iteration 1

 

Klickt man auf nächste Iteration:

Blue frame iteration 2

 

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.

HTML Source View

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

Extract Attribute

 

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:

Load profile page from variable

 

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

Profile page sbl

 

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:

Extract Tag Attribute

 

In unserem Fall nutzen wir einen Replace Text Konverter:

Replace Text Configuration

 

Zu diesem Zeitpunkt sieht unser Robot wie folgt aus:

Robot definition

 

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.

Skills on profile page

 

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.

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:

Robot definition second loop

 

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:

Test Value

 

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:

Assign Variable with code

 

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.

Send Email Message Tab

 

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

Send Email Server Tab

 

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.

Send Email Attachment Tab

 

Unsere zweite Schleife sieht wie folgt aus:

Robot definition second loop and branch

 

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:

Grouping steps

 

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.

Final robot deinition

 

Und es funktioniert!

Email input folder

 

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.

Stefan Blank

Ich blicke auf eine über 25-jährige Erfahrung im Bereich Dokumenten- und Input-Management zurück. Als Kofax Certified Capture Consultant biete ich eine umfassende Kenntnis der Kofax-Produktpalette und -Technologien. Schwerpunkt meiner Tätigkeit ist dabei die Ermittlung und Bewertung von Kundenanforderungen und die Verantwortung für Konzeption und Realisierung basierend auf den Möglichkeiten des Standard-Software-Produkts (Customising und Software-Entwicklung).

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.