- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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

