Tag Archive pdf

JoGet: Save PDF From Jasper Report

ตัวอย่างการ save pdf file ที่สร้างมาจาก JasperReports ก่อนที่จะส่งให้ user ทางอีเมล์ เพื่อที่ฝ่ายที่เกี่ยวข้องจะได้นำไฟล์มาตรวจสอบความถูกต้องในภายหลังว่ารีพอร์ตที่เป็น pdf ไฟล์ที่ส่งไปมีเนื่้อหายังไงจากไฟล์ที่บันทึกเอาไว้

เราสามารถทำได้โดยใช้ plugin Bean Shell Tool ตามตัวอย่าง

import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import org.joget.apps.app.service.AppUtil;

public Object execute() {

/* get parameters from outside activity tools box */
String id = "#variable.id#";

String documentRoot = "C:\\Joget-v5-Enterprise\\apache-tomcat-8.0.20\\webapps\\jw\\";

/* connection to default datasource */
DataSource ds = (DataSource) AppUtil.getApplicationContext().getBean("setupDataSource");
con = ds.getConnection();

/* load JasperReports template */
String sourceFileName = documentRoot + "assets\\JasperReports\\app.jasper";

Map parameters = new HashMap();

/* send parameters to jasper report */
parameters.put("id", id);

/* genrate pdf file and save to local directory */
printFileName = JasperFillManager.fillReportToFile(sourceFileName, parameters, con);
if (printFileName != null) {
JasperExportManager.exportReportToPdfFile(printFileName, documentRoot + "datas\\policies\\" + id + ".pdf");
}

return null;
}

//call execute method
return execute();

อธิบายการทำงาน จะเรียกใช้ beanshell เข้าไปเรียก class เดียวกับที่ joget ใช้ จึงมั่นใจได้ว่ารีพอร์ตที่ออกมาจะเหมือนกับที่ joget ใช้จริงๆ โดยจะอ่านไฟล์ .jasper มาจาก “C:\Joget-v5-Enterprise\apache-tomcat-8.0.20\webapps\jw\assets\JasperReports\app.jasper” จากนั้นจะสรุปออกมาเป็นไฟล์ .jrprint เอาไว้ใน “C:\Joget-v5-Enterprise\apache-tomcat-8.0.20\webapps\jw\assets\JasperReports\” เหมือนกัน แต่ชื่อไฟล์อาจจะต่างกันโดยจะตั้งตาม atrbut name ที่อยู่ใน tag jasperReport และสร้างไฟล์ pdf เก็บไว้ที่ “C:\Joget-v5-Enterprise\apache-tomcat-8.0.20\webapps\jw\datas\policies” ตาม ที่กำหนดไว้ที่ใน JasperExportManager.exportReportToPdfFile

เพราะว่าไฟล์ใน “C:\Joget-v5-Enterprise\apache-tomcat-8.0.20\webapps\jw” สามารถเรียกดูได้จาก url จึงควรระวังเรื่อง Information leakage เอาไว้ด้วย

Joget: สร้างรายงาน pdf excel

การสร้างรายงานใน joget ทำได้โดยใช้ Jaspersoft® Studio สร้างรูปแบบรายงาน จากนั้นก็ให้ joget เรียกใช้ jasper libary สร้างรายงานออกมาให้เรา

การกรอกข้อมูล report

  1. สร้าง report ให้เรียบร้อยใน jaspersoft studio
  2. เปิด user view ขึ้นมา กด Add Category ด้านล่าง ขึ้นมาใหม่ คลิก Permission Icon คลิก Hide From Menu จะได้ไม่แสดง ในเมนูให้ผู้ใช้เห็น
  3. ลาก JasperReports มาวางใน Category ของเรา
  4. กรอกข้อมูล
    • Custom ID เป็น id ที่จะอ้างถึงเวลาที่เราต้องการดู report
    • Label เป็นแค่ชื่อที่ทำให้จำ JasperReports ว่าตัวไหนเป็นตัวไหน จะเห็นแค่ใน user view เท่านั้นไม่เกี่ยวกับตอนออกรายงาน ควรตั้งชื่อให้สื่อความหมาย
  5. Jasper Reports Definition (JRXML) คือ code ที่ได้มาจาก jaspersoft studio
  6. คลิก next
  7. Datasource คือ database connection ปกติใช้เป็น Default Datasource
  8. คลิก next
  9. ระบุ parameters ที่ส่งให้ report โดย
    • Name คือ ชื่อ parameter ที่ report ต้องการ
    • Value คือ ค่าที่จะส่งไป ถ้าส่งค่าด้วย url สามารถใช้ hash variable #requestParam. ชื่อ parameter # ได้เลยเช่น #requestParam.member_id#

การเรียกดูรายงาน

จะทำได้โดยเรียก

  • url domain / server ip /: port โดยทั่วไปคือ 8080
  • action=report
  • appId= application id
  • appVersion= version ของ user view
  • key=_&
  • menuId= คือ Custom ID ใน userview นั่นเอง
  • type= จะแสดงเป็นไฟล์ format อะไร มีให้เลือก pdf และ xls
  • userviewId= คือ id ของ userview
  • query string ที่จะส่ง parameter ให้ report เช่น &member_id=xxxxx

ถ้า

  • userview ของเรามี url http://localhost:8080/jw/web/console/app/develop/1/userview/builder/testUserview
  • Custom ID มีค่า profile
  • Parameter ที่ต้องส่งไปคือ member_id

จะเรียกดูรายงานได้จากรูปแบบ http://localhost:8080/jw/web/json/plugin/org.joget.plugin.enterprise.JasperReportsMenu/service?action=report&appId=develop&appVersion=1&key=_&menuId=profile&type=pdf&userviewId=testUserview&member_id=0910097693