Schmatrick
Returning Observer

Script: Page validieren

Jump to solution

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

1 Solution

Accepted Solutions
bIT_sosswald
Returning Responder

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

View solution in original post

0 Kudos
3 Replies
bIT_sosswald
Returning Responder

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

0 Kudos

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

0 Kudos

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