【问题标题】:New query executer in Jaspersoft Studio for DeployRJaspersoft Studio for DeployR 中的新查询执行器
【发布时间】:2016-07-19 19:48:38
【问题描述】:

我正在尝试将 Jaspersoft Studio 与 DeployR 脚本结合使用。我正在使用 Microsoft here 的本教程,它实际上是针对 iReport(Jaspersoft Studio 的前解决方案)的。我已将教程中的必要 jar 文件添加到类路径中,并在 DeployR 中部署了 R 脚本。

在 Jasper 中运行报告后,报告中没有任何内容,也没有给出错误。但是我有一个警告说:No query executer factory class registered for deployrScript queries. 所以我猜问题是 Jaspersoft Studio 找不到 deployrScript 的类,虽然这个类 jRQueryExecuter2 在类路径中!

在jrxml中可以看到声明:

    <queryString language="deployrScript">
        <![CDATA[<deployr url="http://127.0.0.1:8000/deployr">
           <script filename="Cluster_Demo_Jasperserver.R" directory="root"  author="testuser"/>
        </deployr>]]>
    </queryString>

整个jrxml是:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="deployrSample" pageWidth="612" pageHeight="792" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="5a314889-9cd2-4943-ad5f-13ef1bd6ca74">
    <parameter name="RRP_plotwidth" class="java.lang.Double" isForPrompting="false">
        <defaultValueExpression><![CDATA[555]]></defaultValueExpression>
    </parameter>
    <parameter name="RRP_plotheight" class="java.lang.Double" isForPrompting="false">
        <defaultValueExpression><![CDATA[555]]></defaultValueExpression>
    </parameter>
    <parameter name="RRP_dataset" class="java.lang.String">
        <defaultValueExpression><![CDATA["iris"]]></defaultValueExpression>
    </parameter>
    <parameter name="RRP_clusters" class="java.lang.Integer">
        <defaultValueExpression><![CDATA[3]]></defaultValueExpression>
    </parameter>
    <parameter name="RRP_clustering_type" class="java.lang.String">
        <defaultValueExpression><![CDATA["hclust"]]></defaultValueExpression>
    </parameter>
    <queryString language="deployrScript">
        <![CDATA[<deployr url="http://127.0.0.1:8000/deployr">
    <script filename="Cluster_Demo_Jasperserver.R" directory="root" author="testuser"/>
</deployr>]]>
    </queryString>
    <field name="REPORT1" class="java.lang.String">
        <fieldDescription><![CDATA[file:cluster_output.png]]></fieldDescription>
    </field>
    <pageHeader>
        <band height="63" splitType="Stretch">
            <image>
                <reportElement x="30" y="10" width="50" height="37" uuid="4ce16c2b-5680-48b6-86e8-ce992c543a40"/>
                <imageExpression><![CDATA["C:/Users/aort.png"]]></imageExpression>
            </image>
        </band>
    </pageHeader>
    <detail>
        <band height="600" splitType="Stretch">
            <image scaleImage="RetainShape" hAlign="Center">
                <reportElement positionType="Float" x="100" y="40" width="353" height="218" uuid="f2294c37-5751-41f9-a3b4-fcfe80b69fec"/>
                <imageExpression><![CDATA[$F{REPORT1}]]></imageExpression>
            </image>
        </band>
    </detail>
</jasperReport>

和 R 脚本:

library(cluster)

#uncomment these lines to test in standalone mode
dataset <- "mtcars"
clusters <- 4
clustering_type <- 'hclust'
plotwidth<-555
plotheight<-555


if (dataset == 'iris') {
  data <- iris[,1:4]
  df <-data.frame(data$Sepal.Length, data$Sepal.Width)

} else if (dataset == 'mtcars') {
  data <- mtcars
  df <-data.frame(data$drat, data$disp)
} else {
  stop("Enter a valid dataset")
}

if (clustering_type == 'kmeans') {

  fit <- kmeans(df, clusters)
  png("cluster_output.png", width=plotwidth, height=plotheight);
  clusplot(df, fit$cluster, color=TRUE, shade=TRUE, labels=0, lines=0, main = dataset)
  dev.off()

} else if (clustering_type == "hclust") {

  d <- dist(as.matrix(df))
  fit <-hclust(d)
  png("cluster_output.png", width=plotwidth, height=plotheight);
  plot(fit, main = dataset)
  dev.off()

} else  {
  stop ("enter a valid clustering type")
}

DeployR 代码:

library(cluster)

#uncomment these lines to test in standalone mode
#dataset <- "iris"
#clusters <- 4
#clustering_type <- 'hclust'
#plotwidth<-555
#plotheight<-555
if (dataset == 'iris') {
  data <- iris[,1:4]
  df <-data.frame(data$Sepal.Length, data$Sepal.Width)

} else if (dataset == 'mtcars') {


data <- mtcars
  df <-data.frame(data$drat, data$disp)
} else {
  stop("Enter a valid dataset")
}

if (clustering_type == 'kmeans') {

  fit <- kmeans(df, clusters)
  png("cluster_output.png", width=plotwidth, height=plotheight);
  clusplot(df, fit$cluster, color=TRUE, shade=TRUE, labels=0, lines=0, main = dataset)
  dev.off()

} else if (clustering_type == "hclust") {

  d <- dist(as.matrix(df))
  fit <-hclust(d)
  png("cluster_output.png", width=plotwidth, height=plotheight);
  plot(fit, main = dataset)
  dev.off()

} else  {
  stop ("enter a valid clustering type")
}

我已按照 Narcis 的建议将 net.sf.jasperreports.query.executer.factory.deployrScript=com.revo.deployr.client.jasper.factory.RQueryExecuterFactory 添加到属性中,但 REPORT1 字段仍然为空,我在报告中什么也没有。
我的问题是如何将 DeployR 添加到 Jaspersoft Studio?

【问题讨论】:

  • 您是否在 iReport 中查看过相同的报告?
  • 不,我只使用 jaspersoft Studio

标签: r jasper-reports jaspersoft-studio


【解决方案1】:

您所遵循的教程似乎没有详细介绍如何注册查询执行器(DeployR 自定义客户端库部分中的第 9 点)。

除了将 jar 文件添加到类路径之外,您还需要在 Jaspersoft Studio 中设置如下属性:

net.sf.jasperreports.query.executer.factory.[your_query_language_name]=[the_canonical_name_of_your_query_executer_factory_class]

在您的情况下,您应该:

net.sf.jasperreports.query.executer.factory.deployrScript=com.revo.deployr.client.jasper.factory.RQueryExecuterFactory

如果您打算在 JasperReports 服务器实例上使用它,您需要在 &lt;webapp-path&gt;/WEB-INF/classes/jasperreports.properties 文件中为 webapp 设置相同的属性。在这种情况下,需要重新启动应用程序。

【讨论】:

  • 我照你写的做了。仍然没有出报告! Jasper 是如何知道获取创建的图像并将其放入 REPORT1 字段的?
  • 当我使用文本字段而不是图像元素时,文本字段的值为空
  • 抱歉,我不小心在属性键中引入了错字。我已经编辑了我的答案以纠正这个问题。这应该修复查询执行器注册。要在第一条评论中回答您的问题,我需要查看 DeployR Client 代码来判断。它不是 JasperReports 代码(JasperSoft Studio 的核心)。
  • 我在库中看不到“net.sf.jasperreports.query.executer.factory”!有一个 net.sf.jasperreports.engine.query 包,其中包含 AbstractQueryExecuterFactory 等类
  • 这只是 JasperReports 寻找的需要具有该前缀的属性(参见 config reference)。它不需要是一个包
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多