Home › Forum › Nuclos Konfiguration › Maskenlayouts › Bearbeiten Aktiv
- Dieses Thema hat 7 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 8 Jahren, 8 Monaten von
Ramin Goettlich.
-
AutorBeiträge
-
30 März 2015 um 20:48 Uhr #8328
Markus Reichel
TeilnehmerHallo 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 falseUnd 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
31 März 2015 um 00:35 Uhr #8329Frank Pavlic
TeilnehmerHallo 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ß
Frank31 März 2015 um 01:46 Uhr #8330Markus Reichel
TeilnehmerHallo 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 .equalsGruß Markus
edit:
muss es nicht
if(context.field.equals(context."#{XYZ.Auftragspositionen.value}")
heißen?31 März 2015 um 02:06 Uhr #8331Frank Pavlic
TeilnehmerHallo Markus,
nein, es darf nicht so heissen, denn context.field willst Du ja mit dem Feldnamen vergleichen und nicht mit dem Feldinhalt.Gruß
Frank31 März 2015 um 11:26 Uhr #8332Markus Reichel
TeilnehmerDanke für eure Hilfe, klappt alles
31 März 2015 um 19:26 Uhr #8334Markus Reichel
TeilnehmerNoch 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
3 April 2015 um 09:43 Uhr #8337Papa Schlumpf
TeilnehmerDas 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.
4 April 2015 um 16:55 Uhr #8341Ramin Goettlich
TeilnehmerNein, 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.
-
AutorBeiträge