Seitenhistorie
...
Info |
---|
Achtung: Der Ausgangskontext für "Neu aktiv (dynamisch)" ist immer das übergeordnete BO der Subform, der Ausgangskontext für "Bearbeiten aktiv (dynamisch)", "Löschen aktiv (dynamisch)" und "Klonen aktiv (dynamisch)" hingegen ist immer das BO der Subform selbst. Will man sich also beispielsweise in einem Subform für Auftragspositionen den Status des Auftrages holen, muss man dies für "Neu" mittels context."#{NAME.Auftrag.nuclosStateNumber}" tun, für "Bearbeiten", "Löschen" und "Klonen hingegen muss man erst einen Kontext nach oben gehen mittels context."#{NAME.Auftragsposition.auftrag.context}"."#{NAME.Auftrag.nuclosStateNumber}". |
Beispiel 1
Bestimmte Felder sollen abhängig des ausgewählten Wertes (componentType) aktiviert oder deaktiviert sein.
Codeblock |
---|
if ("Artikel".equals(context."#{DIB.PackageComponent.componentType}")) {
if (context.field == "#{DIB.PackageComponent.textNumber}")
return false
}
if ("Text".equals(context."#{DIB.PackageComponent.componentType}")) {
if (context.field == "#{DIB.PackageComponent.article}")
return false
if (context.field == "#{DIB.PackageComponent.price}")
return false
if (context.field == "#{DIB.PackageComponent.amount}")
return false
if (context.field == "#{DIB.PackageComponent.weight}")
return false
}
return true |
Beispiel 2
Feld invoiceamountinhours soll abhängig des ausgewählten Wertes (chargedashours) aktiviert oder deaktiviert sein. Vorsicht: Da das BO ein Leerzeichen hat, muss es auch im Groovy-Code so verwendet werden ("External services").
Codeblock |
---|
if (context."#{D3R1.External services.chargedashours}" == false) {
if (context.field == "#{D3R1.External services.invoiceamountinhours}") {
return false
}
}
return true |
Funktionen über Bibliotheksregeln
Sie können in Bibliotheksregeln Funktionen definieren, die in dynamischen Eigenschaften und berechneten Werten verwendet werden können. Eine Bibliotheksregel muss hierfür mit der Annotation org.springframework.stereotype.Component gekennzeichnet werden, damit sie von der Laufzeitumgebung erkannt wird (Hinweis: es wird nur eine Instanz der Klasse erzeugt - beachten Sie dies beim Einsatz von Klassenvariablen). Falls Sie eine Methode dieser Klasse als Funktion verwenden möchten, kennzeichnen Sie diese mit der Annotation org.nuclos.api.annotation.Function und vergeben Sie einen global eindeutigen Namen. Diesen Namen verwenden Sie später, um die Funktion mit Hilfe über context."#FUNCTION{<Funktionsname>}" aufzurufen. Bei der Implementierung von Funktionen ist darauf zu achten, dass Parameter- und Rückgabe-Typen übereinstimmen. Ggf. notwendige Umwandlungen müssen manuell vorgenommen werden. Ausserdem muss beachtet werden, dass der Namensraum des Packages im Nuclet Mangagement und der Packagename der Componente (Bibliotheksregel) gleich sind.
Beispiel
In folgendem Beispiel wird eine automatische Vergabe von Bestellnummern in Abhängigkeit des ausgewählten Kunden implementiert.
...