Search the FirstSpirit Knowledge Base
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
Indem Sie die Spalte über die gemappte Eingabekomponente befüllen. Bei einem INPUT_PICTURE geht dies so.
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)
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.
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);
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.
Hallo,
über welche FS-Version reden wir hier?
Version Server: 4.2.432.43881
Wo ist denn das Interface AccessEditorHolder dokumentiert?
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();