Table fields – Kofax DOKuStar Validation User Manual
Page 26
DOKuStar Validation for Ascent Capture
Page
• 22
Table Fields
Tables require additional features, because they are fields that are made up of rows, columns, and cells.
As an example, imagine a table in your document that has (among others) three columns
Quantity
,
SinglePrice
and
TotalPrice
. Whenever the user corrects a cell in the
Quantity
or
SinglePrice
column, the corresponding total price is recalculated (by:
Quantity
times
SinglePrice
) and compared
against the value in the
TotalPrice
column. If the values are different, the user shall decide whether to override
the total amount value or not.
Solution:
Option Explicit
Dim WithEvents Table As FieldType
Private Sub Application_OnProjectLoaded(ByVal App As Application)
Set Table = App.Project.DataSet.Schema.DocumentTypes("Invoice").FieldTypes("Table")
End Sub
Private Function Table_OnFieldChanging(ByVal Field As Field, ByVal SubField As Field, _
ByVal VerifyEventArgs As VerifyEventArgs) As Boolean
Dim t As TableField
Dim row As TableRow
Dim calculatedTotalPrice As Double
Dim totalPrice As Double
Table_OnFieldChanging = True
If SubField.Name = "Quantity" Or SubField.Name = "SinglePrice" Then
Set t = Field
Set row = t.row(SubField)
totalPrice = Val(row("TotalPrice").Value)
calculatedTotalPrice = Val(row("Quantity").Value) * Val(row("SinglePrice").Value)
If calculatedTotalPrice <> totalPrice Then
If MsgBox("Calculated total price: " & calculatedTotalPrice & vbCrLf & _
"Total price from column: " & totalPrice & vbCrLf & _
"Override?", vbYesNo) = vbYes Then
row("TotalPrice").Value = calculatedTotalPrice
Else
Table_OnFieldChanging = False
End If
End If
End If
End Function
Let us look at the interesting parts of the code:
First of all, a variable (
Table
above) is defined as for any other field and set accordingly:
Dim WithEvents Table As FieldType
Private Sub Application_OnProjectLoaded(ByVal App As Application)
Set Table = App.Project.DataSet.Schema.DocumentTypes("Invoice").FieldTypes("Table")
End Sub
This code expects that there is an Ascent Capture index field named
Table
in the document class definition (as
for any other field).
Along with the event, the field and the sub-field come as parameters. The
Name
property of the sub-field delivers
the column name (as defined in the DOKuStar project), so you can ask if the cell is in one of the columns in
question: