Home Forum Nuclos Entwicklung Makros und Regeln Daten von Submask via Regel ändern

Ansicht von 8 Beiträgen - 1 bis 8 (von insgesamt 8)
  • Autor
    Beiträge
  • #8144
    Martin Rithos
    Teilnehmer

    Hallo,

    ich habe ein Businessobjekt „Türen“, welches folgende Felder enthält:

    Feld 1: Nummer [Autonummer]
    Feld 2: Farben (Referenz zu einer Liste) [Text]
    Feld 3: Ja/Nein [Boolean]

    Sobald die Farbe „schwarz“ in Feld 2 ausgewählt wird, soll der Haken in Feld 3 automatisch gesetzt werden. Dies habe ich per Regel realisiert und solang die Maske des BO „Türen“ direkt geöffnet wird, funktioniert es wie gewünscht.

    Nun ist die BO „Türen“ aber ebenso eine Submask der BO „Autos“. Wie bekomme ich es hin, dass die Regel ebenso angewendet wird, wenn ich die Farbe über „Autos“ einstelle? Irgendwie stehe ich dahingehend gerade auf dem Schlauch.

    Wenn ich die Regel dem BO „Türen“ zuordne, passiert bei einer Änderung über die Maske von „Autos“ gar nichts. Weise ich die Regel ebenso „Autos“ zu, tritt ein Fehler auf:

    org.nuclet.meinnuclet.Autos cannot be cast to org.nuclet.meinnuclet.Türen

    Vielen Dank im Voraus. :silly:

    #8147
    Frank Pavlic
    Teilnehmer

    Hallo,
    wenn Du dich in der Maske Autos befindest, ist Autos deine Haupt-BO (BO=Businessobjekt). Beim Speichern wird die Regel der Haupt-BO ausgeführt. Willst Du also Änderungen im Unterformular Türen durchführen, benötigst Du eine weitere Regel für das Businessobjekt Autos, welche dann alle Türen-Datensätze auflistet. Dann verfährst Du entsprechend deiner Logik, heisst true oder false setzen, je nach Eingabe.

    Kurz: Hast Du eine Regel für das Businessobjekt Türen, musst Du für jedes Businessobjekt, wo Türen als Unterformular eingebunden ist, eine weitere Regel implementieren.

    Gruß
    Frank

    #8148
    Martin Rithos
    Teilnehmer

    Hallo Frank,

    dass ich die Regel nicht einfach ebenso dem BO „Autos“ zuordnen kann, habe ich mir gedacht – allerdings weiß ich nicht sorecht, wie ich in der Regel die Werte des Subforms ansprechen kann. Hier mal meine funktionierende für das BO „Türen“:

    package org.nuclet.meinnuclet.regeln;

    import org.nuclos.api.rule.UpdateRule;
    import org.nuclos.api.context.InsertContext;
    import org.nuclos.api.context.UpdateContext;
    import org.nuclos.api.annotation.Rule;
    import org.nuclos.api.exception.BusinessException;
    import org.nuclos.api.businessobject.BusinessObject;
    import org.nuclos.api.businessobject.facade.Modifiable;

    import org.nuclet.meinnuclet.Türen;

    public class SetzeHakenMPupd implements UpdateRule {

    public void update(UpdateContext context) throws BusinessException {

    Türen curTüren = context.getBusinessObject(Türen.class);

    if (curTüren.getFarben().equals("schwarz") ) {
    curTüren.setHaken(true);
    } else {
    curTüren.setHaken(false);
    }

    }
    }

    Vielleicht kannst du mir kurz auf die Sprünge helfen?

    Vielen Dank. 🙂

    #8153
    Frank Pavlic
    Teilnehmer

    Hallo,
    anbei der Link zu einem Beispiel, wie Daten aus Unterformularen angezogen und verarbeitet werden können.
    Event – Aktualisieren (Beispiel)
    Wenn Du wissen willst, wie deine Get-Methode für die Türpositionen im BO „Autos“ heisst, kannst Du dies hier finden:
    /daten/codegenerator/bosrc//Autos.java. Dabei ist vermutlich in deinem Fall „org/nuclet/meinnuclet“. Da müsstest du dann vermutlich die Methode getTueren() finden.

    Der Rest ist dann eine for-Loop wie im Wiki-Beispiel.

    Gruß
    Frank

    #8154
    Martin Rithos
    Teilnehmer

    Irgendwie habe ich es geschafft, das Beispiel zu überlesen. :sick: Besten Dank, du bist jetzt schon mein Held des Tages. :silly:

    #8156
    Martin Rithos
    Teilnehmer

    So richtig komme ich dennoch nicht weiter. Bei dem Beispiel verstehe ich wie alle enthaltenen Positionen durchgezählt werden. Aber wie rufe ich nun gezielt einen Feldwert der Submasks auf?

    Vielleicht könntest du mir mit einem Codeschnipsel bzw. einer Codezeile auf die Sprünge helfen?

    Besten Dank im Voraus. :dry:

    #8157
    Frank Pavlic
    Teilnehmer

    na wie immer 🙂 … Beispielcode anhand deiner BOs Autos und Tueren:

    List poslist = autos.getTueren();
    for (Tuere pos : poslist) {
    if (Tuere.getFarben().equals("schwarz") ) {
    Tuere.setHaken(true);
    } else {
    Tuere.setHaken(false);
    }
    }

    Gruß
    Frank

    #8158
    Martin Rithos
    Teilnehmer

    Ach, manchmal sollte man sich zwischendurch mit etwas anderem beschäftigen und sich später noch mal ransetzen. Ich erzähl mal lieber nicht, wegen welcher Banalität sämtliche Versuche fehlschlugen. Ich danke dir wirklich sehr für deine Mühen.

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