Home › Forum › Allgemeines › Allgemeines zu Nuclos › Arbeitsschritt in Statuschangeregel aufrufen
- Dieses Thema hat 9 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 10 Jahre von
Ramin Goettlich.
-
AutorBeiträge
-
29 April 2013 um 13:39 Uhr #6629
Ferdinand Hackl
TeilnehmerHallo,
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übernahmevielen Dank
Ferdinand29 April 2013 um 13:44 Uhr #6630Ramin Goettlich
Teilnehmersiehe 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
29 April 2013 um 14:08 Uhr #6631Ferdinand Hackl
Teilnehmerim 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.jarAuch 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
29 April 2013 um 14:32 Uhr #6633Frank Pavlic
TeilnehmerHallo,
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“ lautenZu 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ß
Frank29 April 2013 um 19:50 Uhr #6636Ferdinand Hackl
TeilnehmerIch 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.KundenspeichernKann 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:29 April 2013 um 21:23 Uhr #6637Thomas Hamm
TeilnehmerHallo,
ist denn „Kundendatenspeichern“ im Nuclet „businessentity“ enthalten. Wenn nicht muss das Paket noch als Import rein.
Vielleicht hilfts…
Gruß Thomas
30 April 2013 um 00:33 Uhr #6639Ramin Goettlich
TeilnehmerHallo,
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.KundenspeichernHier 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,
nuclosianAttachments:30 April 2013 um 00:38 Uhr #6640Ramin Goettlich
TeilnehmerNachtrag: 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?
30 April 2013 um 17:26 Uhr #6642Ferdinand Hackl
TeilnehmerHallo,
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_17Ich 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
FerdinandAttachments:17 Mai 2013 um 17:21 Uhr #6682Ramin Goettlich
Teilnehmersiehe NUCLOS-1966
-
AutorBeiträge