How to create array of lists in LotusScript

JakubM picture JakubM · Jan 23, 2014 · Viewed 12.3k times · Source

I have code like this:

    Dim MyACL As Variant
    Dim Person As List

    Redim MyACL(0)

    Person("Detail1") = "Something1"
    .
    .
    .
    Person(Detailx") = "Somethingx"

    ForAll name in names
       ReDim Preserve MyAcl(Ubound(MyACL)+1)
       Person("Name") = name
       MyACL = ArrayAppend(MyACL,Person)
   End ForAll

It throws error "Type Mismatch". Do you know, how to create an array of lists? Thank you.

Answer

Karl-Henry Martinsson picture Karl-Henry Martinsson · Jan 23, 2014

This is a typical example of when you want to use a class instead, and create an array of that class. That class, in turn can contain a list (as well as other things). Can be very powerful!

Updated:

The benefit of using a class is that you can add business logic in the class, and it is very easy to extend it with more functionality later. Below is an example, based on the question above, but with additional functionality.

Class PersonObject
    Public PersonAttribute List As String
    Public NABdoc As NotesDocument
    Public PersonName As String

    Public Sub New(personname As String)
        Dim nab as New NotesDatabase("Server/Domain","names.nsf")
        Dim view as NotesView
        '*** Get person document from Domino directory
        Set view = nab.GetView("PeopleByFirstName")
        Set me.NABdoc = view.GetDocumentByKey(personname)
        '*** Set person name in object
        me.PersonName = personname
        '*** Set some values from person doc
        me.PersonAttribute("Email") = GetValue("InternetAddress")
        me.PersonAttribute("Phone") = GetValue("OfficePhone")
    End Sub

    Public Function GetValue(fieldname as String) as String
        GetValue = me.NABdoc.GetItemValue(fieldname)(0)
    End Function

    Public Sub AddAttribute(attributename as String, value as string)
        me.PersonAttribute(attributename) = value
    End Sub

End Class

You can now very easily build you a list, using this class (and assuming that names is a list of unique names):

Dim person List As PersonObject
Dim personname As String

ForAll n in names
    '*** Create person object based on name
    person(n) = New PersonObject(n)
    '*** Store additional info about this person
    person.AddAttribute("Age","35")
End ForAll    

Hopefully this gives you an idea of what you can do with classes.

You can also take a look at the following two blog entries about the basics of object oriented Lotusscript:

http://blog.texasswede.com/object-oriented-lotusscript-for-beginners-part-1/

http://blog.texasswede.com/object-oriented-lotusscript-for-beginners-part-2/