nicbel
I'm new here

Per Skript Medien-Objekte in Datenquelle importieren

Hallo community,

ich möchte in einem Import-Skript Daten aus einer CSV-Datei in eine Datenquelle schreiben. Dabei ist in der Datei nur der Name eines Bildes vorhanden. Die Bilder liegen in der Medienverwaltung. Mittels der Methode getMediaByUid() bekomme ich ein Medien-Objekt was diese Form hat:

<MEDIUM editor="1" filename="Dateiname" id="27357" revision="11331" type="pic" uniquedescription="Dateiname"><LANG displayname="Dateiname" language="DE"/><PICTURE><RESOLUTION crc="e2ade3fd" extension="jpg" height="300" pictureRevision="11331" resolutionid="ORIGINAL" size="22984" width="212"/></PICTURE></MEDIUM>

Wie bekomme ich dieses Objekt nun in mein Datenfeld vom Typ PICTURE?

Grüße, Nic

0 Kudos
Reply
10 Replies
feddersen
Community Manager

Indem Sie die Spalte über die gemappte Eingabekomponente befüllen. Bei einem INPUT_PICTURE geht dies so.

0 Kudos
Reply

Hallo Herr Feddersen,

auf diesem Wege habe ich es versucht und ich bekomme folgenden Fehler:

java.lang.IllegalArgumentException: de.espirit.or.SchemaException: illegal type class de.espirit.firstspirit.access.editor.value.GraphicalMediumImpl for attribute 'image' - correct type is class de.espirit.firstspirit.client.editorcomponent.EditorWrapper

    at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:716)

    at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:199)

    at com.communicode.agro.main.Main$1.run(Main.java:236)

    at com.communicode.agro.main.Main.importCSV(Main.java:263)

    at com.communicode.agro.main.Main.main(Main.java:53)

Caused by: de.espirit.or.SchemaException: illegal type class de.espirit.firstspirit.access.editor.value.GraphicalMediumImpl for attribute 'image' - correct type is class de.espirit.firstspirit.client.editorcomponent.EditorWrapper

    at de.espirit.or.impl.schema.EntityTypeImpl.getAttribute(EntityTypeImpl.java:158)

    at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:709)

0 Kudos
Reply

Die Exception sieht so aus als würden sie nicht die Eingabekomponente befüllen, sondern direkt auf den Entities arbeiten. Ohne den Sourcecode gesehen zu haben, bleibt das aber eine Vermutung.

0 Kudos
Reply

Ich erweitere das csvimport-Skript vom helpdesk, hier der Part:

                                       } else if (columnNames[col].equals("image")) {

                                               jpg = value.replace(".jpg", "");

                                               jpg = jpg.replace("-", "_");

                                               print("jpg = "+jpg+ "\n");

                                               media = mediaStore.getMediaByUid(jpg) ;

                                               print("media = "+media.toXml(true)+ "\n");

                                               pic = media.getMediaContent(lang);

                                               print("pic = "+pic+ "\n");

                                              

                                               //PictureEditorValue

                                               dataset = t.getDataset(po);

                                            data = dataset.getData();

                                            pictureEditor = data.get("st_image").getEditor();

                                            print("pictureEditor = "+pictureEditor+ "\n");

                                           

                                            //GraphicalMedium

                                               graphicalMedium = pictureEditor.get(lang);

                                            graphicalMedium.setMedium(media);

                                            print("graphicalMedium = "+graphicalMedium+ "\n");

                                            po.setValue(columnNames[col], graphicalMedium);

0 Kudos
Reply

Bei Datensätzen wäre es sinnvoller mit dem Interface DataSet zu arbeiten. Wenn Sie direkt auf dem Entity arbeiten müssen Sie für komplexe Feldtypen (im Schema-Editor entspricht das dem Datentyp "FirstSpirit Editor") über das Interface AccessEditorHolder gehen.

Peter
0 Kudos
Reply
gockel
Crownpeak employee

Hallo,

über welche FS-Version reden wir hier?

0 Kudos
Reply

Version Server: 4.2.432.43881

0 Kudos
Reply

Wo ist denn das Interface AccessEditorHolder dokumentiert?

0 Kudos
Reply
gockel
Crownpeak employee

1. AccessEditorHolder ist KEINE öffentliche Schnittstelle, deshalb auch nicht dokumentiert und sollte auch nicht verwendet werden.

zu ihrem Problem:

sie müsssen im Editor das Persistenzobjekt wieder setzen [1] und das Dataobjekt (ab Version 4.2.440 sollte FormData verwendet werden) im Dataset wieder setzen [2]. Im umliegenden Code muss später ein commit() auf der Session gemacht werden [3]

} else if (columnNames[col].equals("image")) {

    jpg = value.replace(".jpg", "");

    jpg = jpg.replace("-", "_");

    print("jpg = "+jpg+ "\n");

    media = mediaStore.getMediaByUid(jpg) ;

    print("media = "+media.toXml(true)+ "\n");

    pic = media.getMediaContent(lang);

    print("pic = "+pic+ "\n");

    //PictureEditorValue

    dataset = t.getDataset(po);

    data = dataset.getData();

    pictureEditor = data.get("st_image").getEditor();

    print("pictureEditor = "+pictureEditor+ "\n");

    //GraphicalMedium

    graphicalMedium = pictureEditor.get(lang);

    graphicalMedium.setMedium(media);

    print("graphicalMedium = "+graphicalMedium+ "\n");

    [1] pictureEditor.set(lang, graphicalMedium);

    [2] dataset.setData(data);

}

[3] orSession.commit();

0 Kudos
Reply