Home › Forum › Nuclos Entwicklung › Makros und Regeln › Wert in Attribut übernehmen
- Dieses Thema hat 13 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 12 Jahre, 3 Monaten von
Claudia Mangstl.
-
AutorBeiträge
-
28 Mai 2010 um 15:44 Uhr #2166
Gabriela Meisgruber
TeilnehmerHallo !
Ich möchte in einer Regel, die beim Speichern ausgeführt wird, einen Wert in ein Feld schreiben. Dazu gehe ich so vor:
server.getAttribute(„projekt_Garantie“);
… prüfe irgendwas…
garantieWert.setValue(„teilweise“);
server.setAttribute(„projekt_Garantie“, garantieWert);Aber der Wert wird nicht eingetragen.
So funktioniert es immer…. was kann diesmal falsch sein ?
Danke schon mal !
28 Mai 2010 um 15:46 Uhr #2167Claudia Mangstl
TeilnehmerHallo Gabriela,
das sieht auf den ersten Blick eigentlich richtig aus. Was ist denn „projekt_Garantie“ für ein Attribut bzgl. Datentyp usw. ?
28 Mai 2010 um 15:48 Uhr #2168Gabriela Meisgruber
TeilnehmerDas ist ein Textfeld mit einer Werteliste. Der Text „teilweise“, den ich eintragen will, ist in der Werteliste als Text enthalten. Im Layout wird es als Combobox dargestellt. Hilft das weiter ?
28 Mai 2010 um 15:52 Uhr #2169Claudia Mangstl
TeilnehmerDann ist die Quelle des Übels gefunden 😉
Ein Attribut mit Werteliste enthält neben dem eigentlich Wert auch noch die ID des Wertes. Wenn man einen Wert setzen möchte, muss man also zusätzlich die ID setzen bzw. nur die ID. Die ID muss man in diesem Fall aus der Datenbank beziehen: T_MD_ATTRIBUTVALUE.
Der Aufruf muss dann entsprechend so aussehen:
garantieWert.setValueId();
server.setAttribute(„projekt_Garantie“, garantieWert);Hilft das ?
28 Mai 2010 um 15:52 Uhr #2170Gabriela Meisgruber
TeilnehmerJetzt gehts ! Vielen Dank !
24 Februar 2011 um 19:26 Uhr #3278Jan Giebels
TeilnehmerKann es sein, das diese „Methode“ veraltet ist ? Die Tabelle T_MD_ATTRIBUTVALUE existiert nicht und Wertelisten von Attributen werden nun in eigenen Entitäten gespeichert.
Gibt es einen einfachen Weg, die Ids zu ziehen und zu setzen ?
Danke und Gruß
Jan
24 Februar 2011 um 19:55 Uhr #3279Claudia Mangstl
TeilnehmerHallo,
ja richtig, das wurde umgestellt. Die Wertelisten sind jetzt auch in einer eigenen Tabelle ausgelagert. Allerdings sind diese keine Entität im klassischen Sinn, so dass man über eine Regel nicht an die IDs herankommen wird. D.h. auch hier müsste man den Weg über die Tabellen nehmen.
Wenn Sie so einen Fall haben, könnten Sie statt der Werteliste einfach eine Entität anlegen.Viele Grüße,
Claudia24 Februar 2011 um 21:03 Uhr #3280Jan Giebels
TeilnehmerDann ist da noch ein Bug.
Ich versuche ein Feld vom Typ „Text“ (im Entitätenwizard) mit hinterlegter Werteliste über eine Regel zu befüllen.
server.setFieldValue(sEntity, iId, sField, iWertId);
Dabei gibt es einen Java Fehler, das man kein Integer in einen String casten kann, obwohl das Feld in der DB vom Typ „numeric“ ist.
Logischerweise kann man dort dann auch keinen String speichern.
Gruss
Jan
25 Februar 2011 um 12:05 Uhr #3285Claudia Mangstl
TeilnehmerHallo Jan,
ihr Textfeld mit Werteliste ist in diesem Fall dann ein ID-Feld, da es ja auf die Werteliste referenziert. Somit brauchen Sie diese Methode:
server.setField(sEntityName, iObjectId, sFieldName, iValueId, oValue);
iValueId ist dabei die ID des Eintrags in der Werteliste und oValue der entsprechende Wert dafür.
Da man aber über Regeln nicht an diese IDs herankommt, sondern diese hartcodiert oder per SQL Abfrage ermitteln müsste, war mein Tip von unten eine eigene Entität statt der Werteliste einzusetzen.
Viele Grüße,
Claudia25 Februar 2011 um 12:17 Uhr #3286Jan Giebels
TeilnehmerJetzt versteh ich so langsam den Unterschied zwischen:
server.setFieldValue(sEntity, iId, sField, iWertId);
und
server.setField(sEntityName, iObjectId, sFieldName, iValueId, oValue);
Klar, hardcodiertes ist nicht so toll, jedoch haben wir beim Abgleich der Datenbanken oft den Fall, das eine „Entität mit 2-3 Werten angelegt werden müsste, was in der Masse einfach zu aufwändig währe.
Dann lieber Hardcodieren, da sich die paar Werte pro Werteliste in den letzten Jahren sowieso nicht geändert haben. Wir machen das so, da später diese Tabellen via Bibliotheksregel in der MySQL DB aktualisiert werden sollen und wir einfach den Faktor Mensch minimieren wollen bei der Eingabe von Daten. Eine Auswahl ist einfacher als ein Freitext.
Danke für die Aufklärung.
Gruss
Jan
25 Februar 2011 um 13:05 Uhr #3287Claudia Mangstl
TeilnehmerOk.
Beachten Sie nur bitte, dass bei einem eventuellen Transfer des Nuclets auf ein anderes System die IDs neu vergeben werden.Viele Grüße,
Claudia25 Februar 2011 um 19:12 Uhr #3288Jan Giebels
TeilnehmerDiese Entwicklung ist so spezifisch, das ein Transfer nur auf interne Systeme in Frage käme. Zudem warten wir sehnsüchtig auf die angedacht, integrierte Lösung zum Abgleich mit externen Datenquellen.
Gruss
Jan
26 Februar 2011 um 17:19 Uhr #3289Jan Giebels
TeilnehmerWie lege ich denn einen neuen Datensatz an, der in einem Feld die ID eines Wertelisteneintrags enthalten soll.
Mit mpFields.put(sField, iWertId); klappt es nicht.Gruss
Jan
28 Februar 2011 um 11:35 Uhr #3292Claudia Mangstl
TeilnehmerHallo Jan,
bitte nicht vergessen, an dem Feldnamen „Id“ anzuhängen:
mpFields.put(sField+“Id“, iWertId)
Viele Grüße,
Claudia -
AutorBeiträge