Search the FirstSpirit Knowledge Base
Hallo zusammen,
im Zuge einer Migration habe ich ein Script geschrieben, welches eine Absatzvorlage zu einer anderen Absatzvorlage migriert.
Leider existieren im System einige Seiten mit ungültigen Referenzen/Werten, sodass nach dem page.save() ein Fehler auftritt, wegen der bestehenden ungültigen Eingaben.
Kann ich irgendwie validideren ob eine Seite fehlerfrei ist? Ich selber habe in der FirstSpirit Access API nichts gefunden.
Viele Grüße,
Patrick Wittke
Hi Patrick,
schau mal in der Deveoper-API ob dir dieser Agent hilft: ValidationAgent (FirstSpirit Developer-API)
Damit müsstest du FormData Objekte oder ganze IDProvider gegen die definierten RULES und für verschiedene Validation-Scopes validieren können.
PS: An dem Skript zur Migration von Absätzen auf andere Absätze wäre ich interessiert. 😉
Beste Grüße
Sandro
Hi Patrick,
schau mal in der Deveoper-API ob dir dieser Agent hilft: ValidationAgent (FirstSpirit Developer-API)
Damit müsstest du FormData Objekte oder ganze IDProvider gegen die definierten RULES und für verschiedene Validation-Scopes validieren können.
PS: An dem Skript zur Migration von Absätzen auf andere Absätze wäre ich interessiert. 😉
Beste Grüße
Sandro
Hallo Sandro,
danke für den Hinweis, hat super funktioniert!
Bezüglich des Scripts würde ich mich nochmal morgen melden, da ich nachfragen muss, ob ich das hier teilen darf. Ich denke aber, dass nichts dagegen spricht.
Das Script ist aber recht statisch. Also viel "Magie" passiert hier nicht!
Viele Dank & Viele Grüße,
Patrick Wittke
Hallo Sandro,
das mit dem ValidationAgent hat sich für mich doch erstmal erledigt, da hier keine Funktionalität für rekursives validieren gegeben wird. Das heißt wenn ich die Page da reinwerfe, werden nicht die unterliegenden Absatzvorlagen geprüft.
Mein Workaround sieht daher so aus:
try {
page.setLock(true,true);
page.save("Validation Check",true);
page.setLock(false,true);
} catch (Exception e) {
page.setLock(false,true);
continue;
}
Ich darf das ganze Script hier auch teilen, aber wie gesagt, sollte nichts besonderes sein.
//!Beanshell
// 2021-11-11 / Script: Bildergalerie CW migrieren auf Mediengalerie [FirstSpirit] (Story: CW-2119) / Patrick Wittke
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.agency.LanguageAgent;
import de.espirit.firstspirit.access.Language;
import de.espirit.firstspirit.access.store.Store.Type;
import de.espirit.firstspirit.access.store.templatestore.*;
import de.espirit.firstspirit.access.store.pagestore.*;
import de.espirit.firstspirit.access.ReferenceEntry;
import de.espirit.firstspirit.access.link.*;
import de.espirit.firstspirit.forms.FormData;
import de.espirit.firstspirit.client.access.editor.lists.*;
import java.util.List;
//setup
LanguageAgent languageAgent = context.requireSpecialist(LanguageAgent.TYPE);
List<Language> langList = languageAgent.getEditorialLanguages();
StoreAgent storeAgent = context.requestSpecialist(StoreAgent.TYPE);
TemplateStoreRoot templateRoot = storeAgent.getStore(Type.TEMPLATESTORE);
LinkTemplates linkTemplates = templateRoot.getLinkTemplates();
LinkTemplate imageLinkTemplate = linkTemplates.getTemplate("lt_image_global");
SectionTemplates sectionTemplates = templateRoot.getSectionTemplates();
SectionTemplate imageSectionTemplate = sectionTemplates.getTemplate("image_gallery");
SectionTemplate mediaSectionTemplate = sectionTemplates.getTemplate("st_media_gallery");
SectionTemplate mediaEntrySectionTemplate = sectionTemplates.getTemplate("st_media_gallery_entry");
//all uses of image_gallery
ReferenceEntry[] referenceEntry = imageSectionTemplate.getIncomingReferences();
for(entry: referenceEntry){
if(entry.getStoreType().toString().equals("PAGESTORE")){
//get pagestore section & formdata
Section imageSection = entry.getReferencedElement();
FormData imageData = imageSection.getFormData();
//content of the section
Body body = imageSection.getParent();
//page of the given section
Page page = body.getParent();
//get current position of imagegallery
int index = body.getChildIndex(imageSection);
// Check if a page and content is a valid
// This is a workaround, else every sectiontemplate has to be validated one by one plus page
try {
page.setLock(true,true);
page.save("Validation Check",true);
page.setLock(false,true);
} catch (Exception e) {
page.setLock(false,true);
continue;
}
if(page.isLockSupported() && !page.hasTask() && !page.getStore().isRelease()) {
//lock page
page.setLock(true,true);
//creating mediagallery & get formdata
Section mediaSection = body.createSection(imageSection.getName(), mediaSectionTemplate);
FormData mediaData = mediaSection.getFormData();
for(lang: langList){
//set displayname of section
mediaSection.setDisplayName(lang, imageSection.getDisplayName(lang));
//setting values
//set headline
mediaData.get(lang,"st_headline").set(imageData.get(lang,"st_headline").get());
//set headline level
mediaData.get(lang,"st_headlineLevel").set(imageData.get(lang,"st_headlineLevel").get());
//set description
mediaData.get(lang,"st_description").set(imageData.get(lang,"st_description").get());
//set background to white
mediaData.get(lang,"st_background").set("media-gallery-white");
//set hideOrShow to showAll
mediaData.get(lang,"st_hideOrShow").set("showAll");
Catalog catalog = mediaData.get(lang,"st_mediaEntries").get();
for(image: imageData.get(lang,"st_imageEntries").get()){
Link imageLink = imageLinkTemplate.createLink(lang);
FormData imageLinkData = imageLinkTemplate.getFormDefaults();
FormData mediaEntryData = mediaEntrySectionTemplate.getFormDefaults();
FormData imageEntryData = image.getItem();
//ImageLinkfields
// Copyrighttext and Copyright Text is always empty
imageLinkData.get(lang,"lt_image").set(imageEntryData.get(lang,"st_image").get());
imageLinkData.get(lang,"lt_alt").set(imageEntryData.get(lang,"st_alt").get());
imageLinkData.get(lang,"lt_title").set(imageEntryData.get(lang,"st_title").get());
imageLinkData.get(lang,"lt_caption").set(imageEntryData.get(lang,"st_caption").get().toText(false));
imageLink.setFormData(imageLinkData);
//Mediafields
mediaEntryData.get(lang, "st_imageVideoEntry").set(imageLink);
mediaEntryData.get(lang, "st_enableImageDownload").set(imageEntryData.get(lang,"st_enableImageDownload").get());
//create and add card to catalog
Catalog.Card card = catalog.create(mediaEntrySectionTemplate,mediaEntryData);
catalog.add(card);
}
//set images
mediaData.get(lang,"st_mediaEntries").set(catalog);
//set formdata
mediaSection.setFormData(mediaData);
}
//move mediagallery to position of imagegallery
body.moveChild(mediaSection,index);
//save before delete, else position of mediagallerie is lost
page.save("Migration",true);
imageSection.delete();
page.save("Migration",true);
//unlock page
page.setLock(false,true);
}
}
}
Vielen Dank für deine Hilfe!
Viele Grüße,
Patrick Wittke