Need Example of passing Jasper Reports Parameters for REST v2 API using JSON
当我查看将参数传递给Jasper Report REST 2 API的文档时:http://community.jaspersoft.com/documentation/jasperreports-server-web-services-guide/v550/running-report-asynchronously我看到了我需要一个"参数"字典。链接中的示例显示了XML并不是那么有用,因为它不清楚具体的JSON应该是什么样子。我能找到的最接近的链接是:http://community.jaspersoft.com/documentation/jasperreports-server-web-services-guide/v56/modifying-report-parameters。现在,我将相应的内容发送到服务器(以及我能想到的所有其他排列),然后我继续得到"400 Client Error:Bad Request"。我真的可以使用python代码的确切示例来生成所需的"参数"参数,例如"my_parameter_1 ="test_value_1"。
这是我目前的POST数据(为简洁起见,缺少一些参数)。我知道这是正确的,因为如果我省略"参数"参数,报告工作正常:
1 2 3 4 5 6 7 | { 'outputFormat': 'pdf', 'parameters': [{'name': 'ReportID', 'value': ['my_value_1']}], 'async': 'true', 'pages': '', 'interactive': 'false' } |
斯塔加特的好工作。我现在明白了。因为我没有最大限度地阅读审查,我浪费了一些额外的时间。因此,感兴趣的编码器不仅被建议知道嵌套的,语法上有趣的reportParameter-property,而且特别是内部的value-property是一个数组。我想在这里可以通过某种形式的列表/数组/集合?
令我恼火的是,如果我应该构建一个以上的"reportParameter"属性,但这根本就是无稽之谈
JSON语法是否允许对象中的重复键。
所以只是为了记录,如何发布多个参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | { "reportUnitUri":"/reports/Top10/Top10Customers", "async": true, "freshData": true, "saveDataSnapshot": false, "outputFormat":"pdf", "interactive": false, "ignorePagination": true, "parameters": { "reportParameter": [ { "name":"DATE_START_STRING", "value": ["14.07.2014"] }, { "name":"DATE_END_STRING", "value": ["14.10.2014"] } ] } } |
如果有人意外地通过REST和PHP与jasper沟通。帮自己一个忙,并使用PHP的请求而不是纯粹的CURL。它甚至有内部使用套接字而不是CURL的后备,当后者不可用时。
为你Staggart Upvote。
好的,感谢rafkacz1 @ http://community.jaspersoft.com/questions/825719/json-equivalent-xml-post-reportexecutions-rest-service发布了答案,我想通了。当他在那里报告时,所需的格式是:
1 2 3 4 5 | "parameters":{ "reportParameter":[ {"name":"my_parameter_1","value":["my_value_1"]} ] } |
要特别注意多个"reportParameter"。
这是一个适合我的例子。我使用的是Python 2.7,以及Jaspersoft的社区版。与上面的C#示例一样,此示例也使用了其余的v2,这使我很容易快速下载pdf报告
1 2 3 4 5 6 7 8 9 10 11 12 13 | import requests sess = requests.Session() auth = ('username', 'password') res = sess.get(url='http://your.jasper.domain:8080/jasperserver/', auth=auth) res.raise_for_status() url = 'http://your.jasper.domain:8080/jasperserver/rest_v2/reports/report_folder/sub_folder/report_name.pdf' params = {'Month':'2', 'Year':'2017','Project': 'ProjectName'} res = sess.get(url=url, params=params, stream=True) res.raise_for_status() path = '/path/to/Downloads/report_name.pdf' with open(path,"wb") as f: f.write(res.content) |
这是一个关于使用Rest V2生成报告的完整示例,在我的例子中它是在C#上运行的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | try { var server ="http://localhost:8080/jasperserver"; var login = server +"/rest/login"; var report ="/rest_v2/reports/organization/Reports/report_name.pdf"; var client = new WebClient(); //Set the content type of the request client.Headers[HttpRequestHeader.ContentType] ="application/x-www-form-urlencoded"; //Set the username and password NameValueCollection parametros = new NameValueCollection(); parametros.Add("j_username","jasperadmin"); parametros.Add("j_password","123456"); //Request to login client.UploadValues(login,"POST", parametros); //Get session cookie string session = client.ResponseHeaders.Get("Set-Cookie"); //Set session cookie to the next request client.Headers.Add("Cookie", session); //Generate report with parameters:"start" and"end" var reporte = client.DownloadData(server + report +"?start=2015-10-01&end=2015-10-10"); //Returns the report as response return File(reporte,"application/pdf","test.pdf"); }catch(WebException e){ //return Content("There was a problem, status code:" + ((HttpWebResponse)e.Response).StatusCode); return null; } |