Home Forum Nuclos Entwicklung Makros und Regeln Referenzierte Objekte abfragen

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #2447
    Matthias Haake
    Teilnehmer

    Hallo,

    folgendes Szenario: Es gibt zwei Entitäten „Anrede“ und „Person“. Jeder Person muss eine Anrede zugeordnet werden. Auf Basis der gewählten Anrede wird beim Speichern der Person durch eine Regel ein Wert berechnet und dort abgespeichert.

    Anforderung: Wenn in einer Anrede etwas verändert wird, soll bei allen Personen, die diese Anrede referenzieren der oben genannte Wert neu berechnet und aktualisiert werden.

    Problem: Wie selektiere ich alle Personen, die eine bestimmte Anrede besitzen? Bisheriger Ansatz innerhalb der Regel beim Speichern einer Anrede:

    Integer objectId = server.getObjectId();
    // wie heißt nun das Attribut wo die ID der Anrede gespeichert ist?
    CollectableComparison condition = server.newGOComparison(„person“, „formofaddress“, ComparisonOperator.EQUAL, objectId);
    Collection persons = server.getGenericObjectIds(„person“, condition);

    Leider fragt das generierte SQL-Statement das Feld „STRVALUE_STRFORMOFADDRESS“ ab und nicht wie gewünscht das Feld „INTID_STRFORMOFADDRESS“. Was muss ich verändern, um die gewünschten Personen zu erhalten?

    Vielen Dank und Grüße,
    Matthias

    #2451
    Thomas Schiffmann
    Teilnehmer

    Hallo Matthias,

    das RuleInterface ist an dieser Stelle noch nicht vollständig an das neue Datenmodell angepasst. Mit folgendem Listing sollte es funktionieren:


    Integer objectId = server.getObjectId();
    CollectableEntityField clctef = new org.nuclos.common.genericobject.CollectableGenericObjectEntityField(
    AttributeCache.getInstance().getAttribute("person", "formofaddress"),
    AttributeCache.getInstance().getEntityField("person", "formofaddress")
    );

    CollectableComparison condition = new CollectableComparison(clctef, ComparisonOperator.EQUAL, new CollectableValueIdField(objectId, ""));

    Collection persons = server.getGenericObjectIds("person", condition);

    Das RuleInterface wird in einer der nächsten Versionen sicherlich noch in Bezug auf das neue Datenmodell erweitert, sodass Abfragen dieser Art auch einfacher zu realisieren sind.

    Viele Grüße
    tsc

    #2454
    Matthias Haake
    Teilnehmer

    Vielen Dank – der Ansatz hat mir sehr geholfen. Leider findet der Compiler die Methode „getEntityField“ im AttributeCache nicht. Ich habe es ein bißchen umgestellt – jetzt läuft es. Danke nochmals!!!


    Integer objectId = server.getObjectId();

    CollectableEntityField entityField = new org.nuclos.common.genericobject.CollectableGenericObjectEntityField(AttributeCache.getInstance().getAttribute("person", "formofaddress"));

    CollectableComparison condition = new CollectableComparison(entityField, ComparisonOperator.EQUAL, new CollectableValueIdField(objectId, ""));

    Collection persons = server.getGenericObjectIds("person", condition);

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