Search the FirstSpirit Knowledge Base
Hallo Community,
ich versuche via API Werte von einem FS_Catalog in einem anderen zu kopieren.
svg_image_tooltip
<FS_REFERENCE
name="st_picture"
allowEmpty="no"
convertEntities="standard"
imagePreview="no"
upload="yes"
useLanguages="no">
<FILTER>
<ALLOW type="picture"/>
<HIDE type="file"/>
<HIDE type="mediafolder"/>
</FILTER>
<LANGINFOS>
<LANGINFO lang="*" label="Image" description="Please select a picture."/>
</LANGINFOS>
<PROJECTS>
<LOCAL name=".">
<SOURCES>
<FOLDER name="root" store="mediastore"/>
</SOURCES>
</LOCAL>
</PROJECTS>
</FS_REFERENCE>
<FS_CATALOG name="st_svg_image_container" useLanguages="yes">
<LANGINFOS>
<LANGINFO lang="*" label="Alte Komponenente"/>
</LANGINFOS>
<TEMPLATES type="section">
<TEMPLATE uid="svg_tooltip_element"/>
</TEMPLATES>
</FS_CATALOG>
<FS_CATALOG name="st_tooltips" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Neue Komponente"/>
</LANGINFOS>
<TEMPLATES type="section">
<TEMPLATE uid="svg_tooltip_element"/>
</TEMPLATES>
</FS_CATALOG>
Der neue Katalog ist komplett leer, im alten gibt es Inhalte, die ich übertragen möchte. Der Grund ist, dass der alte Katalog irrtümlich sprachabhängig definiert wurde und
ich möchte gerne bestimmte Inhalten retten, die bei der Änderung von useLanguages="yes" zu useLanguages="no" sonst verloren gehen.
Ich habe folgendes ausprobiert, das soll die Cards im neuen Katalog erzeugen.
page.setLock(true,true);
Catalog oldCatalog = (Catalog) sectionFormData.get(masterLanguage, "st_svg_image_container").get();
Catalog newCatalog = (Catalog) sectionFormData.get(masterLanguage, "st_tooltips").get();
for (Catalog.Card oldCard : oldCatalog)
{
newCatalog.create(itemTemplate, oldCard.getItem());
}
sectionFormData.get(masterLanguage, "st_tooltips").set(newCatalog);
section.setFormData(sectionFormData);
page.save("migrated st_svg_image_container->st_tooltips " + masterLanguage.getAbbreviation());
page.setLock(false,true);
Und kriege zur Laufzeit:
de.espirit.firstspirit.agency.ElementValidationReportsException: ValidationError[element='svg_image_tooltip' (ID=346719, project=290792), msg={MultiFormValidationReport{(DE:{st_picture:[Validation{SAVE,false:Must not be empty! Editor: st_picture, Type: de.espirit...}]
at de.espirit.firstspirit.store.access.ElementsValidationCollector.throwIfInvalid(ElementsValidationCollector.java:70)
at de.espirit.firstspirit.store.access.DefaultStoreElement.checkSave(DefaultStoreElement.java:808)
at de.espirit.firstspirit.store.access.DefaultStoreElement.save(DefaultStoreElement.java:718)
Ja, st_picture ist ein Pflichtfeld aber da ist schon was drin und ich ändere da gar nichts.
Ich bin für jeden Tipp dankbar 🙂
Gruß,
Ana
P.S. Das Item-Template svg_tooltip_element hat auch ein st_picture, ist aber kein Pflichtfeld.
<CMS_MODULE>
...
<FS_REFERENCE name="st_picture" convertEntities="standard" imagePreview="no" upload="yes" useLanguages="no">
<FILTER>
<ALLOW type="picture"/>
<HIDE type="file"/>
<HIDE type="mediafolder"/>
</FILTER>
<LANGINFOS>
<LANGINFO lang="*" label="Image" description="Please select a picture."/>
</LANGINFOS>
<PROJECTS>
<LOCAL name=".">
<SOURCES>
<FOLDER name="root" store="mediastore"/>
</SOURCES>
</LOCAL>
</PROJECTS>
</FS_REFERENCE>
</CMS_MODULE>
Hallo Ana,
laut ApiDoc zu Catalog.create musst Du auf jeden Fall noch .add nutzen, da .create eine reine Factory-Methode ist die die erzeugte Card eben NICHT direkt dem Catalog hinzufügt (siehe Hinweis unter „Important:“).
Das ist wahrscheinlich noch nicht die endgültige Lösung, bringt dich aber hoffentlich schonmal weiter.
Zum weiteren Testen wäre ggf. noch ein pragmatischer Ansatz, statt dem normalen .save die SafeOperation zu nutzen, da du dort die Validierung ausschalten kannst. Das natürlich nicht „produktiv“ sondern nur zu Testzwecken, um einfacher herauszufinden, wo genau nach dem Speichern etwas fehlt (sollte dann ja im Formular rot markiert sein).
Viele Grüße
Michael
Hallo Ana,
laut ApiDoc zu Catalog.create musst Du auf jeden Fall noch .add nutzen, da .create eine reine Factory-Methode ist die die erzeugte Card eben NICHT direkt dem Catalog hinzufügt (siehe Hinweis unter „Important:“).
Das ist wahrscheinlich noch nicht die endgültige Lösung, bringt dich aber hoffentlich schonmal weiter.
Zum weiteren Testen wäre ggf. noch ein pragmatischer Ansatz, statt dem normalen .save die SafeOperation zu nutzen, da du dort die Validierung ausschalten kannst. Das natürlich nicht „produktiv“ sondern nur zu Testzwecken, um einfacher herauszufinden, wo genau nach dem Speichern etwas fehlt (sollte dann ja im Formular rot markiert sein).
Viele Grüße
Michael
Hi Michael,
vielen Dank, beide Hinweise haben mir sehr geholfen!
LG Ana