Home Forum Allgemeines Allgemeines zu Nuclos Arbeitsschritt: Übernahme von Daten in Referenz

Ansicht von 12 Beiträgen - 1 bis 12 (von insgesamt 12)
  • Autor
    Beiträge
  • #6714
    Thorsten Forkel
    Teilnehmer

    Hallo 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
    Thorsten

    #6715
    Frank Pavlic
    Teilnehmer

    Hallo,
    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+-+Arbeitsschritt

    Gruß
    Frank

    #6716
    Markus Glitzner
    Teilnehmer

    in 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ß
    Hugo

    #6717
    Thorsten Forkel
    Teilnehmer

    OK

    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

    #6718
    Markus Glitzner
    Teilnehmer

    Schau 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=819912

    Du 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()

    #6719
    Frank Pavlic
    Teilnehmer

    Hallo 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ß
    Frank

    #6720
    Frank Pavlic
    Teilnehmer

    zeitgleiches posten, he he he …

    #6728
    Thorsten Forkel
    Teilnehmer

    So 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.Anlagen

    AuftragAusloesen.java:21: non-static method setAksId(java.lang.Long) cannot be referenced from a static context

    #6729
    Markus Glitzner
    Teilnehmer

    Ich 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ß
    Hugo

    #6733
    Thorsten Forkel
    Teilnehmer

    Ja, 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

    #6741
    Ramin Goettlich
    Teilnehmer

    Was für ein Feld steckt denn dahinter? Ein Referenzfeld? Dann wird das Textfeld nicht funktionieren…

    #6751
    Thorsten Forkel
    Teilnehmer

    Guten 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

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