Home › Forum › Nuclos Entwicklung › Makros und Regeln › Entität hinter Regel auslesen
- Dieses Thema hat 8 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 11 Jahre, 6 Monaten von
Frank Pavlic.
-
AutorBeiträge
-
21 November 2011 um 18:52 Uhr #4457
Carsten Hof
TeilnehmerHallo zusammen,
ich hoffe irgendjemand von euch kann mir helfen. Eigentlich habe ich das Gefühl, dass die Lösung ganz nahe liegt, aber ich sehe sie trotzdem nicht.
Und zwar habe ich eine Geschäftsregel, die auf mehreren Entitäten ausgeführt werden kann. Ich würde jetzt gerne den Namen der Entität auslesen, auf der ich gerade arbeite.
Zum Beispiel habe ich eine Regel „Berechne Korrekturfaktor“ die beim Speichern der Entitäten A und B ausgeführt wird. In dieser Regel werden Werte von A und B geholt und der berechnete Wert in ein Feld in A geschrieben. A und B sind über ein Referenzfeld miteinander verbunden.
Das Problem das ich habe ist, dass ich ja unterschiedliche Methoden brauche je nachdem auf welcher Entität ich die Regel anstoße. Zu allem Überfluss hat eine der beiden Entitäten auch noch ein Statusmodell und die andere nicht. Wüsste ich auf welcher Entität ich mich befinde, wüsste ich auch wie ich auf die benötigten Felder zugreifen kann.
Hintergrund ist, dass der berechnete Wert jederzeit aktuell sein soll, egal ob ich jetzt in der einen oder anderen Entität einen Wert geändert habe. Ich brauche auch auf jeden Fall, dass beide Entitäten editierbar bleiben, einfach eine der beiden Masken auf nur lesenden Zugriff zu stellen ist leider keine Option.
Auch will ich vermeiden zwei getrennte Regeln zu schreiben und jeder nur eine Entität zuzuordnen.Gibt es eine Lösung für mein Problem?
Vielen Dank schonmal für die Hilfe,
Bettina21 November 2011 um 22:54 Uhr #4458Matthias Haake
TeilnehmerHallo Bettina,
für Entitäten mit Statusmodell kann man den Namen der Entität so ermitteln:
String entityName = org.nuclos.server.genericobject.Modules.getInstance().getEntityNameByModuleId(server.getModuleId());
Für Entitäten ohne Statusmodell ist mir leider kein Weg bekannt.
Viele Grüße,
Matthias22 November 2011 um 17:53 Uhr #4475Carsten Hof
TeilnehmerHi nochmal,
danke für deine schnelle Antwort, Matthias. Das hilft mir wirklich weiter. Damit kann ich schon mal einen Teil meines Problems lösen.
Es gibt doch bestimmt einen Weg mit MasterData so ähnlich zu verfahren. Werd mal nochmal danach suchen.
Sonst bin ich weiter über jeden Ratschlag dankbar 😉
Viele Grüße,
Bettina22 November 2011 um 18:49 Uhr #4477Matthias Haake
TeilnehmerHallo Bettina,
also als wirklich ganz, ganz üblen Work-a-round könnte man sich eine DB-Funktion schreiben. Diese würde nacheinander alle in Frage kommenden Entity-Tabellen (ohne Statusmodell) nach der aktuellen ID durchsuchen und bei einem Treffer den Namen der Entität zurückgeben. Aus Performancesicht ist das kein großer Wurf – aber als Übergangslösung vielleicht besser als nichts. Hängt halt viel davon ab, wie viele Daten im System sind und wie viele Entitäten ohne Statusmodell es gibt.
CREATE FUNCTION GetEntityName
(
@intid NUMERIC(20,0)
)
RETURNS VARCHAR(255)
AS
BEGINIF EXISTS (SELECT 1 FROM T_EO_A WHERE INTID = @intid)
RETURN 'A';
IF EXISTS (SELECT 1 FROM T_EO_B WHERE INTID = @intid)
RETURN 'B';RETURN '';
END
Das ganze kannst Du dann in der Businessregel aufrufen, falls die erste Methode nicht klappt:
String entityName = org.nuclos.server.genericobject.Modules.getInstance().getEntityNameByModuleId
Viel Erfolg,
Matthias23 November 2011 um 09:51 Uhr #4480Thomas Schiffmann
TeilnehmerHallo Bettina,
Matthias hat die aktuellen Möglichkeiten bereits vollständig erläutert. D.h. es gibt aktuell leider keine andere Möglichkeit, die Entität eines MasterDataVOs zu ermitteln.
Ich habe für das Problem das Ticket NUCLOS-264 erstellt – wir werden es sobald wie möglich berücksichtigen.
Viele Grüße
tsc25 November 2011 um 15:23 Uhr #4520Carsten Hof
TeilnehmerHi Matthias, hi tsc,
danke für eure Antworten. Dann werde ich solange auf diesen beiden Möglichkeiten aufbauen.
Schön, dass der Weg für Entitäten mit Statusmodell so einfach ist. Das ist sowieso der wichtigere Teil für mich im Moment.Viele Grüße,
Bettina25 November 2011 um 17:04 Uhr #4528Frank Pavlic
TeilnehmerHallo Bettina,
wäre denn für diesen Fall nicht genau die Möglichkeit besser, das Feld, welches immer aktuell sein soll, in der Entität A mit einer Berechnungsvorschrift (Berechnete Attribute) zu definieren. Da es aus Datenbanksicht immer dieselben Felder aus A und B sind, welche für die Berechnung des Korrekturfaktors verwendet werden, bietet sich doch diese Möglichkeit an ?
Dann musst Du dir auch keine Gedanken mehr über Regelzuordnungen machen.
Siehe hier:
http://wiki.nuclos.de/Datenobjekte_BerechneteAttributeOder habe ich etwas falsch verstanden?
Gruß
Frank
25 November 2011 um 18:02 Uhr #4531Carsten Hof
TeilnehmerHallo Frank,
nein das stimmt. So wie ich es beschrieben habe hast du Recht und das wäre der eleganteste Weg.
Aber ich hatte in meinem Eintrag das Problem vereinfacht. Und das Feld, in das geschrieben werden soll ist kein Feld sondern ein Unterformular. Außerdem gibt es viele solcher Regeln, die alle solche Einträge im Unterformular erzeugen und verschiedenste Felder dafür auslesen.
Wie gesagt, ich hatte vereinfacht 😉Vielen Dank trotzdem für deine Hilfe und den neuen Lösungsvorschlag! Ich weiß das zu schätzen, wie schnell man hier geholfen bekommt.
Viele Grüße,
Bettina25 November 2011 um 19:11 Uhr #4532Frank Pavlic
TeilnehmerHallo Bettina,
ahh, jetzt wirds hell :-).Gruß
Frank
-
AutorBeiträge