Stephan1
Returning Observer

Medienverwaltung nach Dateiendungen durchsuchen

Jump to solution

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?

0 Kudos
1 Solution

Accepted Solutions

Das war der entscheidende Hinweis Smiley Happy. Somit ergibt sich für das Skript:

View solution in original post

0 Kudos
7 Replies
Lopes
I'm new here

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

0 Kudos
Stephan1
Returning Observer

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

0 Kudos
Lopes
I'm new here

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

0 Kudos
mbergmann
Crownpeak employee

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

0 Kudos

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?

0 Kudos

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.

Peter

Das war der entscheidende Hinweis Smiley Happy. Somit ergibt sich für das Skript:

0 Kudos