Home Forum Nuclos Entwicklung Makros und Regeln Server Regel(API-basiert)

Ansicht von 9 Beiträgen - 1 bis 9 (von insgesamt 9)
  • Autor
    Beiträge
  • #6407
    Christian Dumhart
    Teilnehmer

    Hallo!
    Ich mach gerade die ersten Schritte mit Nuclos. Hab mir die Version 3.10 runter geladen nur leider gibt’s da ein paar Neuerungen die für mich als Newby eine harte Nuss sind. (ansonsten finde ich Nuclos genial, Hut ab!)

    Vor allem geht’s jetzt gerade um das Regelwerk, wenn ich die Informationen richtig verarbeitet hab 😉 sollte man nur mehr die Server Regel (API-basiert) verwenden. (Der Hinweis wird auch bei den anderen Regeln angezeigt).

    Nun stehe ich aber vor dem Problem dass ich nicht weiß wie ich die Server-Regel mit einer Aktion verknüpfen kann? Wenn ich eine Geschäftsregel erstellt habe dann kam der Reiter „Verwendung“ und so konnte ich auch die Regel zuordnen. Bei der Server-Regel passiert dies nicht, somit fehlt mir auch die Zuordnung, z.B. kann ich somit die Methode keinen Button zuordnen wie z.B. mit einer Geschäftsregel. Was mach ich da falsch, wo liegt mein Denkfehler? Danke!

    BG
    Christian

    #6408
    Ramin Goettlich
    Teilnehmer

    Hallo Christian,

    für einen ersten Überblick siehe http://wiki.nuclos.de/display/Konfiguration/Nuclos+API, dort zur Beantwortung Deiner Frage konkret der Punkt „Regelmanager“.

    Grüsse,
    nuclosian

    #6410
    Christian Dumhart
    Teilnehmer

    Hallo und Danke für die rasche Antwort!

    Sorry aber für mich als Anfänger sind das zu wenig Informationen um meinen Fehler zu finden ;(

    Ich hab einmal eine View vom RegelManagement und von Server Regel (API basierend) angehängt.

    Hier der Sourcecode von den Server Regeln im einzelnen (sind alles nur tests u. tlw. vom Forum kopiert)

    test nummernkreis:

    import org.nuclos.common.collect.collectable.searchcondition.*;
    import org.nuclos.server.masterdata.valueobject.*;
    import org.nuclos.server.ruleengine.*;
    import java.util.*;

    /** @name
    * @description
    * @usage
    * @change
    */
    @Rule(name="NummernkreisKlasse", description="test nummernkreis")
    public class NummernkreisKlasse implements CustomRule{

    /**
    * ...
    *
    * @author Markus Glitzner (alias Hugo)
    * @version 2011-10-30
    *
    * @param sEntity the entity name e.g. Aufträge
    * @param sField the entity's number field e.g. auftragsnummer
    * @param sKey the name of the number range e.g. Auftragsnummer
    *
    */
    public static void NextValue(RuleInterface server, String sEntity, String sField, String sKey) throws NuclosBusinessRuleException {

    //only if the object is new
    if (server.isObjectNew()){

    //get the id of the numbering entry
    Integer id;
    id = getId(server, "Nummernkreis", "Name", sKey);

    if (id == null) {
    throw new NuclosBusinessRuleException("Der Nummernkreis " + sKey + " ist nicht vorhanden!");
    }else{
    //get the MasterDataVO of Nummernkreis
    MasterDataVO item = server.getMasterData("Nummernkreise", id);
    throw new NuclosBusinessRuleException("Der Nummernkreis " + sKey + " vorhanden!");
    //get the values from Nummernkreis
    //String prefix = (String)Nz(item.getField("prefix"), "");
    //Integer padcount = (Integer)Nz(item.getField("padcount"), 0);
    //Integer nextvalue = (Integer)Nz(item.getField("nextvalue"), 1);

    //set the new number to the called entity
    //String format = String.format("%%0%dd", padcount);
    //server.setFieldValue(sEntity, sField, prefix + String.format(format, nextvalue));

    //set the new value in Nummernkreis
    //server.setFieldValue("Nummernkreise", id, "nextvalue", nextvalue+1);
    }
    }
    }

    private static Integer getId(RuleInterface server, String sEntity, String sField, String sKey) {
    CollectableComparison cond = org.nuclos.common.SearchConditionUtils.newMDComparison(org.nuclos.server.common.MasterDataMetaCache.getInstance().getMetaData(sEntity), sField, ComparisonOperator.EQUAL, sKey);
    Collection ids = server.getMasterDataIds(sEntity, new org.nuclos.server.genericobject.searchcondition.CollectableSearchExpression(cond));

    if (!ids.isEmpty()) {
    return (Integer)ids.iterator().next();
    }else{
    return null;
    }
    }

    private static Object Nz(Object o, Object defaultvalue) {
    if (o != null) {
    return o;
    }else{
    return defaultvalue;
    }
    }

    void custom(CustomContext context)
    throws BusinessException
    {

    }

    }

    test für update

    package org.nuclet.businessentity;

    import org.nuclos.api.rule.UpdateFinalRule;
    import org.nuclos.api.context.UpdateContext;
    import org.nuclos.api.annotation.Rule;
    import org.nuclos.api.exception.BusinessException;

    /** @name
    * @description
    * @usage
    * @change
    */
    @Rule(name="testupdate", description="test für update")
    public class testupdate implements UpdateFinalRule {

    public void updateFinal(UpdateContext context) throws BusinessException {
    }
    }

    test Nummernkreis:

    package org.nuclet.businessentity;

    import org.nuclos.api.rule.UpdateRule;
    import org.nuclos.api.context.UpdateContext;
    import org.nuclos.api.annotation.Rule;
    import org.nuclos.api.exception.BusinessException;

    /** @name
    * @description
    * @usage
    * @change
    */
    @Rule(name="testNummer", description="test Nummernkreis")
    public class testNummer implements UpdateRule {

    public void update(UpdateContext context) throws BusinessException {
    }
    }

    Im Regel Management taucht nur die Alte Regel „test“ auf die anderen die mit Server Regel erstellt worden sidn leider nicht.

    Lege ich z.B. im Regel Management unter Benutzeraktion mit der rechten Maus eine neue Regel „test3“ an und speicher diese ab mach ein update im regel Managment passiert nichts.

    Hier die Regel test3:

    package org.nuclet.businessentity;

    import org.nuclos.api.rule.CustomRule;
    import org.nuclos.api.context.CustomContext;
    import org.nuclos.api.annotation.Rule;
    import org.nuclos.api.exception.BusinessException;

    /** @name
    * @description
    * @usage
    * @change
    */
    @Rule(name="test3", description="")
    public class test3 implements CustomRule {

    public void custom(CustomContext context) throws BusinessException {
    }
    }

    Was mach ich falsch? Danke! Christian

    #6411
    Christian Dumhart
    Teilnehmer

    und noch den screenshot von Server Regel:

    Danke!
    beste Grüße

    Christian

    P.S.: Das einfügen von Anhängen läuft bei mir auch nicht nach „Plan“ (hab kein pdf anhängen können, und das Bild hier wurde mir auch nicht angenommen, habs jetzt extern verlinkt)

    #6412
    Ramin Goettlich
    Teilnehmer

    Im letzten Screenshot steht in der Toolbar oben „Keine Kompilierung“, d.h. die Kompilierung ist abgeschaltet, daher wurden auch keine Regelklassen generiert, die im Regelbaum sichtbar sein könnten (siehe auch http://wiki.nuclos.de/display/Konfiguration/Nuclos+API, Abschnitt Regeleditor).

    Sie müssen eine beliebige Regel öffnen, dort „Keine Kompilierung“ anklicken (dann wird „Automatische Kompilierung“ draus) und dann die Regeln nochmal speichern, das löst dann die Kompilierung aller Regeln aus. Danach dürften sie im Regelmanager zur Verfügung stehen, die Zuordnung dort geschieht mittels Drag&Drop.

    #6413
    Christian Dumhart
    Teilnehmer

    Danke für die Antwort,

    ok wenn ich das mache gibts leider eine Exception:


    org.nuclos.common.PointerException: RuleCollectController.4
    at org.nuclos.client.customcode.CodeCollectController.updateCollectable(CodeCollectController.java:301)
    at org.nuclos.client.customcode.CodeCollectController.updateCurrentCollectable(CodeCollectController.java:288)
    at org.nuclos.client.masterdata.MasterDataCollectController.updateCurrentCollectable(MasterDataCollectController.java:1)
    at org.nuclos.client.ui.collect.CollectController.updateCurrentCollectable(CollectController.java:3145)
    at org.nuclos.client.ui.collect.CollectController.save(CollectController.java:3431)
    at org.nuclos.client.common.EntityCollectController.save(EntityCollectController.java:1649)
    at org.nuclos.client.customcode.CodeCollectController.save(CodeCollectController.java:417)
    at org.nuclos.client.ui.collect.CollectController.cmdSave(CollectController.java:3295)
    at org.nuclos.client.ui.collect.CollectController$5.actionPerformed(CollectController.java:369)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    BG
    Christian

    #6415
    Ramin Goettlich
    Teilnehmer

    Hallo,

    um evtl. auftretende Fehler möglichst effizient in unseren Workflow einzukippen, empfehle ich die Erstellung eines Tickets unter http://support.nuclos.de. Kein Entwickler berücksichtigt hier gepostete Fehler in Nuclos, Medium dafür ist das Ticketsystem. Dort können wir die Fehler zuweisen, priorisieren und Sie werden vom System bei Statusänderungen oder Rückfragen automatisch benachrichtigt.

    Ich kann diesen Fehler übrigens nicht reproduzieren, für die Nuclos API bietet sich aber die Nutzung der 3.11 an, da wurden diesbzgl. gegenüber der 3.10 schon sehr viele Verbesserungen eingebaut.

    Grüsse,
    nuclosian

    #6416
    Christian Dumhart
    Teilnehmer

    Hallo,

    danke für die Antwort.
    Ok ich bin ehrlich gesagt nicht von einem Fehler bei Nuclos sondern bei einem Userfehler also meinem Fehler aus gegangen…

    Gut dann mach ich mal ein update auf 3.11. Sollte das Problem noch auftretten lege ich ein Ticket an, danke!

    #6417
    Christian Dumhart
    Teilnehmer

    Hallo nochmal!

    Für alle die event. einmal das selbe Problem bekommen. Es war doch ein User Fehler.
    Ich hab dies aber mit der Version 3.11BETA getestet.

    Nach der Installation von 3.10 auf 3.11BETA war die selbe Exception vorhanden. Ich hab dann probiert meine „Test-Rules“ zu löschen, hat nicht geklappt (Er meinte es gibt andere Rules die meine Rule benötigt (gabs aber definitiv nicht)) ich hab dann am Server das verzeichnis datacodegeneartor gelöscht (also alle files und verzeichnise darain) dann den server neu gestartet und nun liesen sich die rules löschen. nachdem ich alle rules raus gelöscht habe, und nun von support wusste wie es gehen sollte hat es geklappt!

    Danke nochmal für die Unterstütztung!
    Schönes Wochenende, wenn das Wetter so bleibt wirds ja ein Nuclos Wochenende 🙂

    Christian

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