Home Forum Nuclos Entwicklung Makros und Regeln Methoden von Geschäftsregeln weiderverwenden

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #3687
    Markus Glitzner
    Teilnehmer

    Hallo!

    Ich habe mir fogende Geschäftsregel beim Speichern einer Entität gebaut:
    public void rule(RuleInterface server) throws NuclosBusinessRuleException {
    String field = "auftragsnummer"; // the field name of the entity e.g. Aufträge
    String key = "Auftragsnummer"; // the value in the name field of the entity Nummernkreise

    if (server.isObjectNew()){
    //get the next value and increase it
    String value = server.callDbFunction("GET_NEXTVALUE", String.class , key);
    server.callDbProcedure("SET_NEXTVALUE", key);

    //get the current entity name and set the value
    String entity = org.nuclos.server.genericobject.Modules.getInstance().getEntityNameByModuleId(server.getModuleId());
    server.setFieldValue(entity, field, value);
    }
    }

    Diese Regel wird von mehreren Entitäten verwendet wobei sich immer nur die beiden Werte für field und key ändern.

    Ich würde nun gerne die Regel auslagern und von anderen Geschäftsregeln erneut aufrufen und die Parameter server, field u. key übergeben, sodass sich meine Geschäftsregel der einzelnen Entitäten auf etwa dieses Format verkürzen:
    public void rule(RuleInterface server) throws NuclosBusinessRuleException {
    setNextValue(server, "auftragsnummer", "Auftragsnummer");
    }

    Geht das? Wenn ja wie?

    Schöne Grüße

    #3688
    Ramin Goettlich
    Teilnehmer

    Hallo hugo,

    für die Wiederverwendung von Code in Geschäftsregeln gibt es die sog. „Bibliotheksregeln“. Einfach eine neue Bibliotheksregel z.B. wie folgt anlegen:

    public class Helper {
    public static void setNextValue(...) {
    ...

    und dann in Geschäftsregeln z.B. so verwenden:

    Helper helper = new Helper();
    helper.setNextValue(...);

    Grüsse,
    nuclosian

    #3689
    Markus Glitzner
    Teilnehmer

    Danke!

    mit einer kleinen import Ergänzung hat es funktioniert:

    Bibliotheksregel://package für RuleInterface u. NuclosBusinessRuleException
    import org.nuclos.server.ruleengine.*;

    public abstract class Helper {

    public static void setNextValue(RuleInterface server, String field, String key) throws NuclosBusinessRuleException {
    //field: the field name of the entity e.g. Aufträge
    //key: the value in the name field of the entity Nummernkreise

    if (server.isObjectNew()){
    //get the next value and increase it
    String value = server.callDbFunction("GET_NEXTVALUE", String.class, key);
    server.callDbProcedure("SET_NEXTVALUE", key);

    //get the current entity name and set the value
    String entity = org.nuclos.server.genericobject.Modules.getInstance().getEntityNameByModuleId(server.getModuleId());
    server.setFieldValue(entity, field, value);
    }
    }
    }

    Geschäftsregel:public void rule(RuleInterface server) throws NuclosBusinessRuleException {
    Helper.setNextValue(server, "auftragsnummer", "Auftragsnummer");
    }

    Schöne Grüße

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