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
Weitere Beiträge
von Jürgen Voss
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
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.
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.