Home Forum Nuclos Entwicklung Makros und Regeln Datensätze mit zwei Bedingungen holen ?

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #5748
    Frank Pavlic
    Teilnehmer

    Hallo 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

    #5749
    Ramin Goettlich
    Teilnehmer

    Mit 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

    #5750
    Frank Pavlic
    Teilnehmer

    Hallo 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

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