[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] Die Präsentations SchichtDie Beispiel Anwendung präsentiert sich in einem Outlook Style User Interface. Hierbei gelangt die "Protoview Component Suite" zum Einsatz. Diese Suite lässt sich ganz besonders einfach aus Visual Basic heraus verwenden. Die Benutzeroberfläche präsentiert sich folgendermassen:
Das Hauptformular ist ein MDI Form. Auf diesem MDI Form befinden sich das ActiveX Control "PVOutlookbar" der Protoview ActiveX Component Suite sowie die benötigten Imagelists. MDI-Form PVOutlookbar Aus dem "load" Event des Forms wird die die Outlookbar aufgesetzt. SESSION: Ich werde in der Session auf die Protoview spezifischen Implementations Details in diesem Kontext eingehen. Anwendungsbeispiel 1Der Datenbezug aus der Präsentations Schicht erfolgt via DCOM und präsentiert sich wie folgt:
Set oImpData = New ImpactData2b.clsMktPlan Dim oRS As Adodb.Recordset Set oRS = oImpData.getIndex(tcPlu, tcPluExt, tnYear, tcCrop, tcProdType) Set oImpData = Nothing … …(Verarbeitungslogik) … oRS.Close Set oRS = Nothing Anwendungsbeispiel 2Der Datenbezug aus der Präsentations Schicht erfolgt via DCOM und präsentiert sich wie folgt:
Dim loProdtype As ImpactData2b.clsProdType
cboProductType.Clear cboProductType.AddItem loRS("prodtype") loRS.MoveNext
loRS.Close Anwendungsbeispiel 3Aus dem Form frmMktPlan heraus wird übder den PVExplorer heraus bei einem Wechsel zu einem anderen Node die Methode pvExplorer_AfterNodeSelectionChange() aufgerufen. Diese Methode erhält als Inputparameter die NewNode Referenz. Jeder Node hat eine Data Property welche den Formtyp definiert. Aufgrund des angewählten Nodes wird die RefreshData() Methode des entsprechenden Forms aufgerufen. Vor dem Wechsel zu einem anderen Node muss festgestellt werden, ob es allfällige Änderungen, welche zu speichern sind, gegeben hat. Dies erfolgt über die Methode pvExplorer_BeforeNodeSelectionChange(), welche analog zur oben beschriebenen Methode diesmal die SaveData() Methode des entsprechenden Forms aufruft. Siehe Bsp. 4. Beim Form frmMktPCrop sieht die RefreshData() Methode wie folgt aus: Public Sub RefreshData(toNode As pvxNode) Call SetTitle(toNode)
With frmPluSel cPLU = .getPlu End With
Set oNode = toNode
Call setTabStatus("x") End Sub Hier wird bzgl. Datenbezug der Click Event des Tab Controls aufgerufen, da dort der eigentliche Datenbezug beginnt. Dieser präsentiert sich wie folgt: Private Sub SSTab_Click(PreviousTab As Integer) If getTabStatus(ssTab.Tab) = "x" Then
End If
If getTabStatus(ssTab.Tab) = "x" Then
Case 2 If getTabStatus(ssTab.Tab) = "x" Then
End Select Je nachdem, welcher Tab angeklickt wurde, wird die entsprechende Methode aufgerufen. Um nicht unnötige Datenbezüge auszulösen, wird über den Tabstatus ein "x" eingetragen, wenn die Daten neu zu beziehen sind. In diesem Beispiel wird die Methode GetCropArea() illustriert. Diese präsentiert sich wie folgt: Private Sub GetCropArea(tcCrop As String) Dim loMktPlan As ImpactData2b.clsMktPlan
' rows 0: area_ii, 'AREA' label, uom
' 0-9: values_ii, 10: label, 11: uom
' init
For lnRow = 0 To 1 laData(lnRow, 10) = "" ' label
' values_ii Next
lnRow = -1 lnRow = lnRow + 1
' values_ii laData(lnRow, lnField) = loRS("val_" & modGeneral.getFieldExt(lnField, 0)) Next
laData(lnRow, 10) = loRS("Label")
loRS.MoveNext Loop
loRS.Close
aAllData(ssTab.Tab) = laData End Sub Um den Datenbezug einmal durchführen zu können, wird folgende Matrix als Recordset bezogen: |