Home Forum Nuclos Entwicklung Makros und Regeln Abhängige Objekte in Sub-Entität erzeugen/aktualis

Ansicht von 8 Beiträgen - 1 bis 8 (von insgesamt 8)
  • Autor
    Beiträge
  • #3189
    Jan Giebels
    Teilnehmer

    Hallo,
    wir haben eine Fristenregel, die Daten in einer Entität A mit Statusmodell erzeugt.

    Im der gleichen Fristenregel sollen nun zu jedem Datensatz (iId) in der Methode public void process(RuleInterface server, Integer iId) throws NuclosBusinessRuleException {

    zusätzliche Objekte in einer Sub-Entität erzeugt bzw. aktualisiert werden.

    Wie gehe ich hier am effektivsten vor? Gibt es Code-Beispiele?

    Danke und Gruß

    Jan

    #3190
    Claudia Mangstl
    Teilnehmer

    Hallo Jan,

    worum genau handelt es sich bei der Sub-Entität ? Um ein Unterformular oder um eine einfache Referenz ?

    Viele Grüße,
    Claudia

    #3191
    Jan Giebels
    Teilnehmer

    Um eine Entität mit Referenz die als Unterformular im Layout eingebettet ist. Also eine Enität mit einem Referenzfeld auf die „Hauptentität“.

    Wie bei klassischen Bestellungen und deren Positionen.

    #3192
    Claudia Mangstl
    Teilnehmer

    Hallo Jan,

    ein Update einer bestehenden Zeile können Sie so vornehmen:

    Collection collmdvo = server.getDependants(iId, , );

    Und dann entsprechend iterieren und Werte ändern.

    Wenn Sie einen neue Zeile einfügen möchten, müssen Sie zunächst ein neues MasterDataVO Objekt erzeugen und die Daten über eine Map übergeben:


    Map mpFields = new HashMap();
    mpFields.put("", );
    mpFields.put("", );
    ...

    MasterDataVO mdVO = new MasterDataVO(null,null,null,null,null,null,mpFields);
    try {
    org.nuclos.common2.ServiceLocator.getInstance().getFacade(org.nuclos.server.masterdata.ejb3.MasterDataFacadeLocal.class).create("", mdVO, null);
    }catch (Exception e) {
    e.printStackTrace();
    }

    #3193
    Jan Giebels
    Teilnehmer

    Das war soweit klar. Da habe ich mich sehr ungeschickt ausgedrückt.

    Ich erhalte damit immer eine masterdata.error.validation.value{R40124615}{R40124640} Exception.

    Das liegt sicherlich an der Referenz. Das Referenz Feld in der Sub-Entität ist customers_id.

    So funktioniert es leider nicht:

    mpFields.put("customers_id", iId);

    … und das ist die Stelle an der ich festhänge … vll habe ich auch nur Tomaten auf den Augen.

    #3194
    Jan Giebels
    Teilnehmer

    Hier mal die gesamte Funktion:

    public void process(RuleInterface server, Integer iId) throws NuclosBusinessRuleException {
    // get sIdfield value
    Integer iData = (Integer)server.getFieldValue(sEntity, iId, sIdfield);

    // get data from MySQL
    HashMap mapData = sm.getData(sTable, sIdfield, iData, "");

    // get addresses and process each one
    Integer iMaxLimit = sm.countData(sTable2, sIdfield, iData);
    server.logInfo("Count: " + iMaxLimit+" "+mapData.get("customers_lastname"));
    for (int count = 0; count <= iMaxLimit - 1; count++ ) {

    mapData = sm.getData(sTable2, sIdfield, iData, "ORDER BY address_book_id LIMIT "+count+",1");

    // check if exists and update
    Boolean bCheck = false;
    Collection collmdvo = server.getDependants(iId, "kunden_adressen", sIdfield);
    for (MasterDataVO mdvo : collmdvo) {
    Integer iAdrId = (Integer)mdvo.getField("address_book_id");
    if (iAdrId == (Integer)mapData.get("address_book_id")) {

    bCheck = true;
    }
    }

    if (bCheck == false) {
    //insert
    Map mpFields = new HashMap();
    mpFields.put("address_book_id", (Integer)mapData.get("address_book_id"));

    mpFields.put("customers_id", iId);

    MasterDataVO mdvo_neu = new MasterDataVO(null, null, null, null, null, null, mpFields);
    try{
    // org.nuclos.common2.ServiceLocator.getInstance().getFacade(org.nuclos.server.masterdata.ejb3.MasterDataFacadeLocal.class).create("kunden_adressen", mdvo_neu, null);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }

    #3195
    Claudia Mangstl
    Teilnehmer

    In den MasterDataVO Objekten gibt es die Besonderheit, dass man beim Arbeiten mit ID Feldern an den Feldnamen „Id“ anhängt, dann bekommt man die zugehörige ValueId statt dem Wert.

    Wenn also der Feldname „customers_id“ lautet, dann können Sie die ID so setzen:

    mpFields.put(„customers_idId“, iId);

    Siehe auch: http://wiki.nuclos.de/Regeln_Geschaeftsregeln

    Viele Grüße,
    Claudia

    #3196
    Jan Giebels
    Teilnehmer

    Super! .. Das war mein Hänger aehh die Tomate.
    Funktioniert prima.

    Danke und Gruß

    Jan

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