How many times do you not want to count the number of documents you process, perhaps even a few different counters? Today I was working on a Lotusscript agent where I wanted to keep track of the total number of documents processed, as well as individual counters for a few different types of documents. Normally I would have used a handful of variables, but I realized that I could use lists for this.
This is what my old code would look like:
Dim cnt As Long
Dim totcnt As Long
Dim type1cnt as Long
Dim type2cnt as Long
Set view = claimdb.GetView("(LookupView)")
Set col = view.AllEntries
view.AutoUpdate = False
totcnt = col.Count
cnt = 0
Set entry = col.GetLastEntry()
Do While Not entry Is Nothing
cnt = cnt + 1
' Do stuff here
If entry.ColumnValues(0) = "Type1" Then
type1cnt = type1cnt + 1
ElseIf entry.ColumnValues(0) = "Type2" Then
type2cnt = type2cnt + 1
End If
Print "Processed " & cnt & " of " & totcnt
Set entry = col.GetPrevEntry(entry)
Loop
My new code would look like this:
Dim cnt List As Long
Dim doctype As String
Set view = claimdb.GetView("(LookupLargeLossSummary)")
Set col = view.AllEntries
view.AutoUpdate = False
cnt("Total") = col.Count
cnt("Processed") = 0
Set entry = col.GetLastEntry()
Do While Not entry Is Nothing
cnt("Processed") = cnt("Processed") + 1
' Do stuff here
doctype = entry.ColumnValues(0)
cnt(doctype) = cnt(doctype) + 1
Print "Processed " & cnt("Processed") & " of " & cnt("Total")
Set entry = col.GetPrevEntry(entry)
Loop
Note that the list tag is case sensitive. The example also assumes that the document type is displayed in the first column of the view. You can also use ForAll to get the values of all list elements:
ForAll c in cnt
Print ListTag(c) & " = " & c
End ForAll
That’s it for today. Happy coding!
