C_Klingbeil
I'm new here

Generierung: setValue auf einer Entity

Hallo,

ich iteriere über einen contentSelect und würde gerne die Entitys temporär für die Ausgabe manipulieren:

$CMS_SET(set_list,[])$

$CMS_FOR(i,fr_contentSelect)$

    $CMS_SET(void,i.setValue("spalte",neuerWert))$

     $CMS_SET(void,set_list.add(i))$

$CMS_END_FOR$

Soweit funktioniert das auch alles. Die Vorschau ist fehlerfrei, die Ausgabe auch. ABER: Im Generation-Log wirft das setValue in der roten Zeile oben folgenden Fehler:

ERROR 16.12.2011 10:50:52.881 (de.espirit.firstspirit.generate.SiteProduction): java.lang.UnsupportedOperationException

Ich habe schon versucht, die Entity zu kopieren (i.copy()) oder eine neue zu erzeugen (i.getSession().createEntity(entityType,session)), aber auch diese beiden Funktionen liefern eine UnsupportetOperationException. Nur copyFrom() funktioniert, aber ich habe kein Objekt. in das ich die Werte speichern könnte.

Wie kann ich diesen Fehler in der Generierung beheben?

Viele Grüße,

C. Klingbeil

0 Kudos
6 Replies
C_Klingbeil
I'm new here

Server-Version: 4.2.453.46978

0 Kudos

Während einer Generierung befindet sich alles im Read-only Modus. Deswegen ist ein Entity.setValue nicht möglich. Sie müssten also den Werte in eine eigene Liste kopieren oder nur für diese Spalte eine temporäre Variable verwenden.

0 Kudos

Der Read-only Modus während der Generierung war mir schon klar, nur wie bekomme ich aus meiner Entity i ein neues Objekt, das ich bearbeiten kann? Ich muss ja nicht auf dem Original-Datensatz arbeiten. Eine Kopie des Objekts würde ja reichen. Nur habe ich bisher bei der Erzeugung des Objekts keinen Erfolg gehabt. Außerdem ist komisch, dass trotz des Fehlers die Manipulation während der Generierung funktioniert.

0 Kudos

Ich kenne den konkreten Anwendungsfall nicht, vielleicht schildern sie diesen mal? Grundsätzlich

können sie die Werte der Entity einfach in eine (Hash)map o.ä. schreiben und das dann weiterverwenden. Nur weiß ich nicht, ob das in ihrem Fall weiterhilft.

0 Kudos

Hallo Herr Feddersen,

wir haben eine alte Bilddatenbank übernommen. Diese hat eine Kategorie, eine Unterkategorie und eine Unterunterkategorie. Leider besitzt jedes Bildelement nur die Informationen der untersten Kategorie, die je nach der Tiefe der Kategorien eine Kategorie, eine Unterkategorie oder eine Unterunterkategorie sein kann. Der Select geht über die Kategorie. Bei der Ausgabe sortieren wir erst nach der Unterkategorie und dann ggf nach der Unterunterkategorie. Dafür benötige ich bei jeder Entity (= Bild in dieser Kategorie) die Informationen zur Unterkategorie, die ich bei der Generierung bei Unterunterkategorien nur über bild.unterunterkategorie.unterkategorie bekomme (bei Unterkategorien sind sie ja schon in der Entity enthalten). Das sieht dann ungefähr so aus:

Die Liste set_images:

$CMS_FOR(i,fr_st_images)$

     $CMS_SET(void,i.setValue("bilder_to_unterkategorie",i.bilder_to_unterunterkategorie.unterunterkategorie_to_unterkategorie))$

     $CMS_SET(void,set_images.add(i))$

$CMS_END_FOR$

Die Soriterung:

$CMS_IF(set_isubcat)$

     $CMS_SET(set_images,set_images.sort(x -> x.bilder_to_unterunterkategorie.sortierung))$

$CMS_END_IF$

$CMS_SET(set_images,set_images.sort(x -> x.bilder_to_unterkategorie.sortierung))$

Ich bin für jede Idee dankbar, denn trotz funktionierender Sortierung und Befüllung der Liste, bekomme ich bei der Generierung ca. 70 ERROR (UnsupportedOpperationException) geloggt. Die würde ich gerne verhindern.

Viele Grüße,

C. Klingbeil

0 Kudos

Der Weg der Wahl wäre, den gewünschten Wert zusammen mit dem Datensatz in einer neuen Datenstruktur zu sammenln. Z.B. in einer Map (Datensatz -> vollständige Kategorie).

Peter
0 Kudos