Home Forum Allgemeines Allgemeines zu Nuclos Arbeitsschritt in Statuschangeregel aufrufen

Ansicht von 10 Beiträgen - 1 bis 10 (von insgesamt 10)
  • Autor
    Beiträge
  • #6629
    Ferdinand Hackl
    Teilnehmer

    Hallo,

    ich versuche mit GenerationProvider.execute den Arbeitsschritt aus einer API Regel (Statuswechsel ) heraus aufzurufen.

    Bei „Quelltext prüfen“ bekomme ich nun den Fehler „Der Klassenname konnte nicht aus dem Quellcode gelesen werden. Im Wiki steht nun dass der Java-Klassenname des generierten Arbeitsschritts in der „generation.jar“ steht – nur wo finde ich dieses File bzw. wie finde ich den Klassennamen heraus?

    Wenn ich die Regel ohne „GenerationProvider.execute“ Statement verwende gibt es keinen Fehler.
    —————————-
    public class Kundenübernahme implements StateChangeRule {

    public void changeState(StateChangeContext context) throws BusinessException {

    Kundenanlage neuerKunde = context.getBusinessObject(Kundenanlage.class);

    if (neuerKunde.getKundennummer() == null)
    throw new BusinessException(„Die Kundennummer darf nicht leer sein“);

    ckunde ck = GenerationProvider.execute(neuerKunde, Kundendatenübernahme.class);
    }
    }
    ————
    Quellentität: Kundenanlage
    Zielentität: ckunde
    Arbeitschritt: Kundedatenübernahme

    vielen Dank
    Ferdinand

    #6630
    Ramin Goettlich
    Teilnehmer

    siehe hier ein Beispiel: http://wiki.nuclos.de/pages/viewpage.action?pageId=821228

    Die Klasse generation.jar findet man (so wie alle generierten Klassen) in //data/codegenerator

    #6631
    Ferdinand Hackl
    Teilnehmer

    im Verzeichnis nuclosdatacodegenerator befinden sich
    5 Verzeichnisse :bosrc,build,dsrsrc,smsrc und src
    sowie 5 Dateien : DOEntities.jar,CCCE.jar,Nuclet.jar,Nuclet.jar.old,statmodels.jar

    Auch die Suche nach generation.jar im Gesamten Nuclos Verzeichniss brachte keine Treffer.

    Das Beispiel ist gut zeigt mir aber leider auch nicht wie ich meinen Klassennamen herausfinde.

    Ich habe Nuclos 3.12.1 erst vor vier Tagen neu installiert ( vorher sowohl Nuclos als auch die DB auf dem Server gelöscht )

    lg

    #6633
    Frank Pavlic
    Teilnehmer

    Hallo,
    du arbeitest mit einem Klassennamen, welcher Umlaute enthält. Soweit ich das gesehen habe, liegen die Klassennamen bzw. BusinessObjects allerdings ohne Umlaute vor bzw. übersetzt, ä=ae, ö=oe, usw.
    „Kundenübernahme“ müsste in deiner Regelprogrammierung entsprechend „Kundenuebernahme“ lauten

    Zu finden sind die Sourcen der Klassennamen im Nuclos-Verzeichnis unter data/codegenerator/bosrc/org/nuclet/businessentity
    Dort kannst Du dann auch nachschauen, wie die Attribute für die Programmierung lauten.

    Gruß
    Frank

    #6636
    Ferdinand Hackl
    Teilnehmer

    Ich hab jetzt nochmal alles gelöscht und von vorne begonnen – keine Umlaute und Sonderzeichen diesmal.

    Ich habe angelegt
    2 Entitäten mit Layout( Kunde,Kundenanlage)
    1 Statusmodel
    1 Arbeitsschritt (Kundendatenspeichern)
    1 Server API Regel ( Kundenspeichern )

    In den genannten Unterordernen sehe ich unter smsrcorg….statemodel mein Statusmodel und unter src/org/nuclet/businessentity meine API Regel

    Alle anderen Ordner sind leer – auch bosrc.

    Wenn ich unter Nuclet Managment exportiere und wieder importiere gibt es unter bosrcorgnucletbusinessentity meine zwei Entitäten.

    Nachfolgend die API Regel mit Fehlermeldung.
    ———————————————–

    package org.nuclet.businessentity;

    import org.nuclos.api.rule.StateChangeRule;
    import org.nuclos.api.context.StateChangeContext;
    import org.nuclos.api.annotation.Rule;
    import org.nuclos.api.exception.BusinessException;

    /** @name
    * @description
    * @usage
    * @change
    */
    @Rule(name=“Kundenspeichern“, description=“Kundenspeichern“)
    public class Kundenspeichern implements StateChangeRule {

    public void changeState(StateChangeContext context) throws BusinessException {

    Kundenanlage neuerKunde = context.getBusinessObject(Kundenanlage.class);

    if (neuerKunde.getKundennummer() == null)
    throw new BusinessException(„Die Kundennummer darf nicht leer sein“);

    Kunde ckunde = GenerationProvider.execute(neuerKunde, Kundendatenspeichern.class);

    }
    }
    ————————————————-
    Fehlermeldung:
    Kundenspeichern.java:23: cannot find symbol,symbol : class Kundendatenspeichern location: class org.nuclet.businessentity.Kundenspeichern
    Kundenspeichern.java:23: cannot find symbol,symbol : variable GenerationProvider
    location: class org.nuclet.businessentity.Kundenspeichern

    Kann ich das generieren bzw das speichern auf der Harddiks des Java Files für den Arbeitsschritt irgendwie erzwingen?

    Hat noch jemand eine Idee was hier falsch sein kann? Zwecks Nachvollziehbarkeit hab ich auch oben erwähntes Exportfile angehängt. Die Zeile für den Arbeitsschritt ist auskommentiert.

    Vielen Dank für eure Hilfe

    Attachments:
    #6637
    Thomas Hamm
    Teilnehmer

    Hallo,

    ist denn „Kundendatenspeichern“ im Nuclet „businessentity“ enthalten. Wenn nicht muss das Paket noch als Import rein.

    Vielleicht hilfts…

    Gruß Thomas

    #6639
    Ramin Goettlich
    Teilnehmer

    Hallo,

    Kundenspeichern.java:23: cannot find symbol,symbol : class Kundendatenspeichern location: class org.nuclet.businessentity.Kundenspeichern

    Die generierten Klassen für die Arbeitsschritte tragen immer ein „GEN“ im Namen, d.h. statt „Kundendatenspeichern“ muss es heissen „KundendatenspeichernGEN“. Umlaute und Sonderzeichen sind kein Problem, diese werden bei der Generierung des Klassennamens entfernt. Aus „Kundendaten speichern“ würde also auch „KundendatenspeichernGEN“.

    Die generierte Klasse müsste im Verzeichnis /codegenerator unter /gensrc liegen, dort lässt sich also auch nachsehen, wenn man nicht ganz sicher ist, wie sie heisst. Siehe z.B. angehängter Screenshot. Wichtig ist, dass auch das Package, in dem die Klasse liegt, in der Regel importiert wird. Im Beispiel aus dem Screenshot müsste also ein „import de.nuclet.itbh.*“ an den Anfang der Regel aufgenommen werden.

    Kundenspeichern.java:23: cannot find symbol,symbol : variable GenerationProvider
    location: class org.nuclet.businessentity.Kundenspeichern

    Hier fehlt ein „import nuclos.api.provider.*“ am Anfang der Regel. In welchem Package sich eine Klasse befindet, lässt sich http://api.nuclos.de entnehmen, siehe dort z.B. der GenerationProvider unter http://api.nuclos.de/org/nuclos/api/provider/GenerationProvider.html.

    Beispiele für verschiedene Regeln gibt es im Nuclos Wiki unter http://wiki.nuclos.de, für den GenerationProvider z.B. hier: http://wiki.nuclos.de/pages/viewpage.action?pageId=821228.

    Um leichter Regeln entwickeln zu können (z.B. Code Completion), und um den besseren Überblick über die generierten Klassen für Businessobjekte, Statusmodelle, Arbeitsschritte und Datenquellen zu haben, lohnt sich unser Eclipse Plugin für Regelentwicklung im (kostenpflichtigen) Nuclet Downloadbereich!

    Grüsse,
    nuclosian

    #6640
    Ramin Goettlich
    Teilnehmer

    Nachtrag: Es sollte eigentlich nicht nötig sein, das Nuclet zu ex- und wieder zu importieren, um die Klassen zu generieren. Das geschieht eigentlich bei jedem Serverstart, und bei jedem Durchlaufen des Entitätenwizards, Speichern eines Statusmodelles, Speichern eines Arbeitsschrittes und Speichern eine Datenquelle.

    Diesbzgl. gab es aber in den letzten Versionen den ein oder anderen Bug.

    Welche Version nutzen Sie?

    #6642
    Ferdinand Hackl
    Teilnehmer

    Hallo,

    Danke für die ausführliche Antwort.
    Ich verwende Nuclos V3.12 – 3.12.0004 (08.04.2013)/ Windows XP / JRE Version 1.7.0_17

    Ich hab versucht die Anweisungen umzusetzen allerdings ohne Erfolg.Mein Nuclos Verzeichnis sieht auch anders aus ( siehe Screenshot ) und die Webseite api.nuclos.de/org/nuclos/api/provider/GenerationProvider.html gibt es auch nicht.

    Ich hab jetzt versucht den Arbeitsschritt auf gut Glück zu mit „KundendatenspeichernGEN“ zu verwenden woraufhin wieder die selbe Fehlermeldung kommt.

    Ich habe keine eigenen Nuclets angelegt somit müsste „package org.nuclet.businessentity“ ja genügen – hab es aber auch mit import org.nuclet.businessentity.*; probiert.

    Ich werde mir einen Support Account besorgen und es dann nochmal mit dem Exclipse Plugin versuchen allerdings befürchte ich dass wenn die Java Datei für den Arbeitsschritt fehlt es auch dann nicht funktionieren wird.

    vielen Dank
    Ferdinand

    Attachments:
    #6682
    Ramin Goettlich
    Teilnehmer

    siehe NUCLOS-1966

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