Eigenschaftsbindungen, die mittels iPlus-Entwicklungsumgebung definiert wurden, sind in der Tabelle ACClassPropertyRelation mit dem ConnectionTypeIndex = 11 (Global.ConnectionTypes.ConnectionPhysical) gespeichert. Während der Initialisierungsphasen (ACInit und ACPostInit) werden diese Tabelleneinträge gelesen und die Eigenschaften miteinander gebunden.
Das Binden von Eigenschaften über die iPlus-Entwicklungsumgebung kann sehr aufwändig werden, wenn man viele Eigenschaften binden muss. Dafür gibt es zwei Lösungsmöglichkeiten:
- Man programmiert sich ein eigenes Businessobjekt oder einen Plugin für die iPlus-Enticklungsumgebung, das automatisiert per Datenbankzugriff Einträge in die ACClassPropertyRelation-Tabelle macht
- oder man bindet die Quell- und Zieleigenschaft dynamisch während der Initialisierungsphase Ihrer ACComponent-Klasse. Dies wird im folgenden Code-Beispiel näher erklärt:
Immer nach ACPostInit()!
In Zeile 2. wird BindMyProperties() nach dem Aufruf von base.ACPostInit() gemacht. Nur dann ist sichergestellt, dass auch alle Instanzen verfügbar sind und ein dynamisches Binding ist ert dann möglich.
Interface IACPropertyNetTarget
Im UML-Diagramm des Eigenschaften-Abschnitts ist erkennbar, dass für Eigenschaften, die mit dem [ACPropertyBindingTarget] versehen sind eine andere Property-Klasse vom Framework verwendet wird, die das Interface IACPropertyTarget implementiert. In der Regel wir hier eine Instanz von der Klasse ACPropertyNetTarget<T> generiert. Das IACPropertyTarget stellt eine Eigenschaft "Source" bereit mit der abgefragt werden kann, ob bereits eine Quell-Eigeschaft gebunden ist (siehe Zeile 3).
Interface IACPropertyNetSource
Eigenschaften, die mit dem [ACPropertyBindingSource] versehen sind, werden aus der Klasse ACPropertyNetSource<T> instanziiert, die das Interface IACPropertySource implementiert. Das IACPropertySource stellt eine Eigenschaft "Targets" bereit mit der abgefragt werden kann, ob welche Ziel-Eigeschaften gebunden sind (siehe Zeile 5).
Dynamische Bindung
Um eine Ziel-Eigenschaft and eine Quell-Eigenschaft zu binden verwenden Sie bitte die Methode BindPropertyToSource(), die es mit zwei Überladungen gibt:
public PropBindingBindingResult BindPropertyToSource(IACPropertyNetSource acPropertySource, PropBindingMode bindingMode = PropBindingMode.BindAndBroadcast)
Diese Methode bindet nur Eigenschaften, die vom selben Datentypen sind (Typ von ValueT). Sind die Datentypen unterscheidlich wird PropBindingBindingResult.NotCompatibleTypes zurückgegeben.
public PropBindingBindingResult BindPropertyToSource(IACPropertyNetSource acPropertySource,
out IACPropertyNetTarget newTarget, out string message,
bool bindInDBIfConverterNeeded = true, PropBindingMode bindingMode = PropBindingMode.BindAndBroadcast)
Diese Methode ruft zunächst Methode (a) auf. Falls die Datentypen inkompatibel sind generiert die Methode entweder
- eine neue Zieleigenschaft von der Klasse ACPropertyNetTargetConverter<T,S> und ersetzt die aktuelle Referenz (die Methode gibt PropBindingBindingResult.TargetPropReplaced zurück)
- oder sie verändert/repariert den Datentypen der Quelleigenschaft. In diesem Falls muss der iPlus-Service neu gestartet werden, damit diese Äderung aktiv wird. Das erkennen Sie daran, dass sie als Rückgabewert PropBindingBindingResult.TypeOfSourceWasChanged erhalten.