AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
21.02.20 - 04:44:09
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News: Jetzt mit HCL Notes / Domino 11 und einem Extraboard für Nomad!
Schnellsuche:
+  Das Notes Forum
|-+  Best Practices
| |-+  Diskussionen zu Best Practices (Moderatoren: Axel, MartinG, animate, koehlerbv)
| | |-+  Anfrage auf Best Practice: Lotus Script __ Eigene Script Klassen
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Anfrage auf Best Practice: Lotus Script __ Eigene Script Klassen  (Gelesen 9653 mal)
samWare
Gast
« am: 18.09.09 - 09:06:49 »

Hallo Leute,

ich würde gerne mit Klassen (eigenen Klassen Wink) statt nur mit LS-Funktionen arbeiten. Leider finde ich in der Hilfe die einschlägigen Anleitungen zu diesem Thema nicht.
Ist jetzt vllt. eine zu krasse Anfrage, aber kann nicht einer von euch GURUS ein Best Pracitce dazu veröffentlichen?! Und wenn nein: kann mir jemand sagen wo in der Hilfe das bauen von LS-Classes beschrieben wird? Würde mich wirklich sehr über eure Hilfe freuen!

Mit freundlichen Grüßen
Sam
« Letzte Änderung: 23.05.11 - 20:29:19 von samWare » Gespeichert
BigWim
Gast
« Antworten #1 am: 18.09.09 - 09:42:34 »

Hallo Samuel,

findest Du in der Designer Hilfe unter "Lotus-Script-Sprache"->"Benutzerdefinierte Datentypen und Klassen"->"User-Defined classes"

Spielt sich als unter (Declarations) ab. Wichtige Punkte sind die Schlüsselwörter Private und Public (dafür macht man das ganze ja) und die Funktionen new (Konstruktor) und delete (Desturktor).

Für fortgeschrittene Anfänger sind dann abgeleitete Klassen (Stichwort Vererbung) interessant.

Vor allem muß Du objektorientiert Denken Wink


Viel Erfolg
Markus
Gespeichert
samWare
Gast
« Antworten #2 am: 18.09.09 - 10:03:54 »

Danke dir Markus!

mfg Samuel
Gespeichert
MadMetzger
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1052


f.k.a. Alexis Pyromanis


« Antworten #3 am: 18.09.09 - 10:13:37 »

Markus, dein letzter Hinweis ist sogar sehr wichtig. Einfach Klassen schreiben kann sogar dazu führen, dass man mehr Aufwand hat, als vorher. Wenn man "gute" Klassen schreibt, kann man sich aber mitunter eine Menge Arbeit sparen.

Naja, vielleicht können wir hier ja mal Stichworte sammeln, die für Best Practices zu OO mit Lotus Script gelten.

Sinnvoll ist es auch immer, die Klassen in eigenen Skriptbibliotheken zu pflegen, damit die Klassen auch "wiederverwendbar" sind.

Als hilfreiches Tool hat sich hier bei mir der kostenlose Teamstudio Script Browser erwiesen, da er die Navigation durch mitunter etwas umfangreichere Klassen massiv erleichtert hat.

Also von mir kamen schon mal zwe Stichpunkte.
  • Teamstudio Script Browser
  • Aufteilung auf Skriptbibliotheken
« Letzte Änderung: 18.09.09 - 10:16:49 von MadMetzger » Gespeichert

samWare
Gast
« Antworten #4 am: 18.09.09 - 10:42:19 »

Da sind wir ja schon am Punkt warum ich mit Klassen arbeiten will. Da ich den großteil meines Codes absolut allgemein//wiederverwertbar halte (ich will mir sowas wie meinen eigenen Frame erstellen..) und sich damit einfach SPITZE Arbeiten lässt, hab ich mir gedacht dass das mit Klassen bestimmt NOCH besser geht. Und ja, ich arbeite natürlich mit ScriptBibliotheken Wink So krass bin ich jetzt nicht vom hinterm Mond (nur weil ich noch nicht weiß wie man Script Klassen baut heißt das nicht dass ich garnichts kann Wink).

Hab gerade mal ein Sekündchen in die Hilfe geguggt... Brauchbar, wird aber ne Zeit dauern bis das richtig Klick macht. Ein Best Practice wär schon echt nicht verkehrt...
Gespeichert
BigWim
Gast
« Antworten #5 am: 18.09.09 - 10:43:13 »

Hallo Markus,

Zitat
Sinnvoll ist es auch immer, die Klassen in eigenen Skriptbibliotheken zu pflegen, damit die Klassen auch "wiederverwendbar" sind.
Auf jeden Fall. War für mich schon zu selbstverständlich, weil alles andere sinnfrei ist.

Nur hier ein Wort zur Vorsicht. Ich persönlich habe das Problem, dass ich mich oftmals zu sehr verschachtele. Man wird hat alt. Der Tipp mit den Tools würde ich ganz weit oben sehen.

Markus
Gespeichert
BigWim
Gast
« Antworten #6 am: 18.09.09 - 11:26:15 »

Zitat
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)


Code:
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.

Code:
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:

Code:
Dim objLogging as New CLogging
-> Ausführen der Funktion New

jetzt kann jede Public-Funktion und jede Public-Variable genutzt werden, also z. B.

Code:
Call objLogging.Schreiben("LogText")

oder

Code:
Call objLogging.SchreibenInfo("LogText")

oder

Code:
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






Gespeichert
samWare
Gast
« Antworten #7 am: 18.09.09 - 11:34:02 »

1.000 Dank! Spitze dass du das mal eben veröffentlicht hast, das hilft mir Ungemein. Knuddeln Liebe
Gespeichert
MadMetzger
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1052


f.k.a. Alexis Pyromanis


« Antworten #8 am: 18.09.09 - 11:44:20 »

Naja, wenn jemand Best Practice-Frage stellt, sollte vielleicht erstmal nichts selbstverständlich sein. Daher habe ich auch diesen eigentlich selbstverständlichen Tipp gebracht. Aber Markus hat bei dieser Aufteilung eine Schwierigkeit angesprochen: Wie teile ich die Klassen auf die Libs auf? Macht man es zu feingliedrig, dann verzettelt man sich und geht die Gefahr ein, dass man zu zyklischen Abhängigkeiten zwischen Libs kommt, mit denen Notes leider nicht umgehen kann (oder mal konnte). Eine zu grobe Aufteilung führt wiederum dazu, dass die Libs einfach zu groß werden und man mehr scrollt, als dass man Code schreibt.  Grin

Daher ist ein weiterer wichtiger Tipp, der eigentlich auch ein Allgemeinplatz ist, vorher ein Klassenmodell (etwa mit UML) zu entwerfen. Anhand dieses Modells kann man evtl schon absehen, wo sich sinnvolle Auftrennungen ergeben und wo möglicherweise Zyklen bestehen können.
Gespeichert

BigWim
Gast
« Antworten #9 am: 18.09.09 - 11:45:07 »

Zitat
1.000 Dank!
Gern geschehen. Ist schon ein gutes Gefühl, auch mal auf der anderen Seite zu stehen Grin

Na, da habe ich ja wohl das falsche Beispiel veröffentlicht.

Aber dann hast Du ja der erste Übungsprojekt. Sehr viel mußt Du dafür nicht abändern ...
Gespeichert
Axel
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8658


It's not a bug, it's Notes


« Antworten #10 am: 18.09.09 - 12:01:28 »

Hier gibt's auch noch Infos: Using the object-oriented features of LotusScript

Ist zwar schon etwas älter, aber es passt als Einstieg immer noch.

Axel
Gespeichert

Ohne Computer wären wir noch lange nicht hinterm Mond!
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: