Validation tutorial

This tutorial demonstrates how to create a plug-in that validate fields using Microsoft Visual Basic 6.0. In this tutorial you will:

  • Create a DLL that subscribes to a ReadSoft Invoices event.
  • Connect the plug-in to ReadSoft Invoices via Eilocal.ini.

Create an ActiveX DLL project

  1. Create a new ActiveX DLL project using Microsoft Visual Basic 6.0.



  2. Rename the project to "myValidation" and rename the default class module to "clsServer". You will use these names later when you add the plug-in to Eilocal.ini.
  3. Add a reference to the ReadSoft Invoices type library.





The class code

The myValidation plug-in has these functions:

  • Connect: Connects to a ReadSoft Invoices module and subscribes to the AppStarted event in the Manager module.
  • OnInvoiceComplete: Contains code for validating invoice fields.
  • ConfigurePlugin: Determines what happens when the Configure button is clicked in the Extension programs dialog in the Manager module.
  • Disconnect: Releases memory allocated by the plug-in.

  1. Copy and paste the code below into the clsServer module.s

    Option Explicit
    
    ' Declare a reference to the Application object
    
    Private objEHApplication As EHICOM.Application
    
     
    
    Public Function Connect(objEHIApp As Object, sIniFile As String, sIniSection As String) As Long
    
        Set objEHApplication = objEHIApp   ' Save the application object for future references
    
        ' Setup the subscriptions
    
        Select Case objEHApplication.ModuleType
    
            Case eiManager
    
            Case eiScan
    
            Case eiInterpret
    
                objEHApplication.Subscribe Me, "InvoiceComplete", "OnInvoiceComplete"
    
            Case eiVerify
    
                objEHApplication.Subscribe Me, "InvoiceComplete", "OnInvoiceComplete"
    
            Case eiTransfer
    
            Case eiOptimizer
    
       End Select
    
       Connect = evtOK
    
    End Function
    
     
    
    Public Function ConfigurePlugin() As Long
    
    ' Called by clicking the Configure button
    
        MsgBox "No configuration is available for this plug-in"
    
        ConfigurePlugin = evtOK
    
    End Function
    
     
    
    Public Function OnInvoiceComplete() As Long
    
       
    
        On Error GoTo OnInvoiceCompleteException
    
       
    
        ' Get a reference to the current invoice,
    
        ' since we will be using that object frequently.
    
        Dim objInvoice As Invoice
    
        Set objInvoice = objEHApplication.CurrentInvoice
    
       
    
        ' Get references to all the fields you need.
    
        ' Note that the following lines might throw an exception
    
        ' (caught by the error handler) if the fields do not exist.
    
        Dim objNetField As InvoiceField, objVatField As InvoiceField, objTotalField As InvoiceField
    
        Set objNetField = objInvoice.Fields("Net_Amount")
    
        Set objVatField = objInvoice.Fields("VAT_Amount")
    
        Set objTotalField = objInvoice.Fields("Total_Amount")
    
        ' Validate net + vat against total
    
        ' We use the "Val" VB function to convert the string value to a numeric before
    
        ' performing any arithmetic operations.
    
        ' This function requires decimal char to be a point (.)
    
       
    
        ' A better way would be to use the DisplayString property of the field,
    
        ' and then use the information found in Eiglobal.ini (DisplaySettings)
    
        ' to convert the string correctly.
    
        If (Val(objNetField.Value) + Val(objVatField.Value)) <> Val(objTotalField.Value) Then
    
            ' Total does not match net + vat. Warn the user if in Verify.
    
            If objEHApplication.ModuleType = eiVerify Then
    
                MsgBox "Balance not zero, captured total does not match calculated total"
    
            End If
    
            ' Set validation error on one of the fields (we do not know which one is incorrect).
    
            objTotalField.Status = eiFieldValidationError
    
        End If
    
       
    
       ' Return evtOK
    
       OnInvoiceComplete = evtOK
    
       Exit Function
    
     
    
    ' Error handler
    
    OnInvoiceCompleteException:
    
        ' Only display a message if in Verify.
    
        If objEHApplication.ModuleType = eiVerify Then
    
            MsgBox "Internal error:" & vbNewLine & Err.Description
    
        End If
    
        OnInvoiceComplete = evtError
    
    End Function
    
     
    
    Public Function Disconnect(objEHIApp As Object) As Long
    
        ' Release memory
    
        Set objEHApplication = Nothing
    
        ' Return evtOK
    
        Disconnect = evtOK
    
    End Function
    
    

  2. Save the project.
  3. Build the DLL and copy it to ReadSoft Invoices's Bin folder.

Add the plug-in to Eilocal.ini

In order to use the plug-in, it must be specified in Eilocal.ini. The sample below shows a typical Manager plug-in section with the HelloWorld plug-in highlighted.

Manager

[Plugins::eimngr]

Plugin1=Common

Plugin2=Manager

Plugin3=DBAdmin

Plugin4=myValidation

[eimngr::Common]

Name=Common Dialogs

Type=COM

SupportIDispatch=TRUE

Classname=ReadSoft.INVOICES.GUI.Extensions.Plugin

[eimngr::Manager]

Name=Manager Dialogs

Type=COM

SupportIDispatch=TRUE

Classname=eimngrdlg.cserver

[eimngr::myValidation]

Name=myValidation

Type=COM

SupportIDispatch=TRUE

Classname=myValidation.clsServer

After you save Eilocal.ini, you can run an Interpret or Verify job to see the results.

Note Microsoft Visual Basic automatically registers DLLs when you make them from the File menu. If you want to use a plug-in on another computer, you must register the DLL on that computer.

Related topics

Migrating Kofax ReadSoft Invoices customizations to recent operating systems

Customizing Kofax ReadSoft Invoices