Home › Forum › Allgemeines › Allgemeines zu Nuclos › Arbeitsschritt: Übernahme von Daten in Referenz
- Dieses Thema hat 11 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 9 Jahre, 11 Monaten von
Thorsten Forkel.
-
AutorBeiträge
-
14 Juni 2013 um 16:18 Uhr #6714
Thorsten Forkel
TeilnehmerHallo zusammen,
ich möchte aus einer Entität einen Kennschlüssel in einen Auftrag übernehmen, der in der in der Zielentität als Referenzfeld definiert ist. Das soll laut Wiki nicht möglich sein. Leider basiert das Beispiel im Wiki wohl noch auf der alten API und ist somit wohl auch nicht mehr verwertbar.
Wie also kann ich diese Daten übernehmen und die Referenz richtig setzen lassen.Beste Grüße
Thorsten14 Juni 2013 um 17:07 Uhr #6715Frank Pavlic
TeilnehmerHallo,
die alte API ist noch in der 3.13er Version aktiv und weiterhin gültig.
Allerdings würde ich schon die neue Regel-API nehmen und dort die Referenz setzen 😉 ,siehe hier:
http://wiki.nuclos.de/display/Konfiguration/Event+-+ArbeitsschrittGruß
Frank14 Juni 2013 um 19:33 Uhr #6716Markus Glitzner
Teilnehmerin der alten API gings so
Integer sourceId = server.getSourceObjectContainerCVO().getGenericObject().getId();
server.setField(sEntity, sField1, server.getAttribute(sourceId, sField2).getValueId(), null);mit der neuen hab ich noch so meine liebe Not,
darum hab ich teilweise einen Mischbetrieb.Gruß
Hugo14 Juni 2013 um 20:09 Uhr #6717Thorsten Forkel
TeilnehmerOK
Hier nochmal das Beispiel aus dem Wiki, welches ich für meine Zwecke angepasst habe:
// Id des Quellobjektes
Integer objektID = server.getSourceObjectContainerCVO().getGenericObject().getId();//Id in Zielobjekt in dafür vorgesehenes ID Feld eintragen
server.setField("AKS", objektID);Das Beispiel wirft in der neuen API eine Fehlermeldung
Wie setze ich das ganze denn jetzt so um, das es in eine neue Regel für einen Arbeitsschritt passt.
Grüße Thorsten
14 Juni 2013 um 21:22 Uhr #6718Markus Glitzner
TeilnehmerSchau dir mal die beiden Links an, da solltest du das wichtigste finden
http://wiki.nuclos.de/display/Konfiguration/Regelmanagement
http://wiki.nuclos.de/pages/viewpage.action?pageId=819912Du musst also erst im Regelmanagement eine neue Klasse erstellen und diese deinem Arbeitsschritt zuweisen, die alte Regel Syntax funktioniert hier nicht mehr.
Die Regel selbst müsste dann in etwa so aussehen (nicht getestet):
Collection sourceObjects = context.getSourceObjects(Anfrage.class);
for (Anfrage a: sourceObjects) {
Auftrag targetObject = context.getTargetObject(Auftrag.class);
Auftrag.setAksId(a.getAksId());
}
und achte auf die Groß und Kleinschreibung: setAksId()
14 Juni 2013 um 21:25 Uhr #6719Frank Pavlic
TeilnehmerHallo Thorsten,
du kannst und darfst nicht den alten API-Code in der neuen Regel-API verwenden, daher geh bitte auf die von mir gepostete Wiki-Seite.Im Abschnitt „Beispiel“ ist ein Link zu einem Beispiel für den Event „Arbeitsschritt“. In diesem Beispiel wird unter anderem ein Feld mit Wert gefüllt, genau das, was Du auch machen möchtest.Gruß
Frank14 Juni 2013 um 21:26 Uhr #6720Frank Pavlic
Teilnehmerzeitgleiches posten, he he he …
18 Juni 2013 um 16:00 Uhr #6728Thorsten Forkel
TeilnehmerSo weit so gut. Erst einmal Danke für die Hilfe.
Mit dem Beispiel habe ich so meine liebe Not, daher hier nochmal was ich so habe:
Es gibt eine Entität Anlagen, die eindeutig über den AKS benannt ist. Dieser AKS soll in ein Referenzfeld im Auftrag übernommen werden, damit der Auftrag auch in einer Subform auf der Anlagenseite dargestellt wird. Mein Regelcode sieht so aus:
package org.nuclet.businessentity;
import org.nuclos.api.rule.GenerateRule;
import org.nuclos.api.context.GenerateContext;
import org.nuclos.api.annotation.Rule;
import org.nuclos.api.exception.BusinessException;
import java.util.Collection;/** @name
* @description
* @usage
* @change
*/
@Rule(name="AuftragAusloesen", description="AuftragAusloesen")
public class AuftragAusloesen implements GenerateRule {public void generate(GenerateContext context) throws BusinessException {
Collection sourceObjects = context.getSourceObjects(Anlagen.class);for (Anlagen a: sourceObjects) {
Auftraege targetObject = context.getTargetObject(Auftraege.class);
Auftraege.setAksId(a.getAksId());
}
}
}
Nachfolgende Fehler werden geworfen:
AuftragAusloesen.java:21: cannot find Symbol symbol: method getAksId() location: variable a of type org.nuclet.businessentity.AnlagenAuftragAusloesen.java:21: non-static method setAksId(java.lang.Long) cannot be referenced from a static context
18 Juni 2013 um 18:36 Uhr #6729Markus Glitzner
TeilnehmerIch vermute hier einen Denkfehler.
Wenn du in deinen Aufträgen ein Referenzfeld zur Anlage hast, dann genügt das Hakerl ‚Zielobjekt mit Quellobjekt verknüpfen‘ im Arbeitsschritt. Dafür benötigst du nicht mal eine Regel.
Wenn das Feld Ask im Auftrag das Referenzfeld zur Anlage ist, dann müsste die Regel wenn schon so in etwa lauten:
Auftraege.setAskId(a.getId())Ask in der Anlage ist ja nicht das PrimaryKey Feld, sondern nur ein eindeutiges Attribut
Gruß
Hugo19 Juni 2013 um 11:00 Uhr #6733Thorsten Forkel
TeilnehmerJa, der Knoten ist gestern auch geplatzt.
Die Referenzierung an sich ist gar nicht das Problem und lässt sich wie Du gesagt ohne Regel bewerkstelligen. Das Problem hier war der Feldtyp im Layout. Hier hatte ich eine Combobox, die über den Arbeitsschritt nicht befüllt werden konnte. Als Workaround habe ich nun ein normales Textfield genommen und alles ist gut.
Danke an alle.
Grüße Thorsten
19 Juni 2013 um 23:38 Uhr #6741Ramin Goettlich
TeilnehmerWas für ein Feld steckt denn dahinter? Ein Referenzfeld? Dann wird das Textfeld nicht funktionieren…
21 Juni 2013 um 11:42 Uhr #6751Thorsten Forkel
TeilnehmerGuten Morgen,
entgegen Ihrer Vermutung funktioniert es. Das Feld AKS ist ein Referenzfeld und im Layout ein Textfield.Das ganze war eher ein Zufallsbefund, denn als Workaround hatte ich ein Textfield eingefügt und dann später im Entity-Wizzard auf Referenzfeld umgestellt ohne das Layout weiter anzupassen. Sprich ich habe schlicht vergessen den Feldtyp im Layout zu ändern 😉
Aber es läuft so.Grüße Thorsten
-
AutorBeiträge