Just a qick update on the attempt to implement
MVC in lotus script. Its going pretty well, with a bear minimum of shouting to the gods of Coding to smite IBM down.
I quickly identified the benefit of replicating (stealing) the get/set methodology of other frame works. This way you can really control the business logic around setting particular field values. The downside? So many getters and setters…….
I think I will have to a some point write an eclipse plugin to generate these like it does for java. It also hasn’t helped I’ve taken the idea to include a clear method with the getters and setters. 50% more work, well done me. Unlike frameworks with a separate ui/database a lot of business logic in notes is to make the information display right in UI. So the clear functions are vital to maintain the functionality across the board. Some fields may be cleared by a document.replaceItemValue("field1”,””) while number fields need a 0 or custom functionality may require that clearing a field actually fills it with a default value. The addition of a clear function for all fields allows for tight control of this functionality.
I have also written a pretty nifty applications factory class that I will post at a later date.
Again here is a "brief example” of the Current Code this time focusing on Data access and Business Logic. Included is my master Entitymodel class. I have tried to make it a working example by removing all custom error handling. I apologise in advanced for anything I’ve missed/left in.
Public Class entityModel As entityCommons
Private session As NotesSession
Private document As NotesDocument
Public Function atword(value As String, separator As String, occurance As Integer)
Dim tmpString As String
tmpString = value
Dim i As Integer
For i = 1 To occurance -1
tmpString = Right(tmpString,Len(tmpString) - InStr(tmpString,separator))
Next
If(InStr(tmpstring,separator) > 0 )then
tmpString = Left(tmpString,InStr(tmpString,separator)-1)
End if
atword = tmpString
End Function
Public Sub New()
Set session = New NotesSession
End Sub
Public Sub save
Call document.Save(True , False)
End Sub
Public Function getDocument() As NotesDocument
Set getDocument = document
End Function
Private Function getItemValue(fieldName As String) As Variant
getItemValue = document.Getitemvalue(fieldname)
End Function
Private Function setItemValue(fieldName As String,value As Variant)
Call document.replaceItemValue(fieldName,value)
End Function
Private Function appendItemValue(fieldName As String,value As String, seperator As String)
Call document.replaceItemValue(fieldName,document.Getitemvalue(fieldname)(0) & seperator & value)
End Function
Private Function replaceItemValue(fieldName As String,value As String, seperator As String , element As Integer)
Dim elements As Variant
elements = Split(document.getItemValue(FieldName)(0),"#")
elements(element) = value
Call document.replaceItemValue(fieldName, Join(elements,"#"))
End Function
Private Function getItemValueElement(fieldname As String, seperator As String , element As Integer) As String
getItemValueElement = atword(document.getItemValue(FieldName)(0),seperator,element)
End Function
End Class
Public Class PersTable01Dao
Private database As NotesDatabase
Private view As NotesView
Public Sub New()
Set ApplicationFactory = New ApplicationFactory()
Set database = ApplicationFactory.getApplication("Personnel - Tables", DATABASESTYPE)
End Sub
Public Function getPersTable01(key As String) As PersTable01
Set view = database.getView("PersTable03")
Dim doc As NotesDocument
Set doc = view.getDocumentByKey(key,true)
Dim PersTable01 As PersTable01
Set PersTable01 = New PersTable01()
Call PersTable01.setDocument(doc)
Set getPersTable01 = PersTable01
End Function
End Class
Public Class PersTable01 As entityModel
Private database As NotesDatabase
Public Sub New(), entityModel()
End Sub
Public Sub newDocument(database As NotesDatabase)
If database Is Nothing Then
Set database = session.Currentdatabase
End If
Set document = database.CreateDocument
document.form = "PersTable01"
End Sub
Public Sub setDocument(passedDocument As NotesDocument)
Set document = passedDocument
End Sub
Public Function getTableEntry() As String
getTableEntry = getItemvalue("TableEntity")(0)
End Function
Public Function getTable_User1() As String
getTable_User1 = getItemvalue("Table_User1")(0)
End Function
Public Function getTableEntry(value as string)
Call setItemvalue("TableEntity”, value)
End Function
Public Function getTable_User1() As String
Call setItemvalue("Table_User1”, value)
End Function
Public Function clearTableEntry()
Call setItemvalue("TableEntity”, "”)
End Function
Public Function clearTable_User1() As String
Call setItemvalue("Table_User1”, "No Value”)
End Function
Private function onTableEntryChange()
If(getTableEntry = "”) then
call ClearTable_User1()
End if
End function
End Class