Über eine SOGDataFactory können Referenzfunktionen zu mehr als einem Referenzobjekt aufgerufen werden.
Eine DataFactory kann dabei einen Bezug zu einer beliebigen Anzahl von Datenelementen bekommen, und ist damit in der lage, SQL-Anweisungen zu erzeugen, die bestimmte Referenzdaten zu den Bezugsobjekten liefert. Dies können Listen von z. B. Vorgängen sein, Datentabellen mit Statistikdaten für die Aufbereitung durch Chart-Controls oder Einzelwerte für die Verwendung in Pegel-Controls.
Die Erzeugung einer DataFactory kann über ActiveSkin dort erfolgen, wo es möglich ist ein Referenzobjekt anzugeben:
#data:dbs.Artikelstamm(${Env.TBR},${m_art_sa},${m_art}):dbs.Kundenstamm(${Env.TBR},${m_sa},${m_konto})
In diesem Beispiel wird eine DataFactory erzeugt, die einen Bezug zu einem Artikelstammobjekt sowie zu einem Kundenstammobjekt hat.
Projektindividuelle Ableitung einer DataFactory
Über eine projektindividuelle Ableitung einer DataFactory über Scripting können einer DataFactory weiter Funktionen und Eigenschaften hinzugefügrt werden, oder vorhandene Funktionen und Eigenschaften verändert und überschrieben werden.
Konfiguration zu einer DataFactory
Zu der DataFactory gehört eine Konfigurationsdatei, die die Funktionen und Eigenschaften dem Benutzer verfügbar macht, sowie die Zuordnung zu den zu verwendenden Controltypen festlegt.
Zu diesem Zweck werden nacheinander bis zu drei Konfigurationsdateien gelesen, die zusammen die Menge der möglichen Funktionen festelegen.
Die Konfigurationsdateien tragen die Namen "DataFactory_base.xml", " DataFactory_proj.xml" und "DataFactory_vorort.xml" und werden jeweils über die Environmentvariable "FRMCFGPATH" gesucht.
Die Konfigurationen haben folgenden Aufbau:
<Config>
<SOGDataFactory>
<Ansicht Types="VacosManagement,Kundenstamm,KundenstammDataSet,Artikelstamm,ArtikelstammDataSet"
Group="Chart" Name="Abgabenwert" Header="Abgabenwert" ControlType="Chart" Fkt="Abgabenwert" />
<Ansicht Types="VacosManagement" Group="Pegel" Name="Pegel SaldoGesamt"
Header="OP-Saldo" ControlType="Gauge"
ConfigName="global.VacosManagement.OPGesamt" UseRefObject="true" />
<Ansicht Types="VacosManagement,Kundenstamm,KundenstammDataSet"
Group="Liste" Name="Liste Aufgaben" Header="Aufgaben" ControlType="ListContainer" Fkt="Aufgaben" />
<Ansicht Types="VacosManagement,Kundenstamm,KundenstammDataSet,Artikelstamm,ArtikelstammDataSet"
Group="Cube" Name="Cube Kunden-Artikelbuchungen2 SQL" Header="Artikelbuchungen2 SQL"
ControlType="Cube"
Fkt="file:${PROJ}/d1/Cubes/${hhproj}.ArtikelBuchungen2.sogcubexml"
AdditionalParameter="Kundenstamm.konto=Person Konto,Artikelstamm.art=Artikel Artikel Id" />
<Ansicht Types="Kundenstamm" Group="Daten" Name="Daten Kunde"
Header="Daten" ControlType="ObjectDataContainer" UseRefObject="true" />
<Ansicht Types="Kundenstamm" Group="Daten" Name="Bild Kunde"
Header="Bild" ControlType="ImageContainer" UseRefObject="true" />
<Ansicht Types="Kundenstamm" Group="Daten" Name="GeoData Kunde"
Header="GeoData" ControlType="GeoData"
ConfigName="global.Kundenstamm.GeoData" UseRefObject="true" />
</SOGDataFactory>
</Config>
Bei der Konfiguration von Elementen eines Objektcontainers wird die Konfguration gelesen und ausgewertet.
Kommaseparierte Liste von Objekttypen, auf die die Funktion angewendet werden kann. Es können nur solche Elemente ausgewählt werden, die mindestens mit einem der Referenzobjekte des ObjectContainers übereinstimmen. Der Datentyp SOGDataFactoryEmpty legt fest, welche Funktionen geeignet sind, wenn Elemente ohne Datenbezug (also mit einer leeren DataFactory) festgelegt werden. Dafür sind alle Funktionen geeignet, die auch ohne steuernde Eingabedaten auskommen.
Durch die Angabe von Types="*" kann erreicht werden, dass eine Funktion immer zur Verfügung steht, egal welcher Datenbezug im Container vorhanden ist.
Name der Gruppe, unter der der Eintrag in der ObjectContainer-Elementauswahl aufgeführt wird.
Eindeutiger Name (über alle Konfigurationen) zur Identifikation des Eintrags.
Standardüberschrift bei Verwendung als Containerelement.
Name des Controlstyp (Referenz zur CustomControl_cfg.xml).
Funktionsname für den Aufruf einer Objektfunktion, z. B. bei Verwendung einer Liste.
Standardkonfigurationsname. Wird kein Name angegeben, gilt ein Konfigurationsname per Zelle des ObjectContainers.
true: Objektfunktionen wirken auf das Referenzobjekt, und nicht auf die DataFactory.
Parameter zur Konfiguration des Controls.
Zusätzliche Parameter zur Konfiguration des Controls.
Bei einem Cube kann hier die Verbindung zwischen Datenfeldern der Referenzobjekte und zu Filternden Cube-Dimensionen festgelegt werden.
Zusätzliche Parameter zur Konfiguration des Controls in der WPF Oberfläche.
Sind die Parameter in der WPF Oberfläche abweichend von denen der WinForm Oberfläche, und sollen beide Oberflächen parallel genutzt werden, können hier die Cube Verbindungsparameter der WPF Oberfläche konfiguriert werden.
Konfiguration eines dynamischen ListContainers zur Anzeige von Metadaten
Sollen Metadaten in einem ListCointainer angezeigt werden, kann entweder die DataFactory um eine entsprechende Script-Funktion erweitert werden, oder es kann ein dynamischer ListContainer erzeugt werden, der bei Bedarf über die Einschränkungsfunktionen der DataFactory auf den gültigen Objektbezug (z. B. Kunde oder Artikel) eingeschränkt werden kann.
<Ansicht Types="Kundenstamm" Group="Liste" Name="Liste Meta Berichte" Header="Meta Berichte" ControlType="ListContainer" Fkt="GetList"
Parameter="dynamic:meta_berichte:KundenLieferantenEinschraenkung(sa,konto)" UseRefObject="true" />
In diesem Beispiel wird für eine DataFactory, die einen Kundenstamm-Bezug hat (z. B. Kundencenter) ein ListContainer definiert, der Daten aus der Tabelle "meta_berichte" anzeigt, und automatisch die angezeigte Datenmenge über die KundenLieferantenEinschraenkung-Funktion der ObjectFactory auf den angewählten Kunden einschränkt.
Geben Sie dazu unter "Parameter" den Prefix "dynamic:", gefolgt von dem Namen der anzuzeigenden Tabelle an.
Durch weitere Doppelpunkte können dann Einschraenkungsfunktionen der DataFactory angegeben werden, die dafür sorgen, dass die angezeigte Datenmenge entsprechend eingeschränkt wird. Die hier definierten Datenfelder "sa, konto" beziehen sich in diesem Beispiel auf die angegebene Tabelle (meta_berichte).
Solle Die Datenmenge der Metadatentabelle nicht eingeschränkt werden, sieht der Eintrag wie folgt aus:
<Ansicht Types="Kundenstamm" Group="Liste" Name="Liste Meta Berichte" Header="Meta Berichte" ControlType="ListContainer" Fkt="GetList"
Parameter="dynamic:meta_berichte" UseRefObject="true" />
Eine aktuelle Übersicht der möglichen Einschränkungsfunktionen erhalten Sie mit dem Kommando
sogerpconsole -obfacconstraints
Die in den Klammern angegebenen Parameter müssen im Konfigurations-Eintrag (Parameter) durch einen entsprechenden Datenfeldnamen der anzuzeigenden Tabelle ersetzt werden.