Crystal Report Report Class Model
จากที่ผมเคยใช้ Crystal Report ใน Windows Application มา มี Model ในการ ใช้งาน
จริงๆ คือ 2 แบบหลักๆ คือ
1. Crystal Report Viewer Model คือ แบบ Basic เลยครับ ลาก Crystal Report Viewer มาวางบน form
แล้ว ทำการ Binding Report ที่ได้เขียนไว้ แล้วเข้าไปกับตัว viewer
ข้อดี คือ ง่าย เหมาะสำหรับ Application ตัวเล็กๆ
ข้อเสีย คือ เวลามี Report หลายๆ ตัว ก็ต้องมี form ที่มี Crystal Report viewer หลายๆ form นั่นเอง
หมายความว่าจะดู Report ไหน ก็เปิด form นั้นขึ้นมา ทำให้ ถ้าเป็น โปรแกรมที่มีหลายๆ report
application ก็จะใหญ่มาก เนื่องจาก มี form report หลายตัว
2. Report Object Model คือ การสร้าง Report Object ขึ้นมา แล้ว ทำการ ส่ง Report ให้ตัว
Crystal Report Viewer หลักๆ ที่ผมเคยใช้มี 2 แบบคือ
2.1 Report Document Object คือ ใช้ Object ReportDocument ทำการ Load Report ด้วย Function
Load("filename")
ข้อดี คือ ทำให้ application flexible สามารถทำในลักษณะ ส่งไฟล์ Report มา แล้วเปิด
ไฟล์นั้น ได้เลย โดยใช้ ตัว viewer แค่ตัวเดียว ทั้งโปรแกรมได้
ข้อเสีย คือ function Load ค่อนข้างใช้ resource มาก ในการ Load Report ขึ้นมาครั้งแรก ทำให้โปรแกรม ช้าทุกครั้ง กรณีเรียก report ครั้งแรก
2.2 Report Class คือ ใช้ ReportClass ทำการ สร้าง Report Class ของแต่ละ report ขึ้นมาลักษณะการ ทำงานคล้ายๆ 2.1 แต่ในการสร้าง Report Class นั้นสามารถ กำหนด feature ในการ Cach ได้
ข้อดีี คือทำให้ การทำงาน flexible คล้ายๆ กับ 2.1 แต่ มีความเร็วกว่าในการ Create Report
ข้อเสีย คือ ต้องทำการ Define Report Class ทุกตัวที่จะใช้งาน ทำให้ ไม่สามารถเปิด report อื่นๆ นอกจากที่ define class ไว้ในโปรแกรม
สรุป ณ ตอนนี้ ผมเปลี่ยนจาก 2.1 มาเป็น 2.2 เนื่องจากสาเหตุ เรื่องต้องการเพิ่ม performance ของโปรแกรม ให้ทำงาน เร็วขึ้น เนื่องจาก function load มันช้ามากๆ บางครั้งติดปัญหาเรื่อง I/O อีกตากหาก
รบกวน ถามหน่อยครับ สรุปตอนนี้ ทำให้ โหลดได้เร็วๆ หรือยังครับ
ตอบลบถ้าทำตามข้อ 2.2 พอจะมีวิธีเขียน code มั้ยครับ
ก็ จากที่ทดสอบคือ ใช้ตามข้อ 2.2 จะเร็วกว่า 2.1 ครับ เนื่องจาก Report Class จะสามารถ define พวก cache ได้ จริงๆ แล้ว visual studio crate method ให้ครับ
ตอบลบแต่อย่างไรก็ดี ในการ Create Report ครั้งแรก จะใช้เวลามาก กว่าครั้งถัดไปครับ แก้ปัญหาแบบหน้าด้านๆ โดยให้ app แสดง progress bar แสดง
status การ Load ครับ
รบกวนช่วยอธิบายวิธีสร้างตัว report class ได้หรือเปล่าคับ คือตอนนี้ใช้วิธี 2.1 อยู่แล้วมันช้ามากครับ ขอบคุณครับ
ตอบลบขอโทษ ที่ตอบช้าไปหน่อยนะครับ: จริงๆ ข้อ 2.2 นั้นง่ายมากครับ ถ้าใช้ Visual Studio อยู่ ก็แค่ New -> File แล้วเลือก crystal report ก็แค่นั้น ตัว Visual Studio จะทำการ Generate File ออกมาให้ 2 ตัวคือ .rpt และ .cs กรณีใช้ c# แล้ว ก็ design report ตามปกติครับ
ตอบลบเวลาใช้งาน ก็แค่ ประกาศ report เป็น Objectตัวหนึ่ง ใช้งานเหมือนข้อ 2.1 ครับ แต่ไม่ต้อง Load ใช้คำสั่ง เหมือน Create Object ทั่วไป แล้ว โยนข้อมูล เข้า report ตามปกติ ครับ