sad_djeridi_ais
I'm new here

Alle Medien vom Projekt anzeigen

Hallo zusammen,

ist es in FirstSpirit möglich ein Skript zuschreiben, das alle Medienname und Metadaten von einem Projekt anzeigt, die in einem bestimmten Ordner im Mediastore liegen?

Viele Grüße,

Aissam

0 Kudos
15 Replies

Hallo Aissam,

in diesem Fall hast Du einen anderen Context:

import de.espirit.firstspirit.access.Language;

import de.espirit.firstspirit.access.schedule.ScheduleContext;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.mediastore.Media;

import de.espirit.firstspirit.agency.LanguageAgent;

import de.espirit.firstspirit.agency.StoreAgent;

final StoreAgent pSpecialist = context.requestSpecialist(StoreAgent.TYPE);

final LanguageAgent pLanguageAgent = context.requestSpecialist(LanguageAgent.TYPE);

final Store pMediaStore = pSpecialist.getStore(Store.Type.MEDIASTORE, true);

final Language pMasterLanguage = pLanguageAgent.getMasterLanguage();

for (Media _media : pMediaStore.getChildren(Media.class, true))

{

    context.logInfo(_media.getLanguageInfo(pMasterLanguage).getDisplayName() + " - " + _media.getUid());  

    // Meda Form Data  

    if (!_media.hasMeta())      

    continue;  

    context.logInfo(_media.getMetaFormData().get(pMasterLanguage, "md_groups").get().toString());

}

Dies solltest Du ausführen können als Auftrag nach einem Generierungsschritt.

Den Pfad musst Du speziell holen, da kann ich aber nicht genau sagen, wie, falls es nicht die Standard URLs sind.

Viele Grüße,
Phillip.

0 Kudos

Hallo Phillip,

ich habe das Skript so angepasst:

import de.espirit.firstspirit.access.Language;

import de.espirit.firstspirit.access.schedule.ScheduleContext;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.mediastore.Media;

import de.espirit.firstspirit.agency.LanguageAgent;

import de.espirit.firstspirit.agency.StoreAgent;

final StoreAgent pSpecialist = context.requestSpecialist(StoreAgent.TYPE);

final LanguageAgent pLanguageAgent = context.requestSpecialist(LanguageAgent.TYPE);

final Store pMediaStore = pSpecialist.getStore(Store.Type.MEDIASTORE, true);

final Language pMasterLanguage = pLanguageAgent.getMasterLanguage();

for (Media _media : pMediaStore.getChildren(Media.class, true)){

    context.logInfo(_media.getFilename()  + "  :  " + _media.getUid());  

    // Meda Form Data  

    if (!_media.getParent().hasMeta())      

        continue;  

    if(_media.getParent().isFolder()){   

        context.logInfo("Berechtigung: " +_media.getParent().getMetaFormData().get(pMasterLanguage, "md_groups").get().getAllowed("access").toString(";"));

        context.logInfo("URL :  " +_media.getParent().getStoredUrl(pMasterLanguage ));

  

    }

}

Bekomme aber auf der fett markierten Zeile folgende Fehlermeldung

Vorher kommt das und kann man das irgendwie abfangen?

Die Metadaten sind Bereichtigungen in denen steht welche Gruppen diese Datei lesen kann.

Der Datei selbst hat aber keine Metadaten sondern der Ordner in der die Datei drin steckt.

Habe ich da ein Denkfehler?

INFO  23.01.2018 13:30:50.578 (de.espirit.firstspirit.store.access.AccessStoreBuilder): TEMPLATESTORE(false) loaded in 0ms

ERROR 23.01.2018 13:30:50.594{dNR=} (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.script.ExecutionException: Error in method invocation: Method toString(java.lang.String) not found in class'java.util.TreeSet' : at Line: 20 : in file: inline evaluation of: ``__execute() { import de.espirit.firstspirit.access.Language; import de.espirit.f . . . '' : .toString ( ";" )

at line 20

de.espirit.firstspirit.access.script.ExecutionException: Error in method invocation: Method toString(java.lang.String) not found in class'java.util.TreeSet' : at Line: 20 : in file: inline evaluation of: ``__execute() { import de.espirit.firstspirit.access.Language; import de.espirit.f . . . '' : .toString ( ";" )

at line 20

at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:111)

at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:106)

at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:134)

at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2475)

at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2458)

at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:2390)

at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:590)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:436)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:56)

Caused by: bsh.EvalError: Error in method invocation: Method toString(java.lang.String) not found in class'java.util.TreeSet' : at Line: 20 : in file: inline evaluation of: ``__execute() { import de.espirit.firstspirit.access.Language; import de.espirit.f . . . '' : .toString ( ";" )

at bsh.BSHPrimarySuffix.doName(BSHPrimarySuffix.java:179)

at bsh.BSHPrimarySuffix.doSuffix(BSHPrimarySuffix.java:120)

at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:80)

at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)

at bsh.BSHBinaryExpression.eval(BSHBinaryExpression.java:123)

at bsh.BSHArguments.getArguments(BSHArguments.java:65)

at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:69)

at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)

at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)

at bsh.BSHBlock.evalBlock(BSHBlock.java:130)

at bsh.BSHBlock.eval(BSHBlock.java:80)

at bsh.BSHBlock.eval(BSHBlock.java:46)

at bsh.BSHIfStatement.eval(BSHIfStatement.java:48)

at bsh.BSHBlock.evalBlock(BSHBlock.java:130)

at bsh.BSHBlock.eval(BSHBlock.java:80)

at bsh.BSHBlock.eval(BSHBlock.java:46)

at bsh.BSHEnhancedForStatement.eval(BSHEnhancedForStatement.java:80)

at bsh.BSHBlock.evalBlock(BSHBlock.java:130)

at bsh.BSHBlock.eval(BSHBlock.java:80)

at bsh.BshMethod.invokeImpl(BshMethod.java:371)

at bsh.BshMethod.invoke(BshMethod.java:267)

at bsh.BshMethod.invoke(BshMethod.java:170)

at bsh.PreparsedScript.invoke(PreparsedScript.java:66)

at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:100)

... 14 more

Caused by: bsh.ReflectError: Method toString(java.lang.String) not found in class'java.util.TreeSet'

at bsh.Reflect.resolveExpectedJavaMethod(Reflect.java:395)

at bsh.Reflect.invokeObjectMethod(Reflect.java:97)

at bsh.BSHPrimarySuffix.doName(BSHPrimarySuffix.java:176)

... 37 more

0 Kudos

Hallo Aissam,

Du checkst die Datei, nicht den Ordner.

Und Dein Script geht auch davon aus, dass es immer gesetzte Meta Daten gibt und diese auch immer Permissions hat. Dein Script ignoriert Fälle, in denen das nicht zutrifft und daher kommt es zu Fehlern.

Zudem musst Du dir den Ordner holen und  diesen prüfen. Es wäre aus Scripting Sicht sinnvoll sich zu merken, welche Ordner Du dann schon geprüft hast: Stelle Dir 1.000 Medien in einem Ordner vor. Dann würdest Du 999x überprüfen, was Du eigentlich schon beim 1. mal geprüft hast.

Viele Grüße,
Phillip.

0 Kudos

Hallo Phillip,

ich verstehe nicht warum die Fehlermeldung:

rror during script execution : de.espirit.firstspirit.access.script.ExecutionException: Error in method invocation: Method toString(java.lang.String) not found in class'java.util.TreeSet' : at Line: 20 : in file: inline evaluation of: ``__execute() { import de.espirit.firstspirit.access.Language; import de.espirit.f . . . '' : .toString ( ";" )

angezeigt wird obwohl get() die Permission klasse ist.

Hier die angepasste Version:

import de.espirit.firstspirit.access.Language;

import de.espirit.firstspirit.access.schedule.ScheduleContext;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.mediastore.Media;

import de.espirit.firstspirit.agency.LanguageAgent;

import de.espirit.firstspirit.agency.StoreAgent;

final StoreAgent pSpecialist = context.requestSpecialist(StoreAgent.TYPE);

final LanguageAgent pLanguageAgent = context.requestSpecialist(LanguageAgent.TYPE);

final Store pMediaStore = pSpecialist.getStore(Store.Type.MEDIASTORE, true);

final Language pMasterLanguage = pLanguageAgent.getMasterLanguage();

String tempUid = "";

for (Media _media : pMediaStore.getChildren(Media.class, true)){

    context.logInfo(_media.getFilename()  + "  :  " + _media.getUid());  

    // Meda Form Data  

    if (!_media.getParent().hasMeta())      

        continue;

    if(_media.getParent().getUid().equals(tempUid))

        continue;

    tempUid = _media.getParent().getUid(); 

    if(_media.getParent().isFolder()){

        context.logInfo("TEMP UID: " +tempUid);

context.logInfo("TOSTRING: " +_media.getParent().getMetaFormData().get(pMasterLanguage, "md_groups").get().toString());

        if(_media.getParent().getMetaFormData().get(pMasterLanguage, "md_groups").get().getAllowed("access")  != null){   

            context.logInfo("Berechtigung: " +_media.getParent().getMetaFormData().get(pMasterLanguage, "md_groups").get().getAllowed("access").toString(";"));

            context.logInfo("URL :  " +_media.getParent().getStoredUrl(pMasterLanguage ));

        }

    }

}

0 Kudos

Hallo Aissam,

der Fehler ist eindeutig:

Die Zeile

context.logInfo("Berechtigung: " +_media.getParent().getMetaFormData().get(pMasterLanguage, "md_groups").get().getAllowed("access").toString(";"));

verursacht

Error during script execution : de.espirit.firstspirit.access.script.ExecutionException: Error in method invocation: Method toString(java.lang.String) not found in class'java.util.TreeSet' : at Line: 20 : in file: inline evaluation of: ``__execute() { import de.espirit.firstspirit.access.Language; import de.espirit.f . . . '' : .toString ( ";" )

weil die Funktion

toString( String )

nicht existiert, siehe https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString()

Versuch stattdessen einfach nur

.toString()

Gruß,
Phillip.

0 Kudos

Hallo Phillip,

danke hat funktioniert Smiley Happy

Jetzt habe ich noch 3 Fragen.

Wie kann man den Pfad der Datei auslesen? Muss man das einzeln aufbauen mit der parent funktion oder gibt es was einfacheres?

Wie kann man die Endung der Datei ausleben, wie z.B. das es pdf oder xls ist.

getFilname gibt mir nur den Dateinamen ohne Endung zurück.

Und die letzte Frage wäre, kann man alles was man alle Daten in einer csv Datei über das Skript speicher?

Danke für deine Unterstützung!

Viele Grüße,

Aissam

0 Kudos