Kofax Capture Validierungsskripte – Von SBL zu VB.NET für Dummies

Keine Kommentare

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:

EventSBL-NameVB.Net-Name
Stapel öffnenKfxLoadValidationValidation_BatchLoading
Stapel schliessenKfxUnloadValidationValidation_BatchUnloading
Dokument öffnenKfxDocPreProcessDocPreProcessing
Dokument schliessenKfxDocPostProcessDocPostProcessing
Feld Barcode öffnenPreBarcodeBarcode_FieldPreProcessing
Feld Barcode schliessenPostBarcodeBarcode_FieldPostProcessing
Feld Status öffnenPreStatusStatus_FieldPreProcessing
Feld Status schliessenPostStatusStatus_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.
' Class script: Project
Imports Kofax.AscentCapture.NetScripting
Imports Kofax.Capture.CaptureModule.InteropServices
Imports System
Imports System.Collections.Generic
Imports System.Text

Namespace ExampleDocClass
	
   <SuppressFieldEventsOnDocClose(false)>  _
   Public Class ExampleDocClass
	Inherits DocumentValidationScript
		
	<IndexFieldVariableAttribute("Barcode")> _
	Dim WithEvents Barcode As FieldScript
		
	<IndexFieldVariableAttribute("Status")> _
	Dim WithEvents Status As FieldScript

	'--------------------------------------
        Private Sub Barcode_FieldPostProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PostFieldEventArgs) Handles Barcode.FieldPostProcessing
            Try
                If Len(Barcode.IndexField.Value) <> 6 Then
                    Throw New Kofax.AscentCapture.NetScripting.ValidationErrorException("Barcode nur 6-stellig!", Barcode.IndexField)
                End If
            Finally
            End Try
        End Sub

	'--------------------------------------
        Private Sub Barcode_FieldPreProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PreFieldEventArgs) Handles Barcode.FieldPreProcessing
            MsgBox("Barcode_FieldPreProcessing")
            'This will skip the field
            'e.SkipMode = PreFieldEventArgs.SkipModeEnum.SaveAndSkipField
        End Sub

	'--------------------------------------
        Private Sub Status_FieldPostProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PostFieldEventArgs) Handles Status.FieldPostProcessing
            MsgBox(Status.IndexField.Value)
        End Sub

	'--------------------------------------
        Private Sub Status_FieldPreProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PreFieldEventArgs) Handles Status.FieldPreProcessing
            MsgBox("Status_FieldPreProcessing")
            'This will skip the field **********************
            'e.SkipMode = PreFieldEventArgs.SkipModeEnum.SaveAndSkipField
        End Sub

	'--------------------------------------
        Private Sub DocPostProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PostDocumentEventArgs) Handles Me.DocumentPostProcessing
            MsgBox("DocPostProsessing")
        End Sub

	'--------------------------------------
        Private Sub DocPreProcessing(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.PreDocumentEventArgs) Handles Me.DocumentPreProcessing
            MsgBox("DocPreProsessing")
            'This will SaveAndSkip the document **********************
            'e.SaveAndSkip = True
        End Sub

	'--------------------------------------
        Private Sub Validation_BatchLoading(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.BatchEventArgs) Handles Me.BatchLoading
            MsgBox("Validation_BatchLoading")
        End Sub

	'--------------------------------------
        Private Sub Validation_BatchUnloading(ByVal sender As Object, ByVal e As Kofax.AscentCapture.NetScripting.BatchEventArgs) Handles Me.BatchUnloading
            MsgBox("Validation_BatchUnloading")
        End Sub

	Sub New(ByVal bIsValidation As Boolean, ByVal strUserID As String, ByVal strLocaleName As String)
	    MyBase.New(bIsValidation, strUserID, strLocaleName)
	End Sub
	
   End Class
End 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:

Kofax Transformation Modules: SEPA-Mandate und handschriftliche Ergänzungen – oder: wer hat etwas auf mein Formular gekritzelt?

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

IBM Content Collector for SAP (formerly known as IBM CommonStore for SAP), Kofax Capture 10 und das IBM CommonStore Release Skript

Jürgen Voss

Jürgen Voss unterstützt unsere Kunden bei der Erfassung von Eingangsdokumenten, deren Klassifikation samt Datenextraktion und anschließendem Starten der Geschäftsprozesse.

Die erfassten Dokumente werden dabei in Dokumentenmanagement-systemen wie CenterDevice oder Archivsystemen sicher abgelegt. Dazu zählt auch die E-Mail-Archivierung und die Ablage über die SAP-Archivierungsschnittstelle ArchiveLink.

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.