ampersand83
I'm new here

Gibt es eine einfach Möglichkeit, um in einer Datenquelle gespeicherte Felder vom Typ FS_LIST, etc. extern auszulesen und zu verarbeiten?

Jump to solution

Hallo zusammen,

wir wollen in einem Projekt über einen Webservice auf eine in FS gepflegte DB zugreifen, die Inhalte in einer externen Applikation verarbeiten, aufbereiten und letztlich dynamisch als JSF Tag ausliefern. Bei einfachen Datentypen, wie String oder Integer ist die Verarbeitung ja gar kein Problem, aber was mache ich z.B. wenn ich Felder in der Datenquelle habe, die Inhalte vom komplexen Typ FS_EDITOR (also z.B. FS_LIST, CMS_INPUT_DOM, etc.) besitzen.

Die Idee wäre die DB z.B. per Hibernate anzusprechen und dann die enstsprechenden Felder zu mappen. Wie schaffe ich es jetzt aber die komplexe Struktur einer FS_LIST so zu parsen, dass ich die Inhalte leicht in ein HTML Template schreiben kann und diesen Inhalt dann über das JSF Tag in einer Webseite ausgebe.

Es gibt ja die FormData und FormField API, jedoch sehe ich da noch nicht, wie ich die letztlich als XML vorliegenden Daten einer z.B. FS_LIST hierüber auslesen kann.

Evtl. stehe ich ja jetzt hier einfach auf dem Schlauch. 🙂 Es wäre wirklich toll, wenn mir hier jemand ein paar Denkanstöße geben könnte, wie ich das ganze umsetzen könnte. Also wie bekomme ich die als XML Struktur vorliegenden Daten einer FS_LIST außerhalb von FS ausgelesen und verarbeitet.

Viele Grüße,

Stefan

0 Kudos
1 Solution

Accepted Solutions
maaroufi
I'm new here

Eventuell hilft folgende Testklasse weiter, sie liest die Absätze des ersten DOM einer FS_List aus:

public class FS_LIST_TESTER {

    public static void main(String... args)

            throws MaximumNumberOfSessionsExceededException, IOException,

            AuthenticationException {

        Connection con = ConnectionManager.getConnection("localhost", 11111,

                ConnectionManager.SOCKET_MODE, "Admin", "Admin");

        try {

            con.connect();

            Project pr = con.getProjectByName("Mithras Energy");

            UserService us = pr.getUserService();

            Language lang = pr.getMasterLanguage();

            ContentStoreRoot rt = (ContentStoreRoot) us.getStore(

                    Store.Type.CONTENTSTORE, false);

           

            //Datenquelle 'pressreleases', hier befindet sich die FS_List, deren Content auszulesen ist

            Content2 cont = rt.getContent2ByName("pressreleases");

            Entity enti = cont.getData().get(0);

            Dataset dat = cont.getDataset(enti);

           

            //cs_content=Variablenname der FS_List in der Tabellenvorlage

            DataValue val = dat.getData().get("cs_content");

            FsListEditorValue fsLeditor = (FsListEditorValue) val.getEditor();

            FormDataList domList = fsLeditor.get(lang);

            //Erstes Element der FS_List holen

            IdProvidingFormData data = domList.get(0);

           

            //Aus dem Absatz den DOM mit Namen 'st_text' holen

            FormField feld = data.get(lang, "st_text");

           

           

            DomElement domText = (DomElement) feld.get();

            // Ab hier org.w3c.dom

            Element element = domText.get();

           

           

            NodeList nodeList = element.getChildNodes();

           

            //Textwerte der Absätze ausgeben

            for (int i = 0; i < nodeList.getLength(); i++) {

               

                Element el =(Element)nodeList.item(i);

                System.out.println(el.getTextContent());

            }

        } finally {

            con.disconnect();

        }

    }

}

Parameter müssten angepasst werden

Freundliche Grüße

Ismail

View solution in original post

0 Kudos
2 Replies
dude
I'm new here

Ich glaube dir wird da nicht viel übrig bleiben, als es selbst zu parsen (Methode schreiben, die XML -> HTML wandelt). Zumindest für das häufig benutzte Dom-Eingabefeld ist mir keine andere Lösung bekannt.

Mich würde es wundern, wenn es einen anderen Weg gäbe. Denn für viele dieser XML-Felder gibt es teils Projektabhängige Vorlagen (Absatztemplates in FS_LIST, Formatforlagen in DOM, ...), die auf dem Client einfach nicht vorhanden sind und daher nicht interpretiert werden können.

0 Kudos
maaroufi
I'm new here

Eventuell hilft folgende Testklasse weiter, sie liest die Absätze des ersten DOM einer FS_List aus:

public class FS_LIST_TESTER {

    public static void main(String... args)

            throws MaximumNumberOfSessionsExceededException, IOException,

            AuthenticationException {

        Connection con = ConnectionManager.getConnection("localhost", 11111,

                ConnectionManager.SOCKET_MODE, "Admin", "Admin");

        try {

            con.connect();

            Project pr = con.getProjectByName("Mithras Energy");

            UserService us = pr.getUserService();

            Language lang = pr.getMasterLanguage();

            ContentStoreRoot rt = (ContentStoreRoot) us.getStore(

                    Store.Type.CONTENTSTORE, false);

           

            //Datenquelle 'pressreleases', hier befindet sich die FS_List, deren Content auszulesen ist

            Content2 cont = rt.getContent2ByName("pressreleases");

            Entity enti = cont.getData().get(0);

            Dataset dat = cont.getDataset(enti);

           

            //cs_content=Variablenname der FS_List in der Tabellenvorlage

            DataValue val = dat.getData().get("cs_content");

            FsListEditorValue fsLeditor = (FsListEditorValue) val.getEditor();

            FormDataList domList = fsLeditor.get(lang);

            //Erstes Element der FS_List holen

            IdProvidingFormData data = domList.get(0);

           

            //Aus dem Absatz den DOM mit Namen 'st_text' holen

            FormField feld = data.get(lang, "st_text");

           

           

            DomElement domText = (DomElement) feld.get();

            // Ab hier org.w3c.dom

            Element element = domText.get();

           

           

            NodeList nodeList = element.getChildNodes();

           

            //Textwerte der Absätze ausgeben

            for (int i = 0; i < nodeList.getLength(); i++) {

               

                Element el =(Element)nodeList.item(i);

                System.out.println(el.getTextContent());

            }

        } finally {

            con.disconnect();

        }

    }

}

Parameter müssten angepasst werden

Freundliche Grüße

Ismail

0 Kudos