Home Forum Allgemeines Allgemeines zu Nuclos Fehler Hintergrundfarbe Groovy Scripting

Ansicht von 7 Beiträgen - 1 bis 7 (von insgesamt 7)
  • Autor
    Beiträge
  • #7215
    Matthias Dörr
    Teilnehmer

    Hallo,

    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.

    #7216
    Matthias Dörr
    Teilnehmer

    Hallo,

    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äge

    Listenansicht (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.UnsupportedOperationException

    Mein 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

    #7217
    Frank Pavlic
    Teilnehmer

    Hallo 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ß
    Frank

    #7218
    Ramin Goettlich
    Teilnehmer

    Der 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.

    #7219
    Matthias Dörr
    Teilnehmer

    Hallo,

    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.

    #7220
    Ramin Goettlich
    Teilnehmer

    Zum Problem aus der letzten Anmerkung siehe übrigens:

    http://support.nuclos.de/browse/NUCLOS-70

    #7231
    Matthias Dörr
    Teilnehmer

    Hallo,

    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

Ansicht von 7 Beiträgen - 1 bis 7 (von insgesamt 7)