Wichtig
Detail
Fehlerbehebung
Wichtig
Detail
Wichtig
#26444
Angabe des Kontext-Objekts in TL-Script Objekterzeugung
Bisher gibt es keine Möglichkeit einer Standardwert-Funktion den Anlagekontext zu übermitteln, wenn das Objekt in einer TL-Script-Operation angelegt wird.
Mit der Anpassung "Standardwert" können Attribute neuer Instanzen mit einem Standardwert belegt werden. Die Funktion zur Berechnung eines dyn. Sequenznamens bekommt dabei "den Anlagekontext" der neu zu erstellenden Instanz.
Für die formularbasierte Erstellung von Containment-Instanzen in Kompositionsbeziehungen scheint das auch zu funktionieren.
Wenn nun aber die neuen Instanzen nicht Formularbasiert angelegt werden, ist dieser Anlagekontext nicht automatisch definiert:
Der Befehlshandler über Ausdruck an einer Tabelle operiert beispielsweise auf der gewählten Zeile als Kontext, erstellt eine composite-Instanz und verlinkt diese mit dem Kontext. Die Funktion zur Berechnung der dyn. Sequenz für den Standardwert bekommt in diesem Fall den Analagekontext "null".
Hingegen: Ein "Dialog zur Objektanlage" bekommt als Modell ebenfalls die gewählte Zeile, legt die neue composite Instanz an und verküpft sie in seiner Link-Operation mit dem gewählten Kontext. In diesem Fall wird dieser Anlagekontext auch an die Funktion zur Berechnung der dyn. Sequenz für den Standardwert übergeben. Wenn aber so eine Objektanlage das Kontextobjekt *und* die erste Composite-Instanz *gleichzeitig* erzeugt, ist das Komponentenmodell des Anlagedialogs irrelevant. Hier wäre das neu angelegte Kontextobjekt der richtige Analagekontext und nicht die gewählte Zeile.
Wenn es möglich wäre, das gerade angelegte Objekt als Parameter an die Funktion zur Berechnung des dyn. Sequenznamens zu übergeben und man von dieser Instanz zu ihrem Container (composite parent) navigieren könnte, wäre dieses Problem behoben. Solche Standardwerte könnten dann erst *nach* der Link Operation berechnet werden...
Das scheint auch die vielleicht bessere Formulierung: Wenn sich der Anlagekontext einer composite-Instanz nicht aus dem Komponentenmodell, sondern erst aus der Link-Operation bei der Anlage ergibt, funktionieren Standardwerte mit dyn. Sequenznamen nicht.
Lösung
Die TL-Script-Funktion new() erhält ein weiteres optionales Argument, in dem der Anlagekontext mitgegeben werden kann. Dieser Anlagekontext wir auch etwaigen Default-Wert-Providern zur Verfügung gestellt. Wird die Anlage in einem Script durchgeführt, kann der Kontext der Anlage so explizit mitgegeben werden.
new(`my.module:MyType`, $myContext)
Test
- test.com.top_logic.model.search.expr.TestSearchExpression.testCreateWithContext()