Home Forum Nuclos Entwicklung Makros und Regeln Beschreibung der Regeln-APIs

Ansicht von 13 Beiträgen - 1 bis 13 (von insgesamt 13)
  • Autor
    Beiträge
  • #2430
    Jan Smiesko
    Teilnehmer

    Hallo Forum!

    Gibt es eine Beschreibung der APIs für Regeln?

    FG
    Jan

    #2436
    Ramin Goettlich
    Teilnehmer

    Leider noch nicht, folgt aber bald hier: http://wiki.nuclos.de/2.5/Wiki.jsp?page=Regeln%20API

    Ergänzende Anmerkung:

    Entwickelt man Regeln in Eclipse, hat man dort natürlich die volle Code Completion Unterstützung etc.

    In der neuesten Nuclos Version unterstützt der Regeleditor ausserdem bereits einen Debugmodus und im Ansatz auch schon Code Completion. Das wird in einem der nächsten Releases noch erweitert.

    #2440
    Matthias Haake
    Teilnehmer

    Entwickelt man Regeln in Eclipse, hat man dort natürlich die volle Code Completion Unterstützung etc.

    Und man kann vernünftig testen (z.B. mit JUnit, EasyMock).

    #2509
    Jan Smiesko
    Teilnehmer

    Danke für die Vorschläge!

    Mit Eclipse bzw. Java habe ich wenig Erfahrung und die Einrichtung von Eclipse mit all den Abhängigkeiten scheint mir recht kompliziert zu sein. (evtl. gibt es ein Tutorial zur Einrichtung)
    Deshalb bevorzuge ich eine integrierte IDE-Umgebung in Nuclos, um mich auf das Wesentliche konzentrieren zu können.

    Bin ich richtig in der Annahme, dass die Regel-APIs im File

    nuclos/server/ruleengine/RuleInterface.java

    zu finden sind?

    Ich habe z.B. eine setField-Methode gefunden, diese verlangt aber mehr Parameter, als in einem Beispiel (2 Parameter), das ich mir ansah. Habe ich das richtige File oder was hat es mit dem Parameterunterschied auf sich?

    Auszug aus RuleInterface.java

    /**
    * sets a field of the current object.
    * @param sFieldName field to change value for
    * @param iValueId new value id
    * @param oValue new value
    * @precondition sFieldName != null
    */
    public void setField(String sEntityName, String sFieldName, Integer iValueId, Object oValue) {…}

    FG
    Jan

    #2543
    Claudia Mangstl
    Teilnehmer

    Hallo Zusammen,

    die API zum Regelinterface kann jetzt hier nachgeschlagen werden.

    Viele Grüße,
    Claudia M.

    #2545
    Matthias Haake
    Teilnehmer

    Vielen Dank für den Link.

    Ich hätte dazu noch eine Frage: Wird es später auch eine Doku für die Objekte geben, die vom RuleInterface zurück gegeben werden (z.B. MasterDataVO, DynamicAttributeVO)?

    Ich fände es auch sehr hilfreich, wenn anhand eines kleines Beispieles mit ein/zwei Entitäten mal erklärt wird, was genau durch ein MasterDavaVO dargestellt wird und wann man Field und wann Attribute verwenden muss/sollte. Oder was der Unterschied zwischen MasterDataIds und GenericObjectIds sind – wann braucht man was? Oder was genau „getCellValues“ denn macht. In der Doku sieht man zwar die Signatur der Methode aber ohne jegliche Erklärungen…

    Vielen Dank und Grüße,
    Matthias

    #2546
    Jan Smiesko
    Teilnehmer

    Hallo,

    und danke für den Link. Ich würde mir auch eine Erklärung der Objekte wünschen.

    Was ich getestet habe (bitte Support-Team um Korrektur, falls nicht richtig):

    public void rule(RuleInterface server) throws NuclosBusinessRuleException {

    MasterDataVO mdVOAdresse = server.getMasterData();
    mdVOAdresse.setField(„test“, „Test1“ );

    }

    ***
    server.getMasterData();
    liefert das Objekt ‚MasterDataVO‘ (VO ? ValueObject), welches auf den aktuellen Datensatz zeigt, wenn ich mich in einem Modul befinde. In diesem Fall bin ich im Modul ‚Adressen‘ unter Details. In der Entität Adressen ist ein Textfeld ‚test‘. Dieses wird z.B. beim Speichern zu Testzwecken mit einem Wert ‚Test1′ automatisch befüllt:

    mdVOAdresse.setField(„test“, „Test1“ );
    ***

    Habe das obere Beispiel auch mit mdVOAdresse.setFieldValue(…) getestet, hat aber nicht funktioniert. Was ist z.B. der Unterschied zwischen den Methoden ’setField‘ und ’setFieldValue‘?

    FG
    Jan

    #2548
    Claudia Mangstl
    Teilnehmer

    Hallo Jan,

    sämtliche Methoden stammen noch aus dem Vorgänger-Konzept. Hier hatten wir eine Unterscheidung zwischen Modul- und Stammdatenentitäten, die auch im Datenmodell unterschiedlich behandelt wurden. Daher gibt es noch viele unterschiedliche Wege, um ans Ziel zu kommen.

    Im Wiki unter Geschäftsregeln gibt es jetzt einen Eintrag mit einigen Methoden zum Setzen und Auslesen von Werten. Wir werden diese Beispiele nach und nach erweitern.

    Nun zu Ihrem Versuch:
    Der Aufruf „MasterDataVO mdVOAdresse = server.getMasterData();“ liefert nur die Metadaten zum jeweiligen Serverobjekt zurück.

    Handelt es sich bei den Adressen um ein einzelnes Feld ?
    Dann rufen Sie zum Eintragen des Wertes „Test1“ durch diesen Aufruf:

    server.setFieldValue(„adresse“, „test“, „Test1“);

    Der Unterschied zwischen setFieldValue und setField ist, dass es sich beim Aufruf von setField um ein Feld mit Fremdbezug handeln muss, also ein Feld mit Wert+ID.

    —–

    Oder handelt es sich bei den Adressen um ein Unterformular innerhalb einer anderen Entität ?
    Dann müssen Sie die Daten des Unterformulars erst abhängig von der Entität laden mit

    Collection collmdvo = server.getDependants(„adresse“);
    Jetzt über die Collection iterieren und den Wert des entsprechenden Feldes setzen mit

    mdvo.setField(„test“, „Test1“);

    Bitte beachten: im ersten Fall bezieht sich der Aufruf auf das server-Objekt, das in der Methode der Regel übergeben wird.
    Im zweiten Fall handelt es sich um eine andere Entität „mdvo“ (MasterDataVO), die an das „server“-Objekt gekoppelt ist. Beide Fälle haben unterschiedliche Methoden.

    Ich hoffe, ich konnte etwas helfen. Bitte zögern Sie nicht, weitere Fragen zu stellen 🙂

    Viele Grüße,
    Claudia M.

    #2550
    Jan Smiesko
    Teilnehmer

    Hallo Claudia,

    danke für die rasche Information!

    Die diversen Objekte verstehe ich nicht:

    ‚ObjectId‘ entspricht der ‚intid‘ in der Tabelle (mit server.getObjectId(); habe ich diese erhalten)

    Was ist dann ‚Intid‘. Mit server.getNextIntid(); habe ich einen Wert erhalten, den ich nicht zuordnen kann.

    Den nachstehenden Befehl habe ich angewandt (gleiche EntityName anderes Objekt als gerade bearbeitet). Es kam keine Fehlermeldung, aber der Client reagierte nicht mehr. Die ObjectId habe ich überprüft.
    Server wurde neu gestartet.

    server.setFieldValue(„Adressen“, 40000469, „test“, „etwas“);

    Vielen Dank für Ihre Bemühungen!

    FG
    Jan

    #2552
    Claudia Mangstl
    Teilnehmer

    Hallo Jan,

    mit server.getObjectId() erhalten Sie die Id des aktuellen Datensatzes. Das brauchen Sie aber eigentlich garnicht, wenn sich das Feld „test“ in der aktuellen Entität (Adressen) befindet. Dann können Sie den Wert einfach über den Aufruf
    server.setFieldValue(„Adressen“, „test“, „etwas“);
    setzen.

    Mit server.getNextIntid() erhalten Sie eine ganz neue Id von der IDFactory. Zu dieser ID gibt es dann noch gar kein Objekt, dieser Aufruf wird also an dieser Stelle nicht benötigt.

    Welche Fehlermeldung haben Sie denn bekommen ? Können Sie die mal posten und evtl. auch einen Screenshot von Ihrer Maske ?

    #2567
    Jan Smiesko
    Teilnehmer

    Hallo Claudia,

    eine Fehlermeldung ist nicht gekommen, der Client hat nicht mehr reagiert, weil er auf eine Rückmeldung vom Server gewartet hat.

    Die Anweisung

    server.setFieldValue(„Adressen“, 40000469, „test“, „etwas“);

    dient rein Testzwecken, um das Framework kennen zu lernen. In wollte einfach in der gleichen Entität einen anderen als den aktuellen Datensatz ändern.

    Anbei die Screenshots.

    Freundliche Grüße

    Jan

    #2568
    Claudia Mangstl
    Teilnehmer

    Hallo Jan,

    evtl. ist dieses Post: https://www.nuclos.de/index.php/de/nuclos-forum/makros-und-regeln/1832-aufloesung-von-referenzen-n1 auch genau der Fall, den Sie ausprobiert haben.

    Viele Grüße,
    Claudia

    PS: die Screenshots sind nicht sichtbar

    #2570
    Jan Smiesko
    Teilnehmer

    Ich hoffe diesmal klappt es mit den Bildern.
    ?… das Anhängen der Bilder hat nicht funktioniert.

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