Datenbankobjekte lassen sich in der Active Skin Oberfläche über Objektreferenzen auf Dialogmasken visualisieren.
Einzelne Objekte einer Klasse können mit Hilfe einer "SOGRefObject"-Methode in den Controls der Dialogmaske angezeigt werden. Diese Methode wird nach folgendem Schema implementiert:
[InputPrompt()]
public Klasse SOGRefObject_Bezeichnung()
{
...
return Objekt der Klasse;
}
Im Methodenkopf wird als Rückgabeparameter der Name der zurückgegeben Klasse definiert. Der Name der Methode besteht aus dem Präfix "SOGRefObject_" und einer frei wählbaren Bezeichnung. Die Funktion hat keine Parameter. Damit die Funktion dem ActiveSkin-Benutzer in Übersichten angezeigt wird, muss sie ein "InputPrompt" Attribut haben.
Im Methodenrumpf wird das Anlesen eines Objekts implementiert (z.B. aus einer Datenbanktabelle) und dieses Objekt dann zurückgeliefert.
Beispiel:
private ZeitUser pZeitUser = null;
[InputPrompt()]
public ZeitUser SOGRefObject_ZeitUser()
{
if (pZeitUser == null)
{
ZeitUserTable zuTab = Dbs.GetTable<ZeitUserTable>();
pZeitUser = zuTab.GetZeitUser(v.Firma, ((VacosSession)v.sess).sach);
}
return pZeitUser;
}
In diesem Beispiel wird ein Objekt der Klasse "ZeitUser" aus der Datenbank angelesen und zurückgeliefert.
Die öffentlichen Eigenschaften des Objekts sind jetzt in der Dialogmaske verfügbar und können dort in Text- oder Anzeigefeldern visualisiert werden.
Um eine Liste von Objekten einer Klasse anzuzeigen, wird eine "SOGRefObjectList"-Methode verwendet, die nach folgendem Schema implementiert wird:
[SOGReturnType(typeof(Klasse))]
public KlasseDataSet SOGRefObjectList_Bezeichnung(AppHelper v, int Start, int Anz)
{
...
return KlasseDataSet mit Objekten des Typs Klasse;
}
Um dem Control, an das diese Methode in der Dialogmaske gebunden wird, mitzuteilen, von welchem Typ die Objekte in der zurückgelieferten ArrayList sind, wird hier das Attribut "SOGReturnType" der Methode vorangestellt. Dem Attribut wird an dieser Stelle ein Parameter vom Typ "Type" übergeben.
Im Methodenkopf wird als Rückgabeparameter die Klasse "ArrayList" verwendet. Der Name der Methode besteht aus dem Präfix "SOGRefObjectList_" und einer frei wählbaren Bezeichnung. Der Methode werden die Parameter "v" vom Typ "AppHelper" und "Start" und "Anz" vom Typ "Integer" übergeben. Im Methodenrumpf wird das Anlesen der Objekte implementiert, die in Form einer ArrayList zurückgeliefert werden.
Beispiel:
[SOGReturnType(typeof(ZeitLog))]
public ZeitLogDataSet SOGRefObjectList_Logdaten(SOGGetRefObjectListEventArgs refArgs)
{
ZeitLogTable zlTab = Dbs.GetTable<ZeitLogTable>();
return zlTab.Select_LogDatenSaetze(refArgs);
}
In diesem Beispiel werden Objekte vom Typ "ZeitLog" aus der Datenbank angelesen und als ArrayList zurückgeliefert.
Diese Liste von Objekten kann nun direkt über die Active Skin Oberfläche an ein Control gebunden werden (hier am Beispiel der ObjectList):
Im Feld "Name" wird ein frei wählbarer Name für die Instanz des ObjectList-Controls vergeben. Dieser Name sollte jedoch innerhalb der Dialogmaske eindeutig sein. Im Feld "Referenzfunktion" wird der Name der "SOGRefObjectList"-Methode angegeben (ohne das Präfix "SOGRefObjectList_").
Nachdem die Methode erfolgreich an den Control gebunden wurde, lassen sich über das Kontextmenü "Tabelle" - "Spalten konfigurieren" die öffentlichen Eigenschaften der Klasse "ZeitLog" auswählen, die in der ObjectList angezeigt werden sollen.
Wird zusätzlich zu einer ObjectList noch ein ObjectSelector zur Filterung von Listen verwendet, wird die SOGRefObjectList durch folgende Methode ersetzt:
[SOGReturnType(typeof(Klasse))]
public KlasseDataSet Select_DynamicSql(SOGGetRefObjectListEventArgs refArgs)
{
...
return Tabellenobjekt.ListObjects(refArgs);
}
In diesem Fall wird die dynamische SQL-Anweisung der zugrundeliegenden Tabellenklasse genutzt, um die zurückgegebene Liste mit Objekten zu ermitteln. Dabei wird im Methodenkopf eine "Where"- bzw. "Order-By"-Klausel als Parameter vom ObjectSelector übergeben und die "Select_DnamicSql"-Methode der Tabellenklasse weitergegeben. Hier besteht zusätzlich noch die Möglichkeit, die "Where"-Bedingung zu verändern, bevor diese an die Tabellenklasse weitergegeben wird.
Beispiel:
[SOGReturnType(typeof (RmaSendung), AllowSqlRelations = true)]
public RmaSendungDataSet Select_DynamicSql(SOGGetRefObjectListEventArgs refArgs)
{
// Firmenbezug einstellen
if (refArgs.DbCmd.HasItems)
refArgs.DbCmd.Append(SqlLogical.AND);
refArgs.DbCmd.AppendItems(RmaSendung.C_FIRMA, SqlComparison.Equal, refArgs.DbCmd.Add(Aph.Firma));
return Dbs.GetTable<RmaSendungTable>().ListObjects(refArgs);
}