Marsupilami
I'm new here

KeyValue-Objekte

Hi @ll,

wir sind gerade dabei, von Version 4.1 auf 4.2 umzusteigen. Dabei hindert uns z.Z. folgender Code-Block, mit dem man aus einem Remote-Projekt eine Datensatz-Entity holt:

$CMS_SET(tableTemplate, destPageRef.getContent2Params().getTableTemplate())$
$CMS_SET(contentIdString, data.contentID)$
$CMS_SET(keyValue, class("de.espirit.or.schema.KeyValue").new(tableTemplate.getEntityType().getName()))$
$CMS_SET(empty, keyValue.add(contentIdString.toNumber()))$
   
$CMS_SET(entity,tableTemplate.getSchema().getSession(!#global.preview).find(keyValue))$

Mit 4.2 funktioniert das nicht, weil sich die API geändert hat. Man bekommt folgende Fehlemeldung

ERROR ($CMS_SET(keyValue, class("de.espirit.or.schema.KeyValue").new(tableTemplate.getEntityType().getName()))$ at 89, 2): new de.espirit.or.schema.KeyValue: wrong params

Das KeyValue-Objekt muß laut API-Doku noch weitere Parameter mitbekommen

KeyValue(String entityTypeName, Object... values)

Ein einfaches Erweitern mit null bringst leider nicht, dann bekommt man eine NPE.

Einfach nur data.contentID hilft auch nicht. Das Objekt data ist Datenbankverweis auf einen Datensatz aus der Datenquellen-Verwaltung eines Remote-Projektes.

Wie kann ich hier weitermachen?

Grüße

Martin

0 Kudos
6 Replies
StefanSchulz
I'm new here

Eigentlich benötigt man gar kein KeyValue, sondern müsste auf dem kurzen Weg an das Entity kommen:

$CMS_SET(entity,tableTemplate.getSchema().getSession(!#global.preview).find(tableTemplate.getEntityType().getName(), contentIdString.toNumber()))$
0 Kudos

Da bekomme ich null zurück:

INFO  ($CMS_SET(entity, tableTemplate.getSchema().getSession( ! #global.preview).find(tableTemplate.getEntityType().getName(), contentIdString.toNumber()))$ at 93, 2): replacing null value with empty default!

0 Kudos

Und contentIdString enthält garantiert die ID (Zahlenwert) eines im aktuellen Stand vorhandenen Datensatzes der abgefragten Tabelle? Der technische Code hinter der 4.1-Variante und der 4.2-Variante ist bis auf die API-Änderung funktional identisch.

0 Kudos

Jepp...das war das erste, was ich überprüft habe. tableTemplate ist die korrekte Tabelle und in contentIdString steht wirklich und wahrhaftig die Id des Datensatzes...habs mir mal im Preview-Html ausgeben lassen:

tableTemplate: articles_master
contentIdString: 959184
entity: null

0 Kudos
Peter_Jodeleit
Crownpeak employee

Sowohl der Konstruktor von KeyValue und die Methode "Session.find()" erwarten als letzten Parameter ein Array (sog. varargs http://download.oracle.com/javase/1.5.0/docs/guide/language/varargs.html). Der Konstrukor von KeyValue ohne Werte ist in 4.2 weggefallen. Ich würde wie von Stefan vorgeschlagen "Session.find" benutzen:

$CMS_VALUE(session.find("table-name", [contentIdString.toNumber].toArray))$

Noch ein Hinweis, wie sie die Session holen:

tableTemplate.getSchema().getSession(!#global.preview)

Auch die Vorschau kann auf dem Freigabestand durchgeführt werden, daher sollten Sie statt dessen auf #global.release zugreifen.

Peter
0 Kudos

Alles klar, so funktionierts.

Habt dank!

PS: Die Preview soll hier nicht auf dem Freigabestand durchgeführt werden.

0 Kudos