Questions & Answers

SOLVED
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

Type a product name