- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dom Table anlegen per Skript
Hallo,
ich wรผrde gerne mit einem Skript eine DOM Table anlegen. Es gibt ja das Interface
de.espirit.firstspirit.access.editor.value.Table
leider liegt die zugehรถrige Implementierung TableImpl nicht in der fs-isolated-runtime und kann daher mit dem isolated mode nicht mehr ohne weiteres benutzt werden.
Gibt es eine andere Mรถglichkeit eine Instanz einer Tabelle zu erstellen mittels Java-Code? Die Tabelle scheint das einzige Input Element zu sein, welches sich nicht ohne weiteres per Code manipulieren lรคsst. Ist das Absicht oder mรผssen vielleicht einfach die Klassen in die fs-isolated-runtime in Zukunft?
Gruร Tobi
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Bis 2025.1 ging das noch, seit 2025.2 ist TableImpl aus der so genannten API verschwunden und ich wรผrde auch gern wissen, wie man das jetzt macht.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Die FirstSpirit-Access-API unterliegt strengen Anforderungen an die Kompatibilitรคt, die eine Verwendung รผber viele Releases von FirstSpirit erlaubt.
Die Klasse TableImpl war jedoch nie Teil dieser API. In der API-Dokumentation ist sie nicht erwรคhnt und seit Release 2022.11 ist sie explizit mit "ApiStatus.Internal" markiert. Je nach IDE wird eine Verwendung der Klasse direkt mit einer Warnung quittiert. Solche Klassen sollten nicht verwendet werden, da sie sich jederzeit ohne Vorwarnung รคndern kรถnnen oder sie wie in diesem Fall nicht mehr zugรคnglich sein kรถnnen.
Das Interface Table beschreibt im JavaDoc, dass es sich um die Persistenz-Klasse des DomTableEditorValue handelt. รber die Methode get(Language) lรคsst sich hier eine entsprechende Table holen, das Erzeugen sollte nicht notwendig sein.
Dabei ist zu beachten, dass DomTableEditorValue spรคtestens seit Release 2023.03 als "deprecated" gilt. Der Zugriff รผber FormData bzw. FormField liefert immer eine Table-Instanz fรผr den Editor zurรผck, die Verwendung des EditorValue ist nicht notwendig.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Heiรt das, dass das hier beschriebene Problem gelรถst ist?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@Windmรผller wrote:Das Interface Table beschreibt im JavaDoc, dass es sich um die Persistenz-Klasse des DomTableEditorValue handelt. รber die Methode get(Language) lรคsst sich hier eine entsprechende Table holen, das Erzeugen sollte nicht notwendig sein.
In meinem konkreten Anwendungsfall manipuliere ich das zugrundeliegende XML der Tabelle. Ich wรผsste nicht wie ich das ohne die TableImpl bewerkstelligen soll. Bei der TableImpl konnte man ja einfach XML in den Konstruktor geben. Auch das verlinkte Problem von @hbarthel scheint ja darauf zu basieren, dass man XML verarbeitet.
Fรผr andere Eingabekomponenten gibt es ja auch die entsprechenden Implementierungsklassen in der fs-isolated-runtime. Daher verstehe ich nicht wieso das bei TableImpl anders gemacht wird.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@hbarthel wrote:Heiรt das, dass das hier beschriebene Problem gelรถst ist?
Der Entwickler hat sich leider dafรผr entschieden, einen undokumentierten Weg zu nutzen. In unserer internen Bug-Datenbank konnte ich keinen Feature-Request zu dem Thema finden. Daher wird auch dieser Weg mit neueren Versionen nicht mehr funktionieren.
Daher noch einmal die Bitte: Klassen, Methoden und Felder, die mit "ApiStatus.Internal" versehen sind, sollten nicht verwendet werden. Wenn die Warnung in der IDE nicht ausreicht, kann ArchUnit helfen, solche Verwendungen einfach aufzudecken. Im Falle fehlender Funktionalitรคt ist ein entsprechendes Support-Ticket immer die bessere Wahl.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@dehaatbi wrote:
In meinem konkreten Anwendungsfall manipuliere ich das zugrundeliegende XML der Tabelle. Ich wรผsste nicht wie ich das ohne die TableImpl bewerkstelligen soll. Bei der TableImpl konnte man ja einfach XML in den Konstruktor geben. Auch das verlinkte Problem von @hbarthel scheint ja darauf zu basieren, dass man XML verarbeitet.
Beschreibst Du bitte einmal den konkreten Anwendungsfall, also warum genau Du das XML manipulieren musst?
Fรผr andere Eingabekomponenten gibt es ja auch die entsprechenden Implementierungsklassen in der fs-isolated-runtime. Daher verstehe ich nicht wieso das bei TableImpl anders gemacht wird.
Wenn diese anderen Klassen (wie z.B. OptionImpl) ebenfalls mit "ApiStatus.Internal" annotiert sind, sollten sie so behandelt werden, als wรคren sie gar nicht vorhanden. Denn auch wenn sie nicht direkt verschwinden, kann sich die interne Struktur ohne Vorwarnung รคndern, da fรผr diese die Stabilitรคtskriterien der Access-API nicht gelten.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Im konkreten Fall jetzt geht es um eine maschinelle รbersetzung. Man lieรt also einmal das XML aus, jagt es durch die รbersetzungs-API und erzeugt daraus dann eine neue Table. Ich frage mich in diesem Zusammenhang auch wie ein Modul wie Translation Studio funktionieren kann, ohne Zugriff auf das darunterliegende XML.
Mir ist das mit den internen APIs prinzipiell schon klar, dass man diese nicht verwenden soll, aber oft braucht man halt eine schnelle Lรถsung und dann wird das eben schnell mal billigend in Kauf genommen, dass es irgendwann wieder bricht.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@dehaatbi wrote:Im konkreten Fall jetzt geht es um eine maschinelle รbersetzung. Man lieรt also einmal das XML aus, jagt es durch die รbersetzungs-API und erzeugt daraus dann eine neue Table.
Ein Teamkollege wies mich gerade auf einen mรถglichen Workaround hin. Und zwar kรถnnte es funktionieren, die Tabelle in ein LANG-Tag zu wrappen:
<LANG><TABLE ...></LANG>
Dies รผbergibt man dann an das FormField in Form eines Element.
Aber: Auch wenn dieser Weg funktioniert und er keine internen Klassen verwendet, handelt es sich immer noch um einen undokumentierten Workaround. Erstelle bei Bedarf daher bitte einen entsprechenden Feature-Request, gerne mit Verweis auf diesen Thread.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Das ist ein guter Tipp, habe ich ausprobiert und funktioniert. Da muss man erstmal drauf kommen, dass man die table beim set in ein LANG-Element stopfen muss ๐

