我是在eclipse中使用BIRT的新手,我需要将BIRT中的对象传递给HTML动态文本(在Layout中)。我需要从BIRT端传递对象到HTML动态文本(在Layout中)
数据集的onFetch
json = {Name: row["Name"],
Lastname: row["Lastname"],
Date: row["Date"]};
beforeClose of Dataset
reportContext.setPersistentGlobalVariable("json", json);
并通过布局中的动态文本
var str = <value-of>reportContext.getPersistentGlobalVariable("json")</value-of>;
我有错误Uncaught SyntaxError: 意外的标识符
var str = [object Object];
谁能告诉我正确的方向?我想知道如何在Birt Report和JavaScript(HTML)之间传递对象?
你应该解释一下你要实现的目标,为什么你认为你需要 "将对象传递给HTML动态文本"?
在BIRT中,有两种类型的动态文本项,似乎你把它们混在一起了。
动态文本项:你将值指定为一个Javascript表达式,例如 "Hello world "或 "Hello " + row["NAME"],如果你的数据集有一列NAME。
文本项:你将值指定为HTML,例如Hello world,或者Hello row["NAME"]。
这类似于Java Servlets与Java Server Pages,两者可以做同样的事情,但方式不同。
这两者都需要你的布局元素能够访问数据集的数据。这通常是通过将布局元素放置在与数据集绑定的表项或列表项中来实现的(参见属性中的 "绑定 "选项卡)。
为了简单起见,我建议忘掉 "文本项目",始终使用 "动态文本项目"。
你的语法var str = ...;是一个非工作的语法混合物。
在 "动态文本项 "里面,你的意思可能是指
reportContext.getPersistentGlobalVariable("json")
这不会给你一个SyntaxError,因为它是一个有效的JavaScript表达式。
但它不会像你想象的那样工作,它会尝试将JS对象渲染成文本,结果可能是"[对象对象]"。
注意,BIRT中的脚本发生在BIRT内部,而不是在浏览器中。
你是否真的想生成(用BIRT)一个包含Javascript的HTML页面,而这个Javascript是在浏览器中执行的?
从未尝试过,但应该是可以的。
确保将 "动态文本项目 "的类型设置为HTML,并使用类似这样的表达式。
("<script type=\"text/javascript\">\n" +
"alert('Hello world');\n" +
"</script>\n"
)
或者用动态内容。
("<script type=\"text/javascript\">\n" +
"alert('Hello " + row["NAME"] + "');\n" +
"</script>\n"
)
但这就复杂了。
要以这种方式传递JSON对象(而不是像row["NAME"]这样的简单字符串),你需要编写代码,将JSON内容写成Javascript源文本。
你可以通过以下步骤将数据集中的对象传递给动态文本。
步骤-1:创建一个报表级别的变量。步骤-2:在 "Fetch "方法中创建一个对象。就像你已经创建了json对象一样
vars["user"]={
Name: row["Name"],
Lastname: row["LastName"],
Date: row["Date"]
};
第3步:在ClosebeforeClose方法中,将对象分配给变量[如你所做的那样] 第4步:在你的报表上创建一个HTML动态文本 第5步:访问属性如下----。
vars["user"].Lastname
我已经创建了一个样本报告。你可以参考这里:- https:/drive.google.comfiled1dlh4qmamGur7voaNnlgamFTOIpAMk3_fview?usp=sharing。