Home Forum Nuclos Entwicklung Makros und Regeln Wert in Attribut übernehmen

Ansicht von 14 Beiträgen - 1 bis 14 (von insgesamt 14)
  • Autor
    Beiträge
  • #2166

    Hallo !

    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 !

    #2167
    Claudia Mangstl
    Teilnehmer

    Hallo Gabriela,

    das sieht auf den ersten Blick eigentlich richtig aus. Was ist denn „projekt_Garantie“ für ein Attribut bzgl. Datentyp usw. ?

    #2168

    Das 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 ?

    #2169
    Claudia Mangstl
    Teilnehmer

    Dann 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 ?

    #2170

    Jetzt gehts ! Vielen Dank !

    #3278
    Jan Giebels
    Teilnehmer

    Kann 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

    #3279
    Claudia Mangstl
    Teilnehmer

    Hallo,

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

    #3280
    Jan Giebels
    Teilnehmer

    Dann 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

    #3285
    Claudia Mangstl
    Teilnehmer

    Hallo 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,
    Claudia

    #3286
    Jan Giebels
    Teilnehmer

    Jetzt 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

    #3287
    Claudia Mangstl
    Teilnehmer

    Ok.
    Beachten Sie nur bitte, dass bei einem eventuellen Transfer des Nuclets auf ein anderes System die IDs neu vergeben werden.

    Viele Grüße,
    Claudia

    #3288
    Jan Giebels
    Teilnehmer

    Diese 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

    #3289
    Jan Giebels
    Teilnehmer

    Wie 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

    #3292
    Claudia Mangstl
    Teilnehmer

    Hallo Jan,

    bitte nicht vergessen, an dem Feldnamen „Id“ anzuhängen:

    mpFields.put(sField+“Id“, iWertId)

    Viele Grüße,
    Claudia

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