'*** Constants ***
Private Const ITEM_MAX_SIZE = 31000
Public Class NotesItemWrapper
'declarations
Private pDoc As NotesDocument
Private pCurrentItem As NotesItem
Private pItemNames As Variant
Private pItemIndex As Integer
'/**
' * Constructor.
' */
Public Sub New(doc As NotesDocument, item_names As Variant, append_data As Boolean)
'declarations
Dim i As Integer
'store the document
Set Me.pDoc = doc
'item_names must be an array of strings or a item
Forall n In item_names
If Typename(n) <> "STRING" Then
Error 9999, "The supplied item names but be a string or an array of strings."
End If
End Forall
'make sure the item names are an array
If Not Isarray(item_names) Then
Dim v(0) As String
v(0) = Cstr(item_names)
Me.pItemNames = v
Else
'store the item names to use
Me.pItemNames = item_names
End If
'get the first item to use
If Not append_data Then
'remove all the items with the supplied names and recreate the first one
Forall n In Me.pItemNames
Call Me.pDoc.RemoveItem(n)
End Forall
'recreate the first item
Set Me.pCurrentItem = New NotesItem(Me.pDoc, Me.pItemNames(Me.pItemIndex), "")
Else
'find the first item to use
For i=0 To Ubound(Me.pItemNames)
'get the first item
Set Me.pCurrentItem = Me.pDoc.GetFirstItem(Me.pItemNames(Me.pItemIndex))
'is this item below the threshold
If Lenb(Me.pCurrentItem.Text) < ITEM_MAX_SIZE Then
'use this item
Me.pItemIndex = i
Exit For
End If
Next
End If
End Sub
'/**
' * Appends text to the item checking whether a new item
' * is required to hold the text. If no more fields are
' * available we return an Error 9999.
' */
Public Sub AppendText(data As String)
'check whether there is space for the data
If Me.pCheckSize(data) Then
'it is ok - append
Me.pCurrentItem.Text = Me.pCurrentItem.Text + data
Else
'raise error
Error 9999, "Not enought space to hold the data."
End If
End Sub
'/**
' * Appends a multi-value item to the item(s). If no more space
' * is available we return an Error 9999.
' */
Public Sub AppendToTextList(data As String)
'check whether there is space for the data
If Me.pCheckSize(data) Then
'it is ok - append
Call Me.pCurrentItem.AppendToTextList(data)
Else
'raise error
Error 9999, "Not enought space to hold the data."
End If
End Sub
'*****************************************************************************
'* Private methods
'*****************************************************************************
'/**
' * Checks the size of the current item. Returns True if the item
' * can hold the supplied data.
' */
Private Function pCheckSize(data As String) As Boolean
'declarations
Dim size As Long
'calculate the item size
size = Lenb(Me.pCurrentItem.Text) + Lenb(data)
'Print "Size is: " & size & " (index = " & Me.pItemIndex & ", " & Me.pCurrentItem.Name & ")"
'decide what to do
If size < ITEM_MAX_SIZE Then
'item can hold the byte count
pCheckSize = True
Else
'no can do - try and get the next item
If Me.pItemIndex <= Ubound(Me.pItemNames) Then
'get the next item
Me.pItemIndex = Me.pItemIndex + 1
Set Me.pCurrentItem = New NotesItem(Me.pDoc, Me.pItemNames(Me.pItemIndex), "")
'return true
pCheckSize = True
Else
'no more items
pCheckSize = False
End If
End If
End Function
End Class