[ 1 ] [ 2 ]

 

    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.

[ 1 ] [ 2 ]