Home › Forum › Allgemeines › Allgemeines zu Nuclos › Fehler Hintergrundfarbe Groovy Scripting
- Dieses Thema hat 6 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 10 Jahren von
Matthias Dörr.
-
AutorBeiträge
-
5 November 2013 um 14:19 Uhr #7215
Matthias Dörr
TeilnehmerHallo,
Ich habe eine Entität L_UIDTree welche ein Referenzfeld „Specification“ auf die Entität L_ItemTree besitzt.
Nun soll die Hintergrundfarbe des Referenzfelds entsprechend einem Wert von L_ItemTree gesetzt werden.
1. Versuch (erfolgreich):
Im Entitätenwizard von L_ItemTree habe ich auf einem Attribut folgendes Groovy Script für die Hintergrundfarbe hinterlegt:if (context.“#{DEF.l_itemtree.quantity}“ > 3) {
return „#00FF00“;
}
else {
return „#FF00FF“;
}2. Versuch (nicht erfolgreich):
Im Entitätenwizard von L_UIDtree habe ich auf das Attribut „Specification“ folgendes Groovy Script hinterlegt:if (context.“#{DEF.l_uidtree.specification.context}“.“#{DEF.l_itemtree.quantity}“ > 3) {
return „#00FF00“;
}
else {
return „#FF00FF“;
}Anmerkung: Ich habe die Layouts von beiden Entitäten automatisch generieren lassen, und es sind alle verwendeten Felder im Layout vorhanden.
Kann ich im Groovy Script für die Hintergrundfarbe nicht auf den context eines Referenzfeldes zugreifen oder habe ich einen anderen Fehler im Script ?
Danke, Matthias
PS: Das Beispiel mit Quantity > 3 ist natürlich Quatsch, aber ich wollte den Test mit einem einfachen Integer Feld durchführen bevor ich mich an Status oder weitere Referenzen wage.
5 November 2013 um 18:54 Uhr #7216Matthias Dörr
TeilnehmerHallo,
ich habe weitere Versuche unternommen und zusätzliche log.info(„…“) Zeilen hinzugefügt.
Detailansicht:
– Hintergrundfarbe wird korrekt gesetzt
– Ausgabe(Scripting) liefert keine Fehlermeldungen und alle von mir definierten log.info EinträgeListenansicht (Liste als Suchergebnis sowohl als auch Subform auf Parent Detailansicht):
– Hintergrundfarbe grau (error=
– Ausgabe(Scripting) liefert folgenden Fehler:
2013-11-05 15:41:54,658 ERROR [org.nuclos.client.scripting.ScriptEvaluator] javax.script.ScriptException: java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationExceptionMein Script entspricht der Definition im Wiki:
fieldFromParent = context.“#{…context}“.“#{..}“Ich kann mir die Quantity sogar als Teil des ….value anzeigen lassen, aber ich kann nicht via ….context}“.“#{..}“ auf die Information zugreifen. Da ich aber „eigentlich“ die nuclosStateNumber benötige (welche ich mit nicht als Teil von ….value anzeigen lassen kann) komme ich auch so nicht weiter…
Is it a bug or a feature ?
Gruß, Matthias
6 November 2013 um 01:27 Uhr #7217Frank Pavlic
TeilnehmerHallo Matthias,
was passiert, wenn Du folgendes Skript verwendest:
def speccon = context."#{DEF.l_uidtree.specification.context}";if (speccon != null) {
def quant = speccon."#{DEF.l_itemtree.quantity}";
if (quant != null) {
log.info("DEBUG:" + quant);
if (quant > 3)
return "#00FF00";
} else {
log.info("DEBUG: Quantity NULL");
return "#FF00FF";
}
} else {
log.info("DEBUG: Specification-Context NULL!");
return "#FF00FF";
}
Damit müsste das Problem recht gut einzugrenzen sein.
Gruß
Frank6 November 2013 um 13:15 Uhr #7218Ramin Goettlich
TeilnehmerDer Zugriff auf Inhalte einer übergeordneten Entität kann nur dort erfolgen, wo die Inhalte der übergeordneten Entität auch zur Verfügung stehen: In der Detailansicht, in der die untergeordnete Entität als Subform eingeblendet ist.
Im Suchergebnis kennt Nuclos die Inhalte der übergeordneten Entität nicht, da diese nicht ins Suchergebnis geladen werden (Performance) und damit clientseitig nicht zur Verfügung stehen. Clientregeln (Groovy) werden clientseitig ausgeführt.
Workaround: In betroffener Entität ein z.B. berechnetes Attribut einführen, das den benötigten Inhalt liefert.
Wir arbeiten aktuell übrigens daran, Groovyregeln durch ein neues Konzept zu ersetzen, damit das clientseitig definierte Verhalten (z.B. Hintergrundfarbe) auch im Webclient unterstützt werden kann. Hinaus läuft das auf Clientregeln, die a) serverseitig ausgeführt werden können und b) in Java mit der bereits bekannten API programmiert werden können. Bei einer serverseitigen Ausführung von Clientregeln wäre mehr möglich, dort stünden ja alle Daten zur Verfügung.
6 November 2013 um 13:48 Uhr #7219Matthias Dörr
TeilnehmerHallo,
vielen Dank für die schnelle Antwort. Da wie beschrieben
context.“#{…context}“.“#{..}“
in der Listenansicht nicht zur Verfügung steht muss ich folgenden Weg gehen:
– zus. Attribut erstellen
– Berechnungsausdruck über „Konfiguration > Datenbankobjekt“ festlegen und zuweisen
– Hintergrundfarbe aufgrund dieses berechneten Wertes angeben.Vielen Dank für die Schnelle Antwort und auch für den Scripting Vorschlag (der zwar in der Listenansicht das selbe Problem hat aber mir dennoch für weitere Groovy scripte hilft !).
Gruß, Matthias
Anmerkung: Sofern das Attribut welches die Hintergrundfarbe steuern soll (hier: quantity) ein Attribut auf der Parent Entität ist (und nicht über ein weiteres Referenzfeld „geholt“ werden muss – z.B. nuclosStateNumber) dann kann man auch das Referenzfeld so konfigurieren daß das Attribut angezeigt wird (z.B. ${Teilenummer}, ${Benennung} [$(Quantity)]) und dann mit String Operationen darauf zugreifen > geht auch in Groovy, wenn auch nicht elegant.
6 November 2013 um 13:51 Uhr #7220Ramin Goettlich
TeilnehmerZum Problem aus der letzten Anmerkung siehe übrigens:
7 November 2013 um 16:38 Uhr #7231Matthias Dörr
TeilnehmerHallo,
Danke ! Durch die Tips von Novabit habe ich eine Lösung gefunden (es ging mir ja eigentlich um die farbliche Darstellung des Status, ich habs hier nur erstmal über ein anderes Feld (quantity) versucht welches sich direkt auf der referenzierten Entität befindet. Die Lösung dazu poste ich gleich unter:
https://www.nuclos.de/forum/allgemeines-zu-nuclos/5222-statusanzeige-im-subform
Gruß, Matthias
-
AutorBeiträge