1. Die Datahandler meldet sich beim Formular FrmBo an. (thisform.oDatahandler
= this)
2. Die BoManager melden sich im Array thisform.odataHandler.aBoInstances beim
Datahandler an. Dieses Array enthält den Namen des BoMgr, die Objektreferenz,
sowie die Berechtigung als Bitmaske und einen eindeutigen Namen, sowie einen
Eintrag, ob dieser BO-Container einen Vater hat, oder ob es sich um ein Master-BO
handelt.
3. Die Methode SetDataSources() des BO-Containers bindet die Steuerelemente
an die Daten. Die Controlsource.-Eigenschaft der Steuerelemente wird nicht
benutzt.
Einbindung in eigene Applikationen
Im ClassMaxX-Applikationsobjekt müssen die beiden Business-Objects-Klassen
bodata und der HookDatahandler(Optional) als Label dar. Nachdem das Applikationsobjekt
selbst bekannt ist werden alle anderen Objekte initialisiert Die Business-Objects-Klassen
werden als oApp.oBO bzw. oApp.oBOHookMgr instanziiert
Erstellen eines eigenen Business-Object
Die nachfolgende Anleitung bietet Ihnen eine Step by Step Beschreibung, wie
Sie ihre eigenen Business-Objects erstellen. Jedes Business-Object kann MASTER
oder CHILD sein. So würde ein Rechnungs-BO bei einer Anzeige aller Rechnungen
für einen definierten Zeitraum ein MASTER-BO sein. Wenn Sie diese BO einsetzen,
um alle Rechnungen eines Kunden anzuzeigen ist das BO ein CHILD. Deshalb ist
es sinnvoll, für jede Tabelle, die von den BO's genutzt wird, zwei Views
zu erstellen.
Voraussetzungen:
1. Es muß eine Tabelle existieren, die einen eindeutigen Schlüssel
besitzt. (Primary Key). Nehmen wir an, wir haben eine Tabelle Kunden, welche
die Stammdaten der Kunden enthält (PK-Feld = idKunde), und eine Tabelle
Rechnungen (PK-Feld = idRech, FK-Feld = idKunde), die alle Rechnungskopfinformationen
für erstellte Rechnungen enthält.
2. Erstellen Sie in Ihrem Projekt eine neue Klassenbibliothek, in der diese
Business-Objects abgelegt werden, mit "CREATE CLASSLIB klassen\mybo.vcx".
Fügen Sie diese Klassenbibliothek Ihrem Projekt hinzu und erweitern Sie
das Mainprogramm Ihrer Anwendung bei der SET CLASSLIB-Anweisung um den Eintrag
für diese Bibliothek.
Ablauf:
1. Erstellen der Views. Der Masterview, um alle Rechnungen anzuzeigen, ist
in diesem Fall:
"SELECT * from Rechnungen". Nennen wir Ihn "vRechnungenAll"
Der Childview, um alle Rechnungen eines Kunden anzuzeigen, enthält eine
WHERE-Bedingung auf den Schlüsselwert des Master-BO (Kunden), welche
folgendermaßen aussieht:
"SELECT * from Rechnungen WHERE idkunde = ?this.uBoForeignKeyValue".
Nennen wir diesen View "vRechnungen"
2. Erstellen Sie eine neue Klasse, basierend auf der Klasse boCnt(bizobj.vcx)
mit:
"CREATE CLASS myrechnungen OF klassen\mybo AS bocnt FROM bizobj"
3. Wechseln Sie im Projektmanager auf die Seite Daten und dort auf den View
vRechnungen. Öffnen sie diesen View im Projektfenster, so daß Sie
die einzelnen Felder sehen können und ziehen Sie sich die Felder, die
Sie in Ihrem BO benötigen, per Drag & Drop auf Ihre Klasse.
TIP: Wenn Sie alle Felder des Views in Ihre Klasse aufnehmen wollen,
markieren Sie den Viewnamen und ziehen Sie diesen per Drag & Drop mit
der RECHTEN Maustaste auf Ihre Klasse. Es erscheint dann ein Menü, in
dem Sie "Mehrfache Steuerelemente" auswählen. Sie haben dann
alle Felder auf einmal in Ihrer Klasse.
4. Als nächstes sollten Sie jetzt die automatisch von VFP gesetzten Controlsourcen
der einzelnen Steuerelemente entfernen. Markieren Sie dazu alle Steuerelemente,
die eine Controlsource besitzen, wählen Sie im Eigenschaftsfenster die
Eigenschaft Controlsource an und setzen Sie diese auf Standard zurück
(Rechte Maustaste/Auf Standard zurücksetzen).
5. Das Setzen der Controlsourcen müssen Sie in der Methode SetDataSources(
) des Containers vornehmen. Dies sollten Sie in folgender Syntax tun:
WITH THIS
.txtText1.Controlsource = .oboMgr.cboViewName + ".text1"
...
*-- Hier Ergänzungen bei eigenen Objekten anfügen
*-- <ObjektName>.ControlSource = oboMgr.cboviewName + ".<Feldname>"
ENDWITH
6. Jetzt müssen Sie im Business-Object selbst noch einige Eigenschaften
füllen. Markieren Sie dazu das Label oben links in der Ecke (BOManager),
öffnen Sie mit der rechten Maustaste das Menü und wählen Sie
Generator aus. Es erscheint jetzt der Business-Objects-Builder. Hier müssen
Sie jetzt die Felder auf der 1. Seite ausfüllen. Alle anderen Eigenschaften
sind mit Defaultwerten vorbelegt, sie müssen jetzt nicht gefüllt
werden. Die Felder haben folgende Bedeutung:
- Tabellenname: Dieses Feld entspricht der Eigenschaft cBoTablename. Es muß
den Namen der Tabelle (Rechnungen) enthalten.
- AliasName: Dieses Feld entspricht der Eigenschaft cBoViewName. Es muß
den Namen des zugehörigen Views (vRechnungenAll) enthalten.
- Name: Dieses Feld entspricht der Eigenschaft Caption. Hier kann ein beliebiger
Name vergeben werden. Es ist der Name des BO'S und gleichzeitig die Referenz
für andere BO's, wenn diese ein CHILD dieses BO's sind. Wir vergeben
hier den Namen "Rechnungen".
TIP: Der hier eingegebene Name wird oben links im Container angezeigt. Damit
können Sie in komplexen Masken mit vielen BO's immer gleich die Referenz
sehen.
- Abhängig von: Diese Feld entspricht der Eigenschaft cParent. Wenn sie
hier "MASTER" eingeben, ist dieses Business-Object das Master-BO
einer Maske. Wenn es sich aber um ein CHILD-BO handeln soll geben Sie hier
bitte die Referenz des Übergeordneten BO's an. Wir füllen dieses
Feld für unser BO mit MASTER.
- ID-Name(n): Diese Feld entspricht der Eigenschaft cBoIDField. Hier müssen
Sie den Feldnamen des eindeutigen Schlüssels dieses BO's eingeben, in
unserem Fall IDRech.
7. Das wars !!! Speichern Sie Ihr Business-Object in Ihrer eigenen Klassenbibliothek
ab. Sie können diese Klasse jetzt genauso wie die anderen bereits vorgefertigten
Business-Objects benutzen.
Weitere Funktionalität
Alle Funktionalitäten, die in den Business-Objects vorhanden sind, hier
aufzuzählen, würde den Rahmen dieses Ordners sprengen. Deshalb hier
nur in Kürze noch ein paar Stichworte.
QuerybyForm und komplexe Suchfunktionalität
Die Business-Objects für ClassMaxX bieten Ihnen eine komplette QueryByForm-Suchfunktionalität
schon fertig eingebaut ! Ziehen Sie nur noch einen Button auf ihren BOManager
und Ihr Business-Object hat diese Funktionalität. Stellen Sie einige zusätzliche
Eigenschaften ein, um ein Suchformular zu öffnen, welches Ihnen eine komplexe
Suchfunktionalität bietet.
Hook-Methoden
Hook-Methoden für jedes Business-Objects befinden sich im BoManager. Für
jede Dialogmethode gibt es: eine Before... und eine After...-Methode.
Plausibilitäten
Die Methode checkbizrule in der Klasse BoManager kann an beliebiger Stelle als
Validierungscheck der Felder aufgerufen werden. Es wird die Objektreferenz des
aufrufenden Objekts übergeben. Die Methode gibt .T. oder .F. zurück.
Builder
Alle zum Betrieb der Business-Objects nötigen Eigenschaften können
über spezielle BUILDER eingestellt werden!
Zusammenfassung
Besuchen Sie uns auf unserem Stand auf der Devcon. Dort können wir Ihnen
weitere Fragen direkt beantworten und Sie können sich direkt vor Ort von
der Funktionalität dieser Komponenten überzeugen.
Für Fragen stehe ich Ihnen auch jederzeit unter Flohr@indisoftware.de
zur Verfügung.
Sie erreichen mich auch im dFPUG-Forum auf Compuserve unter CIS 106205,3221
oder auf unserer Website www.indisoftware.de.
|