ana_oleski
Returning Observer

FS_Catalog: Inhalte kopieren

Jump to solution

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>

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

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

View solution in original post

0 Kudos
2 Replies
mbergmann
Crownpeak employee

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

0 Kudos

Hi Michael,

vielen Dank, beide Hinweise haben mir sehr geholfen!

LG Ana

0 Kudos