Questions & Answers

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
phillip_austerf
New Creator

Hallo Aissam,

Du kannst im Script (Typ: Kontext) alle Medien eines Ordners in allen Unterordnern holen und dann darรผber jedes Element prรผfen (Name holen, etc.):

context.getElement().getChildren(Media.class, true)

Es ist gut mรถglich, dass Media.class geรคndert werden muss (Alle Medien im Media Store haben ja eine gemeinsame Vaterklasse und die kannst Du hier einsetzen, falls es nicht Media sein sollte).

Viele GrรผรŸe,

Phillip.

0 Kudos

Hallo Philipp,

kannst du mir bitte ein beispiel Skript schicken wie das aussehn kann.

Und wie finde ich raus welche Vaterklasse die Elemente haben.

Kann man auch sowas auch in einem Template schreiben?

Vielen Dank!

Viele GrรผรŸe,

Aissam

0 Kudos

Hallo Aissam,

das gibt ein Beispiel; alles weitere ist dann abhรคngig von Deinem Ziel und Projekt.

Mir ist nicht klar, was Du ins Template schrieben willst, aber grundsรคtzlich kannst Du bspw. eine Formatvorlage oder ein Script schreiben, das genau das macht (bspw. s.u.) und das dann in Deinem PageTemplate aufrufen o.รค.

Viele GrรผรŸe,
Phillip.

Dieses Script loggt alle Anzeigenamen der Mastersprache. Es wird auch auf die MetaFormDaten zugegriffen und eine Eingabekomponente geholt und als simpler String ausgegeben. Hier muss dann natรผrlich als Parameter der wirkliche Name aus dem Metadaten Template stehen.

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

IDProvider e = context.getElement();
Language pMasterLanguage = context.getProject().getMasterLanguage(); 
for (Media _media : e.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, "sc_eineEingabeComponente").get().toString());
}
0 Kudos

Hallo Phillip,

wenn ich das obige Skript aufrufe bekomme ich folgende Fehlermeldung:

(de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl): error in task 'get_mediastore_date' - schedule entry 'Mediastore daten auslesen' (id=132890) - de.espirit.firstspirit.access.script.SyntaxError: bsh.ParseException: Parse error at line 2, column 1. Encountered: }

de.espirit.firstspirit.access.script.SyntaxError: bsh.ParseException: Parse error at line 2, column 1. Encountered: }

  at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.<init>(BeanshellScriptEngine.java:76)

  at de.espirit.firstspirit.server.script.BeanshellScriptEngine.getExecutable(BeanshellScriptEngine.java:55)

  at de.espirit.firstspirit.common.ScriptUtil.getExecutable(ScriptUtil.java:86)

  at de.espirit.firstspirit.admin.ScriptTaskImpl.getExecutable(ScriptTaskImpl.java:115)

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

  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.ParseException: Parse error at line 2, column 1. Encountered: }

  at bsh.Parser.generateParseException(Parser.java:5973)

  at bsh.Parser.jj_consume_token(Parser.java:5925)

  at bsh.Parser.Statement(Parser.java:2706)

  at bsh.Parser.BlockStatement(Parser.java:2812)

  at bsh.Parser.Block(Parser.java:2776)

  at bsh.Parser.MethodDeclaration(Parser.java:409)

  at bsh.Parser.BlockStatement(Parser.java:2807)

  at bsh.Parser.Line(Parser.java:200)

  at bsh.Interpreter.Line(Interpreter.java:1014)

  at bsh.Interpreter.eval(Interpreter.java:651)

  at bsh.Interpreter.eval(Interpreter.java:758)

  at bsh.Interpreter.eval(Interpreter.java:747)

  at bsh.PreparsedScript.<init>(PreparsedScript.java:46)

  at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.<init>(BeanshellScriptEngine.java:70)

... 16 more

0 Kudos

Hallo Aissam,

mein ursprรผngliches Script wirft keinen Parser Fehler, daher wรคre es interessant zu sehen, was Du verรคndert hast.

GruรŸ,

Phillip.

0 Kudos

Hallo Phillip,

so sieht mein Skript aus:

//!Beanshell

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

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

import de.espirit.firstspirit.access.Language; 

IDProvider e = context.getElement();

Language pMasterLanguage = context.getProject().getMasterLanguage(); 

for (Media _media : e.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());

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

}

0 Kudos

Hallo Phillip,

hab den Quellcode jetzt direkt im Auftragverwaltungstool im Server Manager kopiert und aufgerufen.

Fehlermeldung:

de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.script.ExecutionException: Typed variable declaration : Error in method invocation: Method getElement() not found in class'de.espirit.firstspirit.server.scheduler.DelegatingScheduleContext' : at Line: 6 : in file: inline evaluation of: ``__execute() { //!Beanshell import de.espirit.firstspirit.access.store.mediastore . . . '' : context .getElement ( )

Called from method: __execute at line 6

FSVersion=5.2.1608.76631#4449;JDK=1.8.0_60 64bit Oracle Corporation;OS=Linux 3.10.0-693.5.2.el7.x86_64 amd64;Date=23.01.2018 11:13:37

de.espirit.firstspirit.access.script.ExecutionException: Typed variable declaration : Error in method invocation: Method getElement() not found in class'de.espirit.firstspirit.server.scheduler.DelegatingScheduleContext' : at Line: 6 : in file: inline evaluation of: ``__execute() { //!Beanshell import de.espirit.firstspirit.access.store.mediastore . . . '' : context .getElement ( )

Called from method: __execute at line 6

  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: Typed variable declaration : Error in method invocation: Method getElement() not found in class'de.espirit.firstspirit.server.scheduler.DelegatingScheduleContext' : at Line: 6 : in file: inline evaluation of: ``__execute() { //!Beanshell import de.espirit.firstspirit.access.store.mediastore . . . '' : context .getElement ( )

Called from method: __execute

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

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

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

  at bsh.BSHVariableDeclarator.eval(BSHVariableDeclarator.java:86)

  at bsh.BSHTypedVariableDeclaration.eval(BSHTypedVariableDeclaration.java:84)

  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 getElement() not found in class'de.espirit.firstspirit.server.scheduler.DelegatingScheduleContext'

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

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

  at bsh.Name.invokeMethod(Name.java:858)

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

... 25 more

0 Kudos

Hallo Aissam,

Ich vermute, dass das Problem beim Template Scope liegt.

Wenn Du das Template erzeugst, dann kannst Du auf der 1. Reiter (Eigenschaften) beim Script den Scope festlegen. Dort mรผsste fรผr das Script "Context menu" ausgewรคhlt werden.

Dann kannst Du das Script auf einem Media Store Ordner ausfรผhren und siehst alle Medien darunter.

Falls Du das in einem anderen Rahmen laufen lassen mรถchtest, dann musst Du den Startpunkt (den IDProvider e) anders holen als mit context.getElement();

Viele GrรผรŸe,
Phillip.

0 Kudos

Hallo Phillip,

danke erstmal fรผr deine Hilfe.

Ich mรถchte das script in der Auftragsverwaltung mit der generierung bzw. publzierung starten und den Namen, pfad und medadaten auslesen und speichern.

Ist das mรถglich und wie bekomme ich den mediastore ordner?

Viele GrรผรŸe,

Aissam

0 Kudos

Type a product name