Home › Forum › Nuclos Entwicklung › Makros und Regeln › Referenzierte Objekte abfragen
- Dieses Thema hat 2 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 12 Jahre, 9 Monaten von
Matthias Haake.
-
AutorBeiträge
-
25 August 2010 um 19:47 Uhr #2447
Matthias Haake
TeilnehmerHallo,
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);
Collectionpersons = 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,
Matthias26 August 2010 um 10:16 Uhr #2451Thomas Schiffmann
TeilnehmerHallo 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
tsc26 August 2010 um 13:00 Uhr #2454Matthias Haake
TeilnehmerVielen 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);
-
AutorBeiträge