Home Forum Nuclos Konfiguration Maskenlayouts Bearbeiten Aktiv

Ansicht von 8 Beiträgen - 1 bis 8 (von insgesamt 8)
  • Autor
    Beiträge
  • #8328
    Markus Reichel
    Teilnehmer

    Hallo zusammen,

    ich würde gerne im Subformular eines Layouts einzelne Spalten deaktivieren. Zum Schluss soll es ungefähr sowas sein. Wenn status „xy“, dann feld „ab“ bearbeitung deaktivieren.

    Ich wollte schön leicht anfangen und das skript immer weiter aufbauen (Ich hab keine groovy Erfahrung und wollte es nur anhand des nuclos wikis machen). Also wollte ich erst einmal einfach nur das Feld deaktivieren ohne irgendeine Bedingung. Das überaus kompliziert wirkende Skript sieht so aus:

    if (context.field == context."#{XYZ.poRec_uid_insprec.value}")
    return false

    Und selbst das funktioniert nicht :blush:

    Also für XYZ hab ich halt unseren Lokalen Identifzierer des Nuclets reingepackt. „poRec_uid_insprec“ ist der Name des Businessobjektes des Subformulars (der name der im nuclet aufgelistet ist). Und Value ist der Feldname des Attributes, welches ich im Subformular deaktivieren möchte. Ich fühl mich gerade echt blöd, so schwer kann das doch nicht sein :laugh:
    Ich hoffe ihr könnt mir helfen, danke im Vorraus.

    Gruß Markus

    #8329
    Frank Pavlic
    Teilnehmer

    Hallo Markus,
    poRec_uid_insprec solltest Du ersetzen mit dem Namen des Businessobjekts, den Du beim Erstellen des Businesobjekts gewählt hast.
    Wenn z.B. poRec_uid_insprec der nuclet-Name des Businesobjekts „Auftragspositionen“ ist , dann lautet deine if-Anweisung.
    if(context.field.equals(„#{XYZ.Auftragspositionen.value}“)
    return false;
    Hast Du dein Feld wirklich „value“ genannt? Wenn ja, dann passt es so, falls das Feld doch „Menge“ heisst, dann lautet die if-Anweisung:
    if(context.field.equals(„#{XYZ.Auftragspositionen.menge}“)
    return false;

    Kurz: Verwende die Bezeichnungen der Businessobjekte und Attributnamen, die Du gewählt hast und nicht irgendwelche interne nuclet-Bezeichner.

    Ich hoffe, es ist verständlich formuliert.

    Gruß
    Frank

    #8330
    Markus Reichel
    Teilnehmer

    Hallo Frank,

    danke für die superschnelle Antwort. Der Name des Businessobjekts ist der selbe wie im Nuclet. Und ja, das Feld heißt wirklich value 😆 ist halt nen Messwert ^^ Zumindes wird es im Attribut auf der letzten Seite als Feldname: Value aufgelistet.
    Ich habs jetzt mit == verglichen und nicht mit .equals, aber das sollte doch kein unterschied machen oder?!
    Ich probier es gleich morgen mal mit .equals

    Gruß Markus

    edit:
    muss es nicht
    if(context.field.equals(context."#{XYZ.Auftragspositionen.value}")

    heißen?

    #8331
    Frank Pavlic
    Teilnehmer

    Hallo Markus,
    nein, es darf nicht so heissen, denn context.field willst Du ja mit dem Feldnamen vergleichen und nicht mit dem Feldinhalt.

    Gruß
    Frank

    #8332
    Markus Reichel
    Teilnehmer

    Danke für eure Hilfe, klappt alles

    #8334
    Markus Reichel
    Teilnehmer

    Noch eine Zusatzfrage.
    Kann ich irgendwie über groovy abfragen ob der aktuelle Benutzer ein Superuser ist?
    Ich dachte an sowas:

    if (context."#{def.nuclos_user.superuser}" == true){
    ...
    }

    „def“ muss man ja angeben wenn eine entity keinem nuclet zugeordnet ist, oder? Das wäre ja beim user der Fall.
    „nuclos_user“ heißt ja die userentity soweit ich es richtig gelesen habe. (nachgelesen unter http://wiki.nuclos.de/download/attachments/327856/NuclosEntity.pdf?version=1&modificationDate=1346944436000&api=v2 )
    „superuser“ wäre ja der Feldname (nachgelesen im selben link)

    Funktioniert leider nicht, hat jemand eine Idee?

    Gruß Markus

    #8337
    Papa Schlumpf
    Teilnehmer

    Das klappt so nicht, weil man in der Groovy Regel nur die Objekte und Felder verwenden kann, die auch geladen sind (d.h. irgendwo im Formular angezeigt werden).

    Es gibt die Variable [tt]username[/tt], in der der Name des aktuellen Benutzers steht. Damit man dessen Rechte bekommt muss man wahrscheinlich eine Regel benutzen, wie hier unten auf der Seite.

    #8341
    Ramin Goettlich
    Teilnehmer

    Nein, das geht nicht. Groovy wird rein clientseitig ausgeführt, man kommt also immer nur an das ran, was auf der jeweiligen Maske auch sichtbar ist.

    Man kann aber aus Groovy heraus auf serverseitige Funktionen zugreifen, eine solche Funktion könnte dann z.B. die Info über den Superuser-Status liefern.

    Siehe http://wiki.nuclos.de/pages/viewpage.action?pageId=327846, dort Abschnitt „Funktionen über Bibliotheksregeln“.

    Da dann aber ein Server Roundtrip bei jeder Ausführung des Groovy-Skriptes im Spiel ist, muss man sich ggf. Performanceimplikationen vor Augen halten.

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