- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
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
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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()))$
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Alles klar, so funktionierts.
Habt dank!
PS: Die Preview soll hier nicht auf dem Freigabestand durchgefรผhrt werden.

