Search the FirstSpirit Knowledge Base
Gibt es eine Möglichkeit die Medienverwaltung nach Dateiendungen (z. B. PDF, ZIP, WMV, AVI, SWF, ...) zu durchsuchen. Ich benötige eine Übersicht von Dateien sortiert nach ihrem Suffix und in einem zweiten Schritt nach ihrer Dateigröße. Sollte es das nicht geben, kennt jemand ein Skript, das die Suche übernimmt?
Das war der entscheidende Hinweis . Somit ergibt sich für das Skript:
Hallo Stephan,
die normale Suchfunktion im SiteArchitect von FirstSpirit bietet diese Funktionalität bereits. Es gibt die Möglichkeit in den Sucheinstellungen unter "Einschränkung der Treffer (Facetten)" auf der Schaltfläche "Weitere Einschränkungen hinzufügen" spezifische Filter beispielsweise für Dateityp und Dateigröße zu setzen, allerdings wird hier ein Suchbegriff vorausgesetzt. Sobald der entsprechende Filter gesetzt ist, kann auch die Sortierung auf die entsprechende Eigenschaft eingestellt werden. Für den ContentCreator gibt es derzeit keine ähnliche Alternative.
Viele Grüße
Rafael
Hallo Rafael,
weil ich die Sucheinstellungen nicht finden kann, gehe ich davon aus, dass Du die Sucheinstellungen für FS 5 meinst. Ich verwende FS 4.2. Gibt es dort eine Möglichkeit für die spezielle Suche?
Gruss
Stephan
Hallo Stephan,
etwas Vergleichbares gibt es in 4.2 meines Wissens nicht. Ich habe hier ein Skript geschrieben, welches alle Objekte in der Medienverwaltung mit der entsprechenden Extension und Dateigröße in eine CSV Excel-Datei exportiert. Das würde es möglich machen die Liste nach den gewollten Parametern zu sortieren. Die Sortierung selbst in einem Skript umzusetzen wäre deutlich aufwendiger. Ich hoffe, dass dieser Ansatz hilft.
//!Beanshell
//Imports
import de.espirit.firstspirit.agency.*;
import de.espirit.firstspirit.access.store.Store;
import de.espirit.firstspirit.access.store.mediastore.*;
//Test option pane
showInfo(String message) {
JOptionPane.showMessageDialog(null, message);
}
//Get mediaStore from storeAgent
storeAgent = context.requireSpecialist(StoreAgent.TYPE);
mediaStore = storeAgent.getStore(Store.Type.MEDIASTORE);
//Get default picture resolution
originalResolution = context.getProject().getOriginalResolution();
//Get project master language
masterLanguage = context.getProject().getMasterLanguage();
//Get all media files from mediaStore
mediaElements = mediaStore.getChildren(Media.class,true).toList();
//Get a fileWriter to export media details (Path needs to be set)
FileWriter documentStream = new FileWriter("D:\\Test\\mediaDetails.csv", false);
BufferedWriter out = new BufferedWriter(documentStream);
//iterate over mediaFiles
for(mediaElement:mediaElements) {
//get media Filename
fileName = mediaElement.getFilename();
// If the media element is a file, get the file and its extension + size
if(mediaElement.getType() == Media.FILE) {
fileExtension = mediaElement.getFile(masterLanguage).getExtension();
fileSize = mediaElement.getFile(masterLanguage).getSize();
// Else the media element is a picture. Get its extension and size
} else {
fileExtension = mediaElement.getPicture(masterLanguage).getPictureMetaData(originalResolution).getExtension();
fileSize = mediaElement.getPicture(masterLanguage).getPictureMetaData(originalResolution).getSize();
}
//Write details to csv file
out.write(fileName+ ";" +fileExtension+ ";" +fileSize+"\n");
}
//Close file writer
out.close();
//Output message once export is done
showInfo("Media Elements exported!");
Viele Grüße
Rafael
Bitte in der Zeile
mediaElements = mediaStore.getChildren(Media.class,true).toList();
kein .toList() benutzen! Hierdurch werden alle Mediastore-Elemente in eine neue Liste geladen und dort gehalten.
Es ist völlig ausreichend,
mediaElements = mediaStore.getChildren(Media.class,true);
zu verwenden. Hierdurch wird immer nur das aktuell benötigte Element über den Iterator geladen und bereits benutzte können durch die GC freigegeben werden.
Hinweis:
<T extends StoreElement> Listable<T> StoreElement.getChildren(Class<T>, boolean)
und
Listable<T> extends Iterable<T>
Viele Grüße
Michael
Ohne .toLlist() wird
de.espirit.firstspirit.access.script.ExecutionException: Can't iterate over type: class de.espirit.firstspirit.store.access.AbstractStoreElement$StoreElementListable
ausgegeben. Mit toList() erhalte ich die gewünschte Liste. Oder muss zusätzlich noch etwas verändert werden?
Das könnte eine Einschränkung der Beanshell-Engine in 4.2 sein. Dann die Schleife "for(mediaElement:mediaElements)" durch eine while-Schleife mit dem Iterator ersetzen.