Home › Forum › Nuclos Entwicklung › Makros und Regeln › Datensätze mit zwei Bedingungen holen ?
- Dieses Thema hat 2 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 10 Jahre, 11 Monaten von
Frank Pavlic.
-
AutorBeiträge
-
9 Juli 2012 um 20:09 Uhr #5748
Frank Pavlic
TeilnehmerHallo zusammen,
gibt es eine Klasse/Möglichkeit in einer Regel, Datensätze aus einer Tabelle holen, die zwei oder mehr Bedingungen erfüllen, aber ohne eine for/while-Schleife Prozedur? In SearchConditionUtils konnte ich nichts dergleichen finden.Problem:
Ich will in einer Geschäftsregel alle Aufträge holen, die zu einer Kundennummer gehören _UND_ einen bestimmten Auftragsstatus haben.
1. server.getDependants(…) gibt mir alle Aufträge des Kunden zurück oder alle mit einem bestimmten Status. Klar kann ich hier nun durch loopen, allerdings sehe ich das nicht gerade als sehr performant an.
2. SearchConditionUtils habe ich bisher auch nur die Möglichkeit gesehen, nur eine Bedingung mitzugeben.
3. Kann ich mit server.getDependants auch dynamische Entitäten ansprechen ??? Das wäre auf jeden Fall auch eine Lösung für mich.Ideen/Lösungen/Vorschläge werden dankend angenommen.
Gruß
Frank
9 Juli 2012 um 20:48 Uhr #5749Ramin Goettlich
TeilnehmerMit den SearchConditionUtils geht das, z.B.
package org.nuclet.mynuclet.test;import org.nuclos.server.masterdata.valueobject.MasterDataVO;
import org.nuclos.server.ruleengine.NuclosBusinessRuleException;
import org.nuclos.common.collect.collectable.searchcondition.*;
import org.nuclos.common.NuclosFatalException;public class Test1
{
public java.util.Collection getOrdersByStatus_nullsafe(String sStatus, Integer iKunde) {
CollectableSearchCondition condStatus = org.nuclos.common.SearchConditionUtils.newMDComparison(
org.nuclos.server.common.MasterDataMetaCache.getInstance().getMetaData(""),
"nuclosState",
org.nuclos.common.collect.collectable.searchcondition.ComparisonOperator.EQUAL,
sStatus);
CollectableSearchCondition condKunde = org.nuclos.common.SearchConditionUtils.newMDReferenceComparison(
org.nuclos.server.common.MasterDataMetaCache.getInstance().getMetaData("<Entitätsname für Auftrag"),
"",
iKunde);
CompositeCollectableSearchCondition cond = new CompositeCollectableSearchCondition(org.nuclos.common.collect.collectable.searchcondition.LogicalOperator.AND);
cond.addOperand(condStatus);
cond.addOperand(condKunde);
java.util.Collection colOrders = server.getMasterDataIds("""", new org.nuclos.server.genericobject.searchcondition.CollectableSearchExpression(cond));
if (!colOrders.isEmpty()) {
return colOrders;
} else {
return new java.util.ArrayList();
}
}
}
code ist nicht getestet…
es gibt auch LogicalOperator.OR und andere
9 Juli 2012 um 21:00 Uhr #5750Frank Pavlic
TeilnehmerHallo nuclosian,
super, vielen Dank für deine Lösung und vor allem schnelle Antwort. Ich habe vor ein paar Minuten fast dasselbe implementiert, habe ich in ImportUtils.java gefunden. Allerdings finde ich deine Lösung
besser, da ich __NICHT__ newMDReferenceComparison verwendet habe, das sieht mir aber richtiger aus ;-).Gruß
Frank
-
AutorBeiträge