Ein Best Practice wär schon echt nicht verkehrt...
Dafür ist das Thema zu individuell - finde ich.
Als Dank für die vielen hilfreichen Artikel hier, "stifte" ich mal einen Einsteiger (hoffe ich zumindest) in der Annahme, dass es das hier im Forum nicht gibt, weil Du schon danach gesucht hast ...
Als Beispiel (wieder mal) eine Logging-Klasse, die ich dabei bin auszubauen.
Ich habe eine "zentrale" DB, in der ich meine Logtexte ablege. Die Felder, die ich befüllen kann, liegen in einer Struktur (ein Splin von mir)
Type strCLogging
sReaderRole As String
sReaderUser As String
sUser As String
sServer As String
sDatenbankName As String
sDatenbank As String
sDocID As String
sDocIDServer As String
sDocIDDatenbank As String
sDocIDAktion As String
sView As String
sObjekt As String
sFunktion As String
sAktion As String
sStatus As String
sText As String
sZusatzInfo As String ' Trennzeichen für Arraybildung = ~ oder Funktion AddZusatzInfo nutzen
End Type
Dann folgt die Klasse.
Alles was Public ist, ist auch von "außen" erreichbar.
Alles was Private ist, kann nur "innerhalb" der Klasse verwendet werden.
Class CLogging
Public strLog As strCLogging
Public bLoggingAktiv As Boolean
Private dbLog As NotesDatabase
Private aryEntwickler(2) As String
Private sLogServer As String
Private sLogDatenbank As String
Public Sub DelZusatzInfo
strLog.sZusatzInfo = ""
End Sub
Public Sub AddZusatzInfo (tmpText As String)
If strLog.sZusatzInfo = "" Then
strLog.sZusatzInfo = tmpText
Else
strLog.sZusatzInfo = strLog.sZusatzInfo + "~" + tmpText
End If
End Sub
Public Sub SchreibenError (tmpText As String)
strLog.sStatus = "Fehler"
Call Schreiben (tmpText)
End Sub
Public Sub SchreibenInfo (tmpText As String)
strLog.sStatus = "Info"
Call Schreiben (tmpText)
End Sub
Public Sub Schreiben (tmpText As String)
If Not dbLog.IsOpen Then
Messagebox "Logging Datenbank nicht offen",,"Logging nicht möglich"
Exit Sub
End If
If bLoggingAktiv = False Then
Exit Sub
End If
If tmpText <> "" Then
strLog.sText = tmpText
End If
Dim docNew As New NotesDocument(dbLog)
Dim authorsItem As New NotesItem(docNew, "DerEntwickler",aryEntwickler, AUTHORS)
If strLog.sReaderRole <> "" Then
Dim readerRoleItem As New NotesItem(docNew, "ReaderRole",Split(strLog.sReaderRole, "~"), READERS)
End If
If strLog.sReaderUser <> "" Then
Dim readerUserItem As New NotesItem(docNew, "ReaderRole",Split(strLog.sReaderUser, "~"), READERS)
End If
Call docNew.ReplaceItemValue("Form", "Logging")
Call docNew.ReplaceItemValue("Log_Zeit", Cstr(Now))
Call docNew.ReplaceItemValue("Log_User", strLog.sUser)
Call docNew.ReplaceItemValue("Log_Server", strLog.sServer)
Call docNew.ReplaceItemValue("Log_DatenbankName", strLog.sDatenbankName)
Call docNew.ReplaceItemValue("Log_Datenbank", strLog.sDatenbank)
Call docNew.ReplaceItemValue("Log_DocID", strLog.sDocID)
Call docNew.ReplaceItemValue("Log_Server_DocID", strLog.sDocIDServer)
Call docNew.ReplaceItemValue("Log_Datenbank_DocID", strLog.sDocIDDatenbank)
Call docNew.ReplaceItemValue("Log_DocIDAktion", strLog.sDocIDAktion)
Call docNew.ReplaceItemValue("Log_View", strLog.sView)
Call docNew.ReplaceItemValue("Log_Objekt", strLog.sObjekt)
Call docNew.ReplaceItemValue("Log_Funktion", strLog.sFunktion)
Call docNew.ReplaceItemValue("Log_Aktion", strLog.sAktion)
Call docNew.ReplaceItemValue("Log_Status", strLog.sStatus)
Call docNew.ReplaceItemValue("Log_Text", strLog.sText)
Call docNew.ReplaceItemValue("Log_MultiText", Split(strLog.sZusatzInfo,"~"))
Call docNew.Save(True, True)
End Sub
Public Sub SetDefaultWerte
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
' strLog.sReaderRole = " "
' strLog.sReaderUser = " "
strLog.sUser = session.CommonUserName
strLog.sServer = db.Server
strLog.sDatenbankname = db.Title
strLog.sDatenbank = db.FilePath
strLog.sStatus = "Fehler"
strLog.sDocIDAktion = "Dokument öffnen"
sLogServer = "i350db1"
' sLogServer = db.Server
sLogDatenbank = "info\konfiguration.nsf"
End Sub
Private Sub OpenLogDB
If dbLog Is Nothing Then
Set dbLog = New NotesDatabase(sLogServer, sLogDatenbank)
End If
End Sub
Sub new
Call SetDefaultWerte
Call OpenLogDB
aryEntwickler(0) = "Markus Pelzer"
aryEntwickler(1) = "Designer01"
bLoggingAktiv = True
End Sub
End Class
Angewendet wird die Klasse immer nach dem gleichen Schema:
Dim objLogging as New CLogging
-> Ausführen der Funktion New
jetzt kann jede Public-Funktion und jede Public-Variable genutzt werden, also z. B.
Call objLogging.Schreiben("LogText")
oder
Call objLogging.SchreibenInfo("LogText")
oder
objLogging.strLog.sAktion = "So kann ich auch Public-Variablen ändern, aber niemals Private-Variablen"
Call objLogging.Schreiben("und protokollieren")
Der Rest liegt bei Dir und Deinen Fragen.
Viel Erfolg
Markus