Home › Forum › Nuclos Entwicklung › Makros und Regeln › Abhängige Objekte in Sub-Entität erzeugen/aktualis
- Dieses Thema hat 7 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 12 Jahre, 3 Monaten von
Jan Giebels.
-
AutorBeiträge
-
15 Februar 2011 um 17:18 Uhr #3189
Jan Giebels
TeilnehmerHallo,
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
15 Februar 2011 um 18:19 Uhr #3190Claudia Mangstl
TeilnehmerHallo Jan,
worum genau handelt es sich bei der Sub-Entität ? Um ein Unterformular oder um eine einfache Referenz ?
Viele Grüße,
Claudia15 Februar 2011 um 18:51 Uhr #3191Jan Giebels
TeilnehmerUm 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.
16 Februar 2011 um 12:35 Uhr #3192Claudia Mangstl
TeilnehmerHallo 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();
}
16 Februar 2011 um 13:24 Uhr #3193Jan Giebels
TeilnehmerDas 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.
16 Februar 2011 um 15:39 Uhr #3194Jan Giebels
TeilnehmerHier 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();
}
}
}
}16 Februar 2011 um 17:31 Uhr #3195Claudia Mangstl
TeilnehmerIn 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,
Claudia16 Februar 2011 um 18:18 Uhr #3196Jan Giebels
TeilnehmerSuper! .. Das war mein Hänger aehh die Tomate.
Funktioniert prima.Danke und Gruß
Jan
-
AutorBeiträge