Skip to main content

Script: FS_REFERENCE Feld auslesen und in ein XML Feld in DB übertragen

Comments

9 comments

  • Zendesk API User
    Author: feddersen - 3/3/2014 17:58

    Beispiel für die Befüllung einer FS_REFERENCE sowie ein Beispiel wie wie man mit Datensätzen arbeitet.

    0
  • Zendesk API User
    Author: daniel_philippi - 3/4/2014 11:16

    Das würde funktionieren. Ich muss aber Daten während der Generierung in eine Datenquelle schreiben und während der Generierung ist der ContentStore read-only.

    Bisher bin ich nicht über die Datenquellen sondern über die Datenbanktabellen gegangen. Dort kann ich schreiben. Allerdings ist hier das Problem des EditorWrappers bzw. der XML Feldes. Alle anderen Felder lassen sich ohne Probleme schreiben.

    Ich bräuchte jetzt nur noch einen Tipp wie ich ein Elemente vom Typ Media in einen EditorWrapper speichern kann.

    0
  • Zendesk API User
    Author: feddersen - 3/4/2014 16:59

    Vermutlich kann man den auf ein http://www.e-spirit.com/odfs50/access/de/espirit/firstspirit/access/editor/ReferenceEditorValue.html casten und dort dann die UID der Targetreference setzen.

    0
  • Zendesk API User
    Author: daniel_philippi - 3/14/2014 15:31

    Guter Versuch.

    Laut API müsste das auch funktionieren.

    EditorWrapper ew = (EditorWrapper) entity.getValue("image");

    ReferenceEditorValue refEditValue = (ReferenceEditorValue) ew;

    Allerdings erhalte ich bei folgender Zeile eine NullPointerException:

    refEditValue.set(context.getProject().getMasterLanguage(), tr);

    Ich hoffe du meintest diese Funktion?!

    tr ist dabei meine FS_REFERENCE Eingabekomponente. Bei der Eingabekomponente ist auch ein Bild gewählt.

    ---------

    Aber irgendwie hab ich das Gefühl, dass das nicht das ist was du mit "und dort dann die UID der TargetReference setzen" meinst.

    Kannst du es daher bitte etwas genauer beschreiben, danke!

    0
  • Zendesk API User
    Author: daniel_philippi - 4/10/2014 8:11

    Hat jemand noch eine Idee?

    Braucht man dazu vielleicht das API Access Modul?

    0
  • Zendesk API User
    Author: feddersen - 4/14/2014 14:09

    Mit Targetreference meine ich den Datentyp, den eine FS_REFERENCE Komponente zurückliefert.

    http://www.e-spirit.com/odfs51/Vorlagenentwicklung/Vorlagensyntax/Datentypen/TargetReference/?community

    Da musst du dir eine neue erzeugen, wie es auch im Beispiel gemacht wird. http://www.e-spirit.com/odfs51/access/?de/espirit/firstspirit/access/editor/value/TargetReference.html

    Da du immer nur minimale Schnipsel postet, bei denen die entscheidenen Dinge fehlen, ist es auch schwierig dir zu helfen. Bitte das komplette Script, die kompletten Fehlermeldungen und die verwendete FirstSpirit-Version angeben.

    0
  • Zendesk API User
    Author: daniel_philippi - 4/15/2014 12:14

    Ok, hier die gewünschten Daten.

    Das folgende Script wird in einer Absatzvorlage per CMS_RENDER aufgerufen und bekommt als Parameter die FS_REFERENCE st_image übergeben. Es wird nur beim Generieren aufgerufen.

    import de.espirit.firstspirit.access.schedule.ScheduleContext;

    ScheduleContext sc = context.getGenerationContext().getScheduleContext();

    sc.setProperty("sc_element_image", st_image);

    Das Script speichert das Bild im ScheduleContext, auf den ich im nächsten Schritt wieder zugreife.

    Im Auftrag wird nach der Generierung das folgende Script aufgerufen, das dann das Bild in ein bestimmte Datenquelle schreiben soll. In der Datenquelle gibt es ein Feld image vom Typ FirstSpiritEditor.

    //!BeanShell

    import de.espirit.firstspirit.access.UserService;

    import de.espirit.or.Session;

    import de.espirit.or.schema.Entity;

    UserService userService = context.getProject().getUserService();

    Session session = userService.getTemplateStore().getSchemes().getSchemaByName("webworld").getSession();

    scProperty = context.getProperty("sc_element_image");

    Entity entity = session.createEntity("dq_image");

    entity.setValue("image", scProperty);

    try {

         session.commit();

    }

    catch(Throwable error) {

         context.logInfo(error.toString());

    }

    Für ein Textfeld funktioniert es, nicht für ein Bild das in ein FirstSpirit Editor Feld geschrieben werden soll, da kommt dann die Fehlermeldung im Anhang.

    0
  • Zendesk API User
    Author: feddersen - 4/15/2014 12:31

    Im zweiten Skript arbeitest du "low-level" auf der Entity, das passt nicht zur "high-level" Komponente im ersten Skript. Lösung: Im zweiten Skript auch "high-level" arbeiten. Dafür kannst du dich an unseren Beispielen orientieren, siehe How to work with entities

    0
  • Zendesk API User
    Author: daniel_philippi - 4/15/2014 12:35

    Ok, danke.

    Aber funktioniert das dann auch während der Generierung, bei der der Content Store auf read only steht?

    0

Please sign in to leave a comment.