You are not logged in.
Pages: 1
hi,
wie kann ich eine Einplanung so vornehmen das das Versenden des Reports nur dann ausgeführt wird
wenn in der Tabelle (Dynamischen Liste) etwas vorhanden ist ?
danke schonmal
Offline
Hallo, guten Abend,
mit bedingten Einplanungen allein ist das leider nicht ohne weiteres moeglich, da diese keinen Zugriff auf den eingeplanten Bericht haben. (Man koennte natuerlich noch extra fuer die Bedingung eine weitere Variante erstellen, aber das das irgenwann nicht mehr synchron ist, ist absehbar)
Wenn Du Dich bereits mit ReportServer Scripten beschaeftigt hast, kannst du vermutlich etwas mit dem SchedulerExecutionHook machen. Der hat Zugriff auf den ausgeführten Bericht und kann über job.getExecutedReport().hasData() abfragen, ob dieser Daten zurückgegeben hat.
Viele Grüße
Thorsten
Hallo,
nein mit Scripts aufem ReportServer hatte ich noch nichts zu tun...
gibts es ein Tutorial oder Beispiel zu einem Script das ich mir das mal anschauen kann ?
Grüße
Offline
Hallo,
ein paar Beispiele gibt es in unserem Blog: https://reportserver.net/blog/category/scripting/
Und ansonsten haben wir im Shop natuerlich den Script Guide, der eine etwas grundlegendere Einführung gibt: https://reportserver.net/de/services/#header-2
Cheers,
Thorsten
hallo,
ich hab nun folgenden code in das Verzeichnis "fileserver Root/bin/onstartup.d" gepackt
den Report Server neugestartet aber trotzdem bekomme ich einen automatischen erzeugten Report zu gesendet.
def callback = [
doesVetoExecution : { job, logEntry ->
if(job instanceof ReportExecuteJob && job.getReport() instanceof TableReport){
job.doExecute()
if(job.getExecutedReport() instanceof CompiledTableReport && !job.getExecutedReport().hasData()){
return new SkipJobExecution("No data")
}
}
}
] as SchedulerExecutionHookAdapter
GLOBALS.services.callbackRegistry.attachHook(HOOK_NAME, SchedulerExecutionHook.class, callback)
an was kann das liegen ?
Offline
Hallo Kai,
könntest Du mal das komplette Skript inklusive imports etc. posten?
Grüße
Arno
Offline
klar
import net.datenwerke.scheduler.service.scheduler.hooks.SchedulerExecutionHook
import net.datenwerke.scheduler.service.scheduler.hooks.adapter.SchedulerExecutionHookAdapter
import net.datenwerke.rs.scheduler.service.scheduler.jobs.report.ReportExecuteJob
import net.datenwerke.rs.base.service.reportengines.table.entities.TableReport
import net.datenwerke.rs.base.service.reportengines.table.output.object.CompiledTableReport
import net.datenwerke.scheduler.service.scheduler.helper.SkipJobExecution
def HOOK_NAME = "SkipEmptyListSchedulerHook";
def callback = [
doesVetoExecution : { job, logEntry ->
if(job instanceof ReportExecuteJob && job.getReport() instanceof TableReport){
job.doExecute()
if(job.getExecutedReport() instanceof CompiledTableReport && !job.getExecutedReport().hasData()){
return new SkipJobExecution("No data")
}
}
}
] as SchedulerExecutionHookAdapter
GLOBALS.services.callbackRegistry.attachHook(HOOK_NAME, SchedulerExecutionHook.class, callback)
Offline
Hallo Kai,
bei mir funktioniert das Skript tadellos. Hattest Du es mal versucht erst einmal mit "exec" direkt im Terminal auszuführen? Um zu überprüfen, dass der Hook nach Neustart eingehängt ist kannst Du folgendes Skript verwenden
GLOBALS.services.callbackRegistry.getRegisteredHooks().each{ k,v -> tout.println(k) }
return null
Hier sollte als Ausgabe, unter anderem der Name "SkipEmptyListSchedulerHook" erscheinen.
Grüße
Arno
Offline
Hallo,
bei der ausgabe des Scripts erscheint nichts.
wir haben um den ReportServer "neu" zu starten einfach den Application Server (tomcat) neugestartet
oder gibt es für den ReportServer ein eigenen neustart Script ?
da sich der Hook ja so nicht registriert hat.
Grüße
Offline
Hi,
wenn Du das "HookScript" direkt auf dem Terminal ausführst (exec ..), klappt dann alles? Wie sieht denn die etc/scripting/scripting.cf Konfigurationsdatei aus? Ist da onstartup.d als Startupverzeichnis eingetragen?
Grüße
Arno
Offline
wenn ich das "HookScript" im Terminal ausführe bekomme ich :
net.datenwerke.rs.scripting.service.scripting.exceptions.ScriptEngineException: javax.script.ScriptException: javax.script.ScriptException: java.lang.IllegalArgumentException
at net.datenwerke.rs.scripting.service.scripting.engines.GroovyEngine.eval(GroovyEngine.java:67)
at net.datenwerke.rs.scripting.service.scripting.ScriptingServiceImpl.executeScript(ScriptingServiceImpl.java:207)
at net.datenwerke.rs.scripting.service.scripting.ScriptingServiceImpl.executeScript(ScriptingServiceImpl.java:253)
at net.datenwerke.rs.scripting.service.scripting.ScriptingServiceImpl.executeScript(ScriptingServiceImpl.java:301)
at net.datenwerke.rs.scripting.service.scripting.ScriptingServiceImpl.executeScript(ScriptingServiceImpl.java:272)
at net.datenwerke.rs.scripting.service.scripting.terminal.commands.ExecScriptCommand.doRollbackExecute(ExecScriptCommand.java:310)
at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:66)
at net.datenwerke.rs.scripting.service.scripting.terminal.commands.ExecScriptCommand$1$1.doFilter(ExecScriptCommand.java:247)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:66)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
at net.datenwerke.rs.scripting.service.scripting.terminal.commands.ExecScriptCommand$1.call(ExecScriptCommand.java:238)
at net.datenwerke.rs.scripting.service.scripting.terminal.commands.ExecScriptCommand$1.call(ExecScriptCommand.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.script.ScriptException: javax.script.ScriptException: java.lang.IllegalArgumentException
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:138)
at net.datenwerke.rs.scripting.service.scripting.engines.GroovyEngine.eval(GroovyEngine.java:65)
... 16 more
da das Script ja eh nur gefeuert werden soll, wenn ein Report gesendet werden soll, kann das Script ja alleine von sich aus auch nicht funktionieren, oder ?? ...
scripting.cf:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<scripting>
<enable>true</enable>
<restrict>
<location>bin</location>
</restrict>
<startup>
<login>fileserver/bin/onlogin.d</login>
<rs>fileserver/bin/onstartup.d</rs>
</startup>
</scripting>
</configuration>
Offline
Das folgende Script
import net.datenwerke.scheduler.service.scheduler.hooks.SchedulerExecutionHook
import net.datenwerke.scheduler.service.scheduler.hooks.adapter.SchedulerExecutionHookAdapter
import net.datenwerke.rs.scheduler.service.scheduler.jobs.report.ReportExecuteJob
import net.datenwerke.rs.base.service.reportengines.table.entities.TableReport
import net.datenwerke.rs.base.service.reportengines.table.output.object.CompiledTableReport
import net.datenwerke.scheduler.service.scheduler.helper.SkipJobExecution
def HOOK_NAME = "SkipEmptyListSchedulerHook";
def callback = [
doesVetoExecution : { job, logEntry ->
if(job instanceof ReportExecuteJob && job.getReport() instanceof TableReport){
job.doExecute()
if(job.getExecutedReport() instanceof CompiledTableReport && !job.getExecutedReport().hasData()){
return new SkipJobExecution("No data")
}
}
}
] as SchedulerExecutionHookAdapter
GLOBALS.services.callbackRegistry.attachHook(HOOK_NAME, SchedulerExecutionHook.class, callback)
registriert nur den Hook. Das heißt, wenn das über das Terminal ausgeführt wird, sollte dies keine Fehler werfen, sondern einfach der Hook registriert werden. Angenommen das script heißt "skipExecution.groovy". Dann kommt bei
exec skipExecution.groovy
obiger stack trace?
Offline
Hallo,
genau, wenn ich
exec SkipEmptyListSchedulerHook.groovy
im terminal ausführe kommt obiger StackTrace
Offline
Das ist sehr komisch. Ist in den Logs ein längerer StackTrace zu finden (der StackTrace sieht ein wenig abgeschnitten aus)? Welche RS Version ist hier im Einsatz?
Offline
kompletter StackTrace:
net.datenwerke.rs.scripting.service.scripting.exceptions.ScriptEngineException: javax.script.ScriptException: javax.script.ScriptException: java.lang.IllegalArgumentException
at net.datenwerke.rs.scripting.service.scripting.engines.GroovyEngine.eval(GroovyEngine.java:67)
at net.datenwerke.rs.scripting.service.scripting.ScriptingServiceImpl.executeScript(ScriptingServiceImpl.java:207)
at net.datenwerke.rs.scripting.service.scripting.ScriptingServiceImpl.executeScript(ScriptingServiceImpl.java:253)
at net.datenwerke.rs.scripting.service.scripting.ScriptingServiceImpl.executeScript(ScriptingServiceImpl.java:301)
at net.datenwerke.rs.scripting.service.scripting.ScriptingServiceImpl.executeScript(ScriptingServiceImpl.java:272)
at net.datenwerke.rs.scripting.service.scripting.terminal.commands.ExecScriptCommand.doRollbackExecute(ExecScriptCommand.java:310)
at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:66)
at net.datenwerke.rs.scripting.service.scripting.terminal.commands.ExecScriptCommand$1$1.doFilter(ExecScriptCommand.java:247)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:66)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
at net.datenwerke.rs.scripting.service.scripting.terminal.commands.ExecScriptCommand$1.call(ExecScriptCommand.java:238)
at net.datenwerke.rs.scripting.service.scripting.terminal.commands.ExecScriptCommand$1.call(ExecScriptCommand.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.script.ScriptException: javax.script.ScriptException: java.lang.IllegalArgumentException
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:138)
at net.datenwerke.rs.scripting.service.scripting.engines.GroovyEngine.eval(GroovyEngine.java:65)
... 16 more
Caused by: javax.script.ScriptException: java.lang.IllegalArgumentException
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:335)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:132)
... 17 more
Caused by: java.lang.IllegalArgumentException
at groovyjarjarasm.asm.ClassReader.<init>(Unknown Source)
at groovyjarjarasm.asm.ClassReader.<init>(Unknown Source)
at groovyjarjarasm.asm.ClassReader.<init>(Unknown Source)
at org.codehaus.groovy.runtime.ProxyGeneratorAdapter.createClassVisitor(ProxyGeneratorAdapter.java:256)
at org.codehaus.groovy.runtime.ProxyGeneratorAdapter.<init>(ProxyGeneratorAdapter.java:158)
at groovy.util.ProxyGenerator.instantiateAggregate(ProxyGenerator.java:161)
at groovy.util.ProxyGenerator.instantiateAggregateFromBaseClass(ProxyGenerator.java:117)
at groovy.util.ProxyGenerator.instantiateAggregateFromBaseClass(ProxyGenerator.java:103)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.asType(DefaultGroovyMethods.java:7506)
at org.codehaus.groovy.runtime.dgm$48.doMethodInvoke(Unknown Source)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1074)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:904)
at org.codehaus.groovy.runtime.InvokerHelper.invokePojoMethod(InvokerHelper.java:836)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:827)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:164)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.asType(ScriptBytecodeAdapter.java:587)
at Script50.run(Script50.groovy:8)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:332)
... 18 more
Version:
RS2.2.2-5639
Offline
Ich habe eben noch einmal eine frische RS 2.2.2 installiert und auch dort läuft das Skript leider einwandfrei... Zwei Ideen hätte ich noch:
- Wurden irgendwelche Bibliotheken von Hand geupdated?
- Welche Java Version ist im Einsatz?
Offline
- nein, es wurden keine Bibliotheken per hand aufgespielt
- es läuft die Java Version 1.8.0_77 auf dem Server
Grüße
Offline
Dann liegt es vermutlich an der Java Version. ReportServer 2.2.2 läuft leider nur zuverlässig mit Java 1.7. Ab RS 3.0 kann auch Java 1.8 verwendet werden.
Grüße
Thomas
Offline
ein Downgrad der java Version kommt auf dem Sever leider nicht Frage.
gibt es einen anderen Weg um den Hook zu nutzten ?
Offline
Wenn ein Downgrade von Java nicht möglich ist wird dies mit der alten ReportServer Version leider nicht gehen. Das einfachste wäre ein Upgrade auf RS 3.0. Hier müsste allerdings auf die Enterprise Version geupdated werden.
Grüße
Arno
Offline
Pages: 1