Home Forum Nuclos Entwicklung Makros und Regeln Entität hinter Regel auslesen

Ansicht von 9 Beiträgen - 1 bis 9 (von insgesamt 9)
  • Autor
    Beiträge
  • #4457
    Carsten Hof
    Teilnehmer

    Hallo 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,
    Bettina

    #4458
    Matthias Haake
    Teilnehmer

    Hallo 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,
    Matthias

    #4475
    Carsten Hof
    Teilnehmer

    Hi 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,
    Bettina

    #4477
    Matthias Haake
    Teilnehmer

    Hallo 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
    BEGIN

    IF 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,
    Matthias

    #4480
    Thomas Schiffmann
    Teilnehmer

    Hallo 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
    tsc

    #4520
    Carsten Hof
    Teilnehmer

    Hi 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,
    Bettina

    #4528
    Frank Pavlic
    Teilnehmer

    Hallo 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_BerechneteAttribute

    Oder habe ich etwas falsch verstanden?

    Gruß

    Frank

    #4531
    Carsten Hof
    Teilnehmer

    Hallo 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,
    Bettina

    #4532
    Frank Pavlic
    Teilnehmer

    Hallo Bettina,
    ahh, jetzt wirds hell :-).

    Gruß

    Frank

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