Home › Forum › Nuclos Entwicklung › Makros und Regeln › Fehler in Regeln nach Update
- Dieses Thema hat 2 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 12 Jahre, 9 Monaten von
Matthias Haake.
-
AutorBeiträge
-
31 August 2010 um 14:03 Uhr #2512
Matthias Haake
TeilnehmerHallo,
seit dem Update von 2.5.1-RC9 auf 2.5.1-final bekomme ich in fast allen Regeln Fehlermeldungen. Damit lässt sich hier fast nichts mehr speichern – das ist wirklich sehr ärgerlich, zumal nirgends eine Doku zu finden ist, was in welcher Version verändert wurde (ChangeLog).
Wie kann ich solche Fehler beheben?
cannot find symbolsymbol : constructor CollectableGenericObjectEntityField(org.nuclos.server.attribute.valueobject.AttributeCVO)
location: classorg.nuclos.common.genericobject.CollectableGenericObjectEntityField
CollectableEntityField entityField = new org.nuclos.common.genericobject.CollectableGenericObjectEntityField(AttributeCache.getInstance().getAttribute("address", "addressformat"));
Ziel der Regel ist es, alle Datensätze (Adressen) zu finden, die das aktuelle Objekt (Adressformat) referenzieren. In allen gefundenen Adressen soll dann ein Text-Feld neu berechnet werden.
Die obige Codezeile soll das AdressFormat-ID-Feld (Referenz) in der Entität Adresse ermitteln. Dieses Feld wird dann in einer „CollectableComparison“-Condition verwendet um dann mittels server.getGenericObjectIds alle Adressen zu finden…
Hier nochmal der bis zum Update funktionierende Code aus der Regel beim Speichern eines Adressformates:
public void rule(RuleInterface server) throws NuclosBusinessRuleException
{
Integer objectId = server.getObjectId();if (server.hasFieldChanged("addressformat", "format") && objectId != null)
{
String format = (String)server.getFieldValue("addressformat", "format");// load all addresses with this address format
CollectableEntityField entityField = new org.nuclos.common.genericobject.CollectableGenericObjectEntityField(AttributeCache.getInstance().getAttribute("address", "addressformat"));
CollectableComparison condition = new CollectableComparison(entityField, ComparisonOperator.EQUAL, new CollectableValueIdField(objectId, ""));
Collectionaddresses = server.getGenericObjectIds("address", condition); for (Iterator
it = addresses.iterator(); it.hasNext(); )
{
Integer addressId = it.next();
...
}
}
Danke und viele Grüße,
Matthias1 September 2010 um 17:35 Uhr #2526Alpha Alpha
TeilnehmerHallo,
durch Vereinheitlichungen am Metadatenmodell musste der Konstruktor für CollectableGenericObjectEntityField angepasst werden. Seit Version 2.5.1-final erwartet dieser einen zweiten Parameter (vom Typ EntityFieldMetaDataVO).
Sie erhalten diesen zweiten Parameter von der MetaDataServerProvider-Instanz via getEntityField. In ihrem Fall also MetaDataServerProvider.getInstance().getEntityField(„address“,“addressformat“):
public void rule(RuleInterface server) throws NuclosBusinessRuleException {
Integer objectId = server.getObjectId();if(server.hasFieldChanged("addressformat", "format") && objectId != null) {
String format = (String)server.getFieldValue("addressformat", "format");// load all addresses with this address format
CollectableEntityField entityField = new org.nuclos.common.genericobject.CollectableGenericObjectEntityField(
AttributeCache.getInstance().getAttribute("address","addressformat"),
MetaDataServerProvider.getInstance().getEntityField("address", "addressformat"));
CollectableComparison condition = new CollectableComparison(
entityField,
ComparisonOperator.EQUAL,
new CollectableValueIdField(objectId, " "));
Collection addresses = server.getGenericObjectIds("address",condition);for(Iterator it = addresses.iterator(); it.hasNext();) {
Integer addressId = it.next();
// ...
}
}
}
Ich hoffe, diese Antwort hilft Ihnen weiter.
Viele Grüße,
alpha1 September 2010 um 17:45 Uhr #2528Matthias Haake
TeilnehmerVielen Dank für die Hilfe! Das hilft sehr weiter und ich werde es testen, so bald die 2.5.1-final wieder im Download verfügbar ist.
Viele Grüße,
Matthias -
AutorBeiträge