Kofax Capture bietet standardmäßig die Möglichkeit, Indexwerte zu einem Dokument in einer Validierungsmaske einzugeben bzw. automatisch erkannte Werte dort zu bestätigen oder zu ändern. Dazu werden alle zu einer Dokumentart definierten Felder angezeigt und man muss jedes Feld einzeln bestätigen/ändern oder einen Wert eingeben.
Dies ist bei automatisch erkannten Werten (wie zum Beispiel bei per OCR ausgelesenen Daten oder bei erkannten Barcodes – siehe dazu auch: „Kofax Capture – Dokumententrennung mit Barcodes“ ) lästig und unnötig, da die Gültigkeit dieser Werte oftmals durch einfache Logiken oder Abgleich gegen vorhandene Datenbestände sichergestellt werden kann.
Zur Implementierung solcher Logiken hatte Kofax Capture bzw. Ascent Capture von Anfang an eine interne Programmiersprache in die Validerungsanwendung eingebaut: Softbridge Basic Language oder kurz: SBL. Dies ist eine zum alten Visual Basic kompatible Scriptingsprache aus den 90er Jahren des letzten Jahrhunderts.
Seit einigen Versionen unterstützt Kofax Capture bei den Validierungsskripten aber auch die Programmiersprachen C# und VB.NET.
Mit der aktuellen Version 10.x von Kofax Capture wurde die Skriptingsprache SBL nun aber als ‚deprecated‘ gekennzeichnet, so dass sie eventuell im nächsten Hauptrelease von Kofax Capture nicht mehr enthalten sein wird.
Obwohl viele Entwickler in den letzten Jahren neue Validierskripte meist mit C# oder VB.NET realisiert haben, gibt es noch sehr viele Kofax Capture Installationen in denen SBL-Skripte aktiv sind. Im Rahmen der Umstellung solcher alten Skripte fiel mir auf, dass die offizielle Kofax Dokumentation zur Programmierung von Validerungsskripten in VB.NET nicht sehr umfangreich ist, und auch die Suche im Internet nur Bruchstücke und Teillösungen liefert. Dies brachte mich auf die Idee, in diesem Artikel kurz die wesentlichen Unterschiede der beiden Entwicklungsumgebungen sowie die wichtigsten bzw. meist genutzten Kofax Capture Events darzustellen.
Ein Vorteil von SBL war und ist noch immer die Out-of-the-box Verfügbarkeit als Bestandteil der Kofax Capture Anwendung. Kurze Validierungslogiken wie Längenprüfungen o.ä. waren damit mit minimalem Aufwand in kürzester Zeit möglich.
Für die Entwicklung von Validierskripten mit VB.NET (und auch C#) muss dagegen eine Visual Studio Version auf einer Kofax Capture Admin-Workstation installiert sein.
Die jeweils nutzbaren Versionen von Visual Studio sind im Kofax Capture Developers Guide der verwendeten Kofax Capture Version aufgelistet. Ich habe für Kofax Capture 10.2 und die folgenden Beispiele Microsoft Visual Basic 2010 verwendet.
Event-Bezeichnungen in SBL und VB.Net
Die folgende Tabelle zeigt die wichtigsten und meist genutzten Events beim Skripten in der Kofax-Validierung. Sie enthält zu jedem Event den internen Namen in der SBL-Umgebung (Functions) und in der neuen VB.Net-Umgebung (Subs).
Unser Beispiel hat auf Dokumentebene zwei Felder definiert: Barcode und Status:
| Event | SBL-Name | VB.Net-Name |
| Stapel öffnen | KfxLoadValidation | Validation_BatchLoading |
| Stapel schliessen | KfxUnloadValidation | Validation_BatchUnloading |
| Dokument öffnen | KfxDocPreProcess | DocPreProcessing |
| Dokument schliessen | KfxDocPostProcess | DocPostProcessing |
| Feld Barcode öffnen | PreBarcode | Barcode_FieldPreProcessing |
| Feld Barcode schliessen | PostBarcode | Barcode_FieldPostProcessing |
| Feld Status öffnen | PreStatus | Status_FieldPreProcessing |
| Feld Status schliessen | PostStatus | Status_FieldPostProcessing |
Ich spare mir hier das entsprechende Stück SBL-Scripting und zeige direkt das passende Stück Scripting in VB.Net.
- In allen Events wurden Messageboxen zum Testen der Ablaufsequenz eingebaut.
- Beim Feld Barcode wurde beispielhaft eine Prüfung der Länge auf 6 Zeichen eingebaut.
1' Class script: Project
2Imports Kofax.AscentCapture.NetScripting
3Imports Kofax.Capture.CaptureModule.InteropServices
4Imports System
5Imports System.Collections.Generic
6Imports System.Text
7
8Namespace ExampleDocClass
9
10 <SuppressFieldEventsOnDocClose(false)> _
11 Public Class ExampleDocClass
12 Inherits DocumentValidationScript
13
14 <IndexFieldVariableAttribute("Barcode")> _
15 Dim WithEvents Barcode As FieldScript
16
17 <IndexFieldVariableAttribute("Status")> _
18 Dim WithEvents Status As FieldScript
19
20 '--------------------------------------
21 Private Sub Barcode_FieldPostProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PostFieldEventArgs) Handles Barcode.FieldPostProcessing
22 Try
23 If Len(Barcode.IndexField.Value) <> 6 Then
24 Throw New Kofax.AscentCapture.NetScripting.ValidationErrorException("Barcode nur 6-stellig!", Barcode.IndexField)
25 End If
26 Finally
27 End Try
28 End Sub
29
30 '--------------------------------------
31 Private Sub Barcode_FieldPreProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PreFieldEventArgs) Handles Barcode.FieldPreProcessing
32 MsgBox("Barcode_FieldPreProcessing")
33 'This will skip the field
34 'e.SkipMode = PreFieldEventArgs.SkipModeEnum.SaveAndSkipField
35 End Sub
36
37 '--------------------------------------
38 Private Sub Status_FieldPostProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PostFieldEventArgs) Handles Status.FieldPostProcessing
39 MsgBox(Status.IndexField.Value)
40 End Sub
41
42 '--------------------------------------
43 Private Sub Status_FieldPreProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PreFieldEventArgs) Handles Status.FieldPreProcessing
44 MsgBox("Status_FieldPreProcessing")
45 'This will skip the field **********************
46 'e.SkipMode = PreFieldEventArgs.SkipModeEnum.SaveAndSkipField
47 End Sub
48
49 '--------------------------------------
50 Private Sub DocPostProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PostDocumentEventArgs) Handles Me.DocumentPostProcessing
51 MsgBox("DocPostProsessing")
52 End Sub
53
54 '--------------------------------------
55 Private Sub DocPreProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PreDocumentEventArgs) Handles Me.DocumentPreProcessing
56 MsgBox("DocPreProsessing")
57 'This will SaveAndSkip the document **********************
58 'e.SaveAndSkip = True
59 End Sub
60
61 '--------------------------------------
62 Private Sub Validation_BatchLoading(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.BatchEventArgs) Handles Me.BatchLoading
63 MsgBox("Validation_BatchLoading")
64 End Sub
65
66 '--------------------------------------
67 Private Sub Validation_BatchUnloading(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.BatchEventArgs) Handles Me.BatchUnloading
68 MsgBox("Validation_BatchUnloading")
69 End Sub
70
71 Sub New(ByVal bIsValidation As Boolean, ByVal strUserID As String, ByVal strLocaleName As String)
72 MyBase.New(bIsValidation, strUserID, strLocaleName)
73 End Sub
74
75 End Class
76End Namespace
Schließlich benötigen wir für VB.Net noch die oft genutzte SaveAndSkipField- und SaveAndSkipDocument- Funktionalität zum Überspringen von Feldern oder ganzen Dokumenten. Dies ist im obigen Beispielcode als Kommentar hinterlegt:
- Für Felder im Event Feldname_FieldPreProcessing:
e.SkipMode = PreFieldEventArgs.SkipModeEnum.SaveAndSkipField - Für Dokumente im Event DocPreProcessing:
e.SaveAndSkip = True
Detaillierte Informationen zum Kofax Capture .NET Scripting finden Sie in der ‚Kofax Capture API Reference‘, die Bestandteil der Dokumentation ist.
Weitere Blog-Artikel über KC und KTM:
CenterDevice und Kofax Capture – Integration out of the box
Unterstützung eines automatisierten Kündigungsprozesses mit Kofax KTM
Kofax Transformation Modules (KTM): ‘Freiformerkennung’ für handschriftliche Nummern
Kofax Capture – Dokumententrennung mit Barcodes
KTM im Versicherungseinsatz: Heller, grauer und dunkler Posteingang
Dokumentenklassifizierung mit Kofax Transformation Modules (KTM)
Kofax Transformation Modules – Formatlokatoren und dynamische reguläre Ausdrücke – Teil 2
Kofax Transformation Modules – Formatlokatoren und dynamische reguläre Ausdrücke
Blog-Autor*in
Jürgen Voss
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.