Search the FirstSpirit Knowledge Base
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
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()))$
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!
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.
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
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.
Alles klar, so funktionierts.
Habt dank!
PS: Die Preview soll hier nicht auf dem Freigabestand durchgeführt werden.