Questions & Answers

hbarthel
New Responder

Isolated vs Non-Isolated FS_LIST-Verwirrung

Hallo zusammen,

wir haben hier grad festgestellt, dass man bei FS_LIST vom Typ database bei der Ausgabe der Listenelemente unterschiedliche Typen zurรผck bekommt (FS 2018-07):

In der isolated-Variante sind es EntityFormData (so war es bis 5.2R18 auch in non-isolated), wobei das beginnend mit R19 in der non-isolated-Geschmacksrichtung Objekte vom Typ IdentifiableIdProvidingFormData sind. Beides ist lt. Doku korrekt, weil sie beide IdProvidingFormData implementieren. Dennoch sind wir verwirrt. Kann das jemand erklรคren?

Ich muss evtl. nicht dazu sagen, dass die Vorgรคnger im Projekt hart kodiert auf EntityFormData prรผfen und wir das jetzt korrigieren mรผssen ๐Ÿ˜ž

GruรŸ, Heiko

6 Replies
boersteken
Crownpeak employee

Hallo Heiko,

warum an dieser Stelle nun Objekte einer anderen internen Klasse zurรผckkommen kann ich nicht sagen. Wie du aber richtig erkannt hast, hat sich das Verhalten der API nicht verรคndert. Das Problem entsteht dadurch, dass ihr Abhรคngigkeiten zu Klassen habt die nicht Teil der API sind. Davon raten wir stark ab, unter anderem um genau diese Situation die ihr jetzt habt zu vermeiden.

Daher ist meine Frage: Warum genau prรผft ihr hart kodiert auf die Klasse EntityFormData und was ist eure fachliche Anforderung, die dies erzwingt?

GrรผรŸe,

Philipp

0 Kudos

Hallo Philipp,

das mรผssen wir noch herausfinden, wir haben den Code wie gesagt nicht geschrieben. Aber es beruhigt mich ungemein, dass e-Spirit selber nicht weiรŸ, warum beim isolated und non-isolated jeweils Objekte unterschiedlichen Typs raus gegeben werden.

Hallo Heiko,

um das Problem sinnvoll beurteilen zu kรถnnen und einem etwaigen Problem auf die schliche zu kommen mรผsstest du uns mehr Informationen zur Verfรผgung stellen. Wo prรผft Ihr auf die Klasse? im Ausgabekanal? in einem Script? in eurer eigenen Modulimplementierung?

Kannst du uns den Quellcode zwecks Reproduktion zur Verfรผgung stellen? Ich wรผrde gerne ausschlieรŸen das Ihr gegen eine unserer internen Implementierungsklassen entwickelt.

GrรผรŸe aus Dortmund

Johannes

0 Kudos

Hallo Johannes,

das Mithras-Projekt nehmen und einmal im isolated und einmal im not-isolated FS:

- Brechpunkt in Vorlage "Products.job_categories" Zeile 13

- Seitenref "jobs_2" im Template Debugger laufen lassen

Die Variable _job hat dann jeweils verschiedenen Klassen: EntityFormData vs IdentifiableIdProvidingFormData.

Dass "wir", also unsere Vorgรคnger interne Klassen verwenden, habe ich ja jetzt schon zweimal geschrieben.

0 Kudos
mikula
Crownpeak employee

Hallo Heiko,

ihr verwendet wie du bereits geschrieben hattest interne Klassen. Die Kollegen aus der Entwicklung des Kernproduktes versuchen bei Ihren Implementierungen immer API Kompatibel zu sein. Das bedeutet jedoch nicht, dass sie versuchen an allen Stellen die gleichen Interna zurรผckzugeben. Wie du selbst merken konntest, kann sich dies bei unterschiedlichen Betriebsformen durchaus unterscheiden.

Kurz: Bei der Entwicklung von Skripten oder Modulen, mรถglichst Immer versuchen API kompatibel zu bleiben.

In dem Konkreten Fall hieรŸe dies: einfach nur mit "IdProvidingFormData" arbeiten.

Viele GrรผรŸe

Martin

0 Kudos
mbergmann
Crownpeak employee

Hallo Heiko,

vielleicht als kleiner Tipp:

Ich vermute mal, dass ihr die internen Klassen im Rahmen einer "instanceof"-Prรผfung nutzt. Das kann man genauso gut mit class("...").isCase(obj) machen - und da kรถnnen dann auch Interfaces angegeben werden:

$CMS_IF(class("de.espirit.firstspirit.access.editor.fslist.IdProvidingFormData").isCase(someValue))$

Das entspricht einem

if(someValue instanceof IdProvidingFormData)

Viele GrรผรŸe

Michael

0 Kudos

Type a product name