Questions & Answers

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

Type a product name