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
10 Replies
feddersen
Community Manager

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

0 Kudos

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

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

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

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
gockel
Crownpeak employee

Hallo,

über welche FS-Version reden wir hier?

0 Kudos

Version Server: 4.2.432.43881

0 Kudos

Wo ist denn das Interface AccessEditorHolder dokumentiert?

0 Kudos
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